在制作 GPU Instancing 优化时,顺手制作了:在 Unity 的 SystemInfo.supportsInstancing == false
时的普通绘制:Graphics.DrawMesh
代码如下:
写了个 四叉树剔除,可以看到上图中 蓝色的对象(可以绘制的对象,有两个,因为我将可绘制的显示为蓝色,否则不是蓝色,如:绿色)
在上图的 监视1(英文版叫:Watch1)中显示了 info.validatedInstCount == 2
再结合上面的代码,在循环中我们调用了两次:Graphics.DrawMesh
如果该 API 内部没有剔除的话,那么,用一些分析工具是可以看到会有两次 Draw XXX 的 API 的,但如果只有一次 DrawXXX ,说明 Graphics.DrawMesh
内部作用剔除的功能(因为:虽然我们手动调用两次 Draw API,单是有一个不是视锥范围内,如果 unity 的 DrawMesh API 内部做了剔除的话,那么其中一个不在视锥内的肯定不会被绘制)
如下图,下面是绘制了一棵树
然后我用 RenderDoc 来分析结果,查看到:确实调用了一次 的 ID3D11DeviceContext::DrawIndexed
API
后续有机会,我再分享一个:四叉树 + 视锥剔除 + Instancing 的场景优化