Unity GPU Instance踩坑记录

Unity GPU Instance踩坑记录

Unity中GPUInstance主要有两种:一种是unity自动进行的,或者调用Graphics.DrawMeshInstancedIndirect等API;两种实例化各有利弊,前者是依靠GameObject,自然沿袭unity的剔除、矩阵运算等,方便调试,但是性能不如后者,视具体项目选择,此处主要探讨的是后者。

1、多次调用实例化api有时会导致不同批次阴影混淆
我猜测此处是由于阴影合批的原因,解决方案如下:
(1)官方论坛此处提到一种解决方案可以解决,使用MaterialPropertyBlock把渲染分离
(2)去除阴影合批指令也可以解决此问题(如果是surface shader貌似无法做到只能用第一种方法解决,如有大佬知道还望留言指点)
Unity GPU Instance踩坑记录_第1张图片

2、同一物体在不同渲染批次下unity_InstanceID分配不一致
由于底层GPU实例化无法使用射线检测定位获取物体信息,我的做法是用另一个摄像机,使用ShaderReplace渲染一张id图,将unity_InstanceID编码到rgba四个通道,但是发现无法对应(同一摄像机则可以)。
猜想是id不一致引起的,验证的确如此,因此需要用自己定义的id同步,问题解决。

你可能感兴趣的:(笔记,BUG,技术,unity3d)