这一句是引擎里面的原文
// this assumes light pass index is the same for all submodels
我只要使用一个有submodel的模型,第一个材质使用引擎自带的toon开启描边,第二个材质使用unlit,就会报错直接渲染挂掉。
这是个可以复现的demo,SkeletonBatchDC.rar (1.5 MB)
我对比了1.1.1和1.2里standard写法的区别,发现1.2的standard里面相同的techniques里面有两个差不多的pass,在1.1.1的时候是只有一个pass。
这还有很多其他问题,比如两个pass都是用的toon,toon的描边开关也会有影响,不开lightPassIdx是1开了是2,如果第一个toon材质开启描边,第二个不开,两边的身体的颜色都会不一样了。
至于为什么两个材质设置不一样,这和子模型的结构有关系,有时候确实会有这个需求,有些模型眼睛和嘴巴这些都是单独的一个submodel,不需要开启描边之类的功能。
之前1.1.1还参照这个描边写了一些XRAY之类的效果用宏定义开关,都会因为1.2这个光照改动导致问题,而且描边pass的index也不能往后放。如果描边pass放下面,priority调低和其他模型的遮挡就有问题了。
又看了一下代码发现没事了,之前是因为有一个submodel用了引擎自带的toon才导致升级后的BUG,如果所有材质都改成1.1.1时候的写法就没问题了,只要pass上不带forward-add,就不会又问题。不过已经打了这么多字还是吐槽一下,引擎这个默认的lightPassIdx逻辑我还是觉得有点问题,比如两个submodel一个用描边toon一个不用的需求我觉得不算很奇怪。


