notion image
notion image
 
 
这两天遇到了一个疑难杂症,使用了某个着色器的材质在iOS端会出现这种随机的闪屏现象。这个情况在PC端和Android端都没有复现。经大佬指点意识到可能跟Frame Buffer的读取方式有关,一般是Load Action为Dont Care的时候由于数据不确定可能产生这个情况。
在对shader进行编写清理之后经过反复测试发现了导致Shader内导致产生该现象的指令是Blending,而本身Blending不应有此情况。再经比对发现是在Opaque阶段设置了Alpha Blending。这个调用本身是不成立的,但是可能因为PC和Android硬件通过某种方式主动的在Opaque阶段屏蔽了Blending导致这个问题没有出现,而iOS是没有对这种情况进行优化的。因此以后Shader需要注意避免这些问题。
总结起来该问题需要如下条件同时满足:
  1. iOS平台
  1. Load Action为Dont Care
  1. 着色在Opaque阶段
  1. 设置了Alpha Blend模式
3、4如果切换设置就是几种比较常规的shader设置,理应没有问题。至于如果Load Action不为Dont Care是否会有这个问题,没有经过验证。因为如果Frame Buffer的Load Action完全不使用Dont Care模式会有大量的带宽开销,这在移动端是承受不起的。因此没有测试的必要性。
 
URP的资源导入设置修改(一):替换默认导入材质的shaderUE5 Metasound 的Submix逻辑