1. 程式人生 > >解決Unity Vertex Shader 渲染丟失的問題

解決Unity Vertex Shader 渲染丟失的問題

這幾天美術給來了一個用了頂點動畫的場景模型 , 因為頂點移動的量比較大 , 有時候攝像機移動的時候會發現模型不被渲染了

仔細分析了一下

找到原因是

因為使用了這個shader的Renderer的Bounds實際上並沒有根據shader的頂點動畫改變而更新,

導致這個模型的Bounds已經離開了攝像機的視錐體,然後就被剔除了

解決這個問題的方法也比較簡單,就是手動放大對應MeshFilter中mesh的Bounds,使頂點動畫的移動總是限制在Bounds中

記得是改變MeshFilter中mesh變數的Bounds,而不是MeshRenderer中的Bounds

程式碼如下

        var  ren = this.GetComponent<MeshRenderer>();
        var mesh = this.GetComponent<MeshFilter>();
        float Height = ren.material.GetFloat("_Height"); //這是shader中控制頂點位移量的屬性
        Bounds bound = mesh.mesh.bounds;
        Bounds newBounds = new Bounds(bound.center, new Vector3(bound.size.x, bound.size.y + Height * 2, bound.size.z));
        mesh.mesh.bounds = newBounds;