给项目组做了个imageEffect特效,结果导致ngui不显示(ugui则不存在此问题),看ngui的一些shader,其中ztest是开着的,而且ui相机的Clear Flags用的是Don't Clear。试了一下,无论是将ngui的shader中的ztest改成Always还是将ui相机的Clear Flags改成Depth Only,ui都能正常显示。但问题是在没加我的imageEffect特效之前什么都不用改也能正常显示ui,所以以上解法都不太本质。
其实经过上面的观察已经明白了问题的原因,就是加了我的imageEffect之后zbuffer跟之前相比发生了变化。我在主相机的OnRenderImage里做了一个blit链:
Graphics.Blit(sourceTexture,RT1,mat1);
Graphics.Blit(RT1,RT2,mat2);
Graphics.Blit(RT2,RT3,mat3);
...
Graphics.Blit(RT(n-1),RT(n),mat(n));
Graphics.Blit(RT(n),destTexture,mat(n+1));
最后一步blit到destTexture上时,所用的shader应该是不读写zbuffer的,即:
ZWrite off
ZTest Always
我之前忘加了这个。