在SRP中使用DrawMeshInstancedProcedural之后,发现之前材质里定义的属性都无效了。排查后发现是UnityInstancing.cginc的锅,这里摘抄一下代码:
#if UNITY_INSTANCING_ENABLED
...
#else
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
#define UNITY_INSTANCING_BUFFER_START(buf)
#define UNITY_INSTANCING_BUFFER_END(arr)
#define UNITY_DEFINE_INSTANCED_PROP(type, var) static type var;
#else
#define UNITY_INSTANCING_BUFFER_START(buf) CBUFFER_START(buf)
#define UNITY_INSTANCING_BUFFER_END(arr) CBUFFER_END
#define UNITY_DEFINE_INSTANCED_PROP(type, var) type var;
#endif
...
#endif
问题出在这一行上:
#define UNITY_DEFINE_INSTANCED_PROP(type, var) static type var;
&nb
UnitySRP中DrawMeshInstancedProcedural导致材质属性失效的问题与解决方案

在使用SRP的DrawMeshInstancedProcedural后,发现材质属性因UnityInstancing.cginc中的static定义而无法修改。问题在于static变量不能被Shader或Material方法改变,且初始值为0。解决方法包括删除static关键字或避免使用UNITY_INSTANCING_XXX语法直接定义变量。
最低0.47元/天 解锁文章
1930

被折叠的 条评论
为什么被折叠?



