低FOV下,移动端CSM阴影在天玑芯片显示异常

你好:

在设置了较低FOV和较大的CSM阴影绘制距离后,部分天玑芯片(测试了天玑9200 9300 9400均有问题)会出现明显的阴影阶梯样式的异常,FOV在20以下的时候问题逐渐显现,测试包的FOV设置为了5

如图所示:

[Image Removed]在骁龙芯片则显示正常(图中用骁龙865进行测试)

[Image Removed] opengl和vulkan都有这个问题,屏幕空间阴影则没有这个问题。初步怀疑是gl_fragcoord.w和ScreenToShadow矩阵的精度问题?

我提供了测试用的apk包,希望能帮助解决问题。非常感谢

重现步骤

新建场景,设置摄像机FOV为5,将CSM距离提高到10万,打包安卓并在天玑9200-9400的芯片上运行

Hi,

正交投影在移动端小时的问题,可以通过修改MobileLightingCommon.ush里,函数FDeferredLightData GetDirectionalLightData里的,调用MobileDirectionalLightCSM的地方,改成下面这样。

half ShadowMap = MobileDirectionalLightCSM(ScreenPosition.xy, IsOrthoProjection() ? ConvertFromDeviceZ(SvPosition.z) : ScreenPosition.w, ShadowPositionZ);

Low FOV在这个设备上的问题,我暂时每找到原因,已经尝试设置地板的材质的Precision Mode使用Use Full Precision on Every Float了,但是仍然没有效果,感觉应该是硬件或者驱动对float的精度有一定的损失造成的。所以尽量不要用这种方式实现效果。

非常感谢,我们会尝试使用正交摄像机来代替低FOV的情况

好的,如果有问题再继续沟通。