使用GPUInstancing一个批次合并 不同 的小物件模型

发表于2020-08-19
评论0 3.8k浏览

 

https://unity.cn/projects/shi-yong-gpuinstancingyi-ge-pi-ci-he-bing-bu-tong-de-xiao-wu-jian-mo-xing

 

这个方案我之前项目中本来有想实施,只不过那时候物件都比较大。这个比较适合场景中有好多不同的小物件,drawcall完全不可控轻松上1k,传统的方式合并小物件会导致vertexBuffer变大,这个方案还是有参考价值的,所以先放出来让大家帮忙验证一下,有更好的想法可以一起迭代,我再用到公司项目,一下是我周末做的一个demo,哈哈哈。

description

如上图,我合并了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 文章可能会有后续更新,可以多回来关注。


 

  • 允许他人重新传播作品,但他人重新传播时必须在所使用作品的正文开头的显著位置,注明用户的姓名、来源及其采用的知识共享协议,并与该作品在磨坊上的原发地址建立链接
  • 可对作品重新编排、修改、节选或者以作品为基础进行创作和发布
  • 不可将作品进行商业性使用
  • 需在以作品基础上创作的演绎作品上适用相同类型的知识共享许可条款

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: