使用GPUInstancing一个批次合并 不同 的小物件模型
发表于2020-08-19
https://unity.cn/projects/shi-yong-gpuinstancingyi-ge-pi-ci-he-bing-bu-tong-de-xiao-wu-jian-mo-xing
这个方案我之前项目中本来有想实施,只不过那时候物件都比较大。这个比较适合场景中有好多不同的小物件,drawcall完全不可控轻松上1k,传统的方式合并小物件会导致vertexBuffer变大,这个方案还是有参考价值的,所以先放出来让大家帮忙验证一下,有更好的想法可以一起迭代,我再用到公司项目,一下是我周末做的一个demo,哈哈哈。
如上图,我合并了3种不一样的模型,使用了一个批次。 三种模型是动态合并的,再uv8中标记的meshID(这三种模型的对应ID) MaterialPropertyBlock中指定了需要显示的mesh shader中对非meshID的mesh在clip空间做顶点offset,将它移出视锥。 TB(D)R的在视锥三角形剔除上相信还是很高效的,虽然这边三角形处理量会变多,但是只要它不写回内存parambuffer就不是很过分,相比传一个很大的buffer进去io的消耗,处理一个小buffer中的三角形乘以一个矩阵再剔除明显比较高效了。 现在只做了mesh的,还需要做材质不同属性的合批,以及lightmap的合批,最后看能不能用于不同特效的合批。 需要几个朋友一起完善一下,有兴趣的朋友可以加我微信 smartethet,后续会开一个新的仓库迭代。 github:https://github.com/smartether/ChameleonInstancing 文章可能会有后续更新,可以多回来关注。