大部分mali设备在同时开启support spot light shadow和后期雾后,雾效会出现明显马赛克闪烁问题

你好:

发现开启了support spot light shadow以切换到Screen Space Shadow Map之后,安卓包的后处理雾(或者说所有和深度有关的效果)在opengl下都会出现马赛克状闪烁问题,且renderdoc抓帧后问题效果,或者切换到vulkan后也会正常。

在重现步骤中我附上了打的一个测试包。

目前测试了mali g52 g68 g72 g76 g715等设备都会有问题,但是天玑9400的g925不会有问题。骁龙也没有问题

想了解一下有没有在5.4修复的方法。非常感谢!

[Image Removed]

1 Like

重现步骤
使用5.4.2官方版本引擎,新建空项目,项目上设置打开support spot light shadow以切换到Screen Space Shadow Map,雾的设置保持默认,使用opengl进行打包

Hi,

你好,你方便用5.6的版本测试一下这个问题是否还存在吗?(我感觉应该是有的)

看起来好像是fog pass跟base pass在同一个rendre pass里,但fog pass里又采样了DepthRT,导致出现了问题。

我不太确定这种情况在在FMobileSceneRenderer::RenderFog里,根据IsOpenGLPlatform,调用SubmitAndBlockUntilGPUIdle()是否有帮助。也就是在basepass后面加一个glflush。或者如果也不行,可以试试把FMobileFogPS.ModifyCompilationEnvironment 里的IS_MOBILE_DEPTHREAD_SUBPASS设置成1,然后再修改一下MobileFog.usf文件,让这个shader重新编译一下,看看是否能解决问题。

你好,感谢回复

测试了5.6版本也是有这个问题的。后面的一些引擎修改目前还没测试。后续官方会有修复的计划么?

暂时还没有,你方便提供一个纯蓝图的复现工程吗,我想测试一下修复方式,然后反馈给mobile team。

这里是一个5.4的复现工程。是新建了一个工程并调高了雾的浓度方便复现,然后打开了spot light shadow来切换到屏幕空间阴影

Hi,

我测了一下,不是我上面说的问题,是精度的问题,我尝试修改shader的所有用到half的地方,但是没有效果,只有把DepthRT的精度改成32bit才解决。可以在对应设备的DeviceProfile里设置r.OpenGL.Depth24Bit=0,应该就能修复这个问题。

感谢回复,做了初步测试,修改之后问题可以解决