大地形中草繪製的思想

其實本篇是大地形繪製中一個特殊的案例,之所以說其是特殊的,是因爲我們的草,使用的是GPUInstance方式進行繪製。
也就是說同一種類型的草,使用DrawMesh的時候,會傳遞繪製的個數。
具體使用的函數如下:

 GrassInstanceInfo info = item.Value;
            Graphics.DrawMeshInstancedIndirect(
            info.mesh,
            0,
            info.mat,
            info.mesh.bounds,
            info.argBuffer, //繪製的參數
            info.argOffset, //繪製的submesh和個數
            info.mpb,
            ShadowCastingMode.Off,
            false,
            0,
            null,
            LightProbeUsage.BlendProbes,
            null);

這樣做的好處是,同一種類型的草,只會有一個drawcall。

ok,那麼下面的一個思想是,如何將大地形上的草,進行劃分。
在這裏插入圖片描述
對於每個草,對其處理的步驟:
1、判斷其所在的blockID
2、每塊地形,將草歸類,key是mesh和材質相同,這樣如上圖左下角的塊中有兩種類型的草,所以如下:
(黑色圈)=》grass_mesh_1 =>2個=》這兩個合併,都是一起繪製出來的,所以aabb包圍盒當做一個
(藍色圈)=》grass_mesh_2 =>2個=》這兩個合併,都是一起繪製出來的,所以aabb包圍盒當做一個
3、將沒類的草,插入到塊的節點上,以備剔除操作
4、如果在視錐體內,則進行繪製,繪製函數如下:DrawMesh(grass_mesh_x, count個)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章