大地形中草绘制的思想
程序员文章站
2022-03-26 10:36:29
...
其实本篇是大地形绘制中一个特殊的案例,之所以说其是特殊的,是因为我们的草,使用的是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个)