关于Contact Shadow的一些问题

我们项目在运用Contact Shadow的遇到的一些问题,大致情况与重现的步骤如下:

1、我们的草很多,开动态阴影会没有性价比,我们选择用接触阴影模拟,效果不错还省;

2、我们的项目有TimeOfDay的功能;

3、TimeOfDay切到傍晚的时候,地形SM如果【打开接触阴影】,地形会出现很硬的接缝。

下图为提交的【重现项目】按2号标签,阳光做如下调整可以模拟项目中傍晚的情况:

[Image Removed]4、但在其他时间段,如果我们把地形SM的【关闭接触阴影】,则在其他时间段会出现接触阴影断层的情况。

下图为提交的【重现项目】按1号标签,阳光做如下调整可以模拟项目中其他时间段的情况:

[Image Removed]<br/>

所以我想请教的是,在不修改地形模型(UE4升级到UE5的项目,这样的模型太多了。)的前提下,有没有什么方法能够让任何时间段的阴影都能够相对完善?

PS:r.ContactShadows相关的命令行、调整ContactShadow的相关参数都试过了,然而并不如预期。

感谢!

抱歉我本地(5.6.1)无法打开地图,并且在Content Browser里看不到地图文件(虽然磁盘上有)。看上去很可能是版本问题,麻烦你本地检查下是否可以开启,并告知具体使用什么版本

低角度自阴影问题和深度检测有关,一般使用shadowbias来解决,但Contact Shadow目前并没有bias一说。当然也可以在地形材质里做一些法线的bias来缓解。但都比较繁琐。

目前Contact Shadow可以分别对开启和未开启Contact Shadow的对象区别设置Intensity,我认为可以利用这个功能,把草等强依赖Contact Shadow的对象设置为Cast Contact Shadow,地形模型关闭Cast Contact Shadow;然后就可以在Directional light的参数中对Cast Shadow Non Cast Intensity动态调整,也就是在太阳慢慢低于一定角度的时候这个参数慢慢变小,直到0完全关闭地形的Contact Shadow。不知是否可以满足需求

补充下:如果关闭Contact Shadow还会出现低角度光线的瑕疵可以尝试调整r.Shadow.Virtual.NormalBias参数;尤其对于三角面比较低的时候可能容易出现

Cast Shadow Non Cast Intensity 调整成为1的时候,比如说树(默认关闭了接触阴影)与地面接触的时候会产生一些“伪影”,另外我觉得树看起来没有之前那么通透了。[Image Removed]

如果你不希望使用Non cast intensity可以尝试动态调整Contact shadow Length,更大的数值可以减弱精度避免低角度阴影的投影瑕疵

好的,感谢您耐心的解答。

抱歉,之前的压缩包有点问题,我重新上传了1个,给您造成麻烦了。

这个尝试过,效果并不好,也就是地形消除投影瑕疵(数值过大还会造成其他的问题)与草的接触阴影不可兼得。

我想了一种方式,您可以帮我参考一下吗?

大致就是:

动态的开关地形的接触阴影,我们的TimeOfDay不是“时间流逝”的形式,而是定了几个时间段(早、中午、傍晚…………)。

傍晚的时候最容易产生接触阴影的伪影,但应该不至于产生【接触阴影断层】的问题。因为这个时候自投影比较长,覆盖面也广,把接触阴影给覆盖了。

所以在傍晚关闭地形的接触阴影,其他时间段开启接触阴影。

如果这样我没感知到会有什么问题。不过地形大部分时候应该不需要开Contact Shadow,也就是只有当地形VSM阴影非常短,短到小于草地高度产生你上面图片中“断层”情况才需要开启衔接下。所以地形默认关闭,中午开一下即可