欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大地形中草绘制的思想

程序员文章站 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个)

相关标签: Unity