5.7.4 虚拟阴影异常

这是一个实心nanite球体,投射的阴影也应该是实心的,现在阴影上很多闪烁的白点.用快速启动关卡烘焙运行百点也还在.之前都没问题的.不知道怎么突然就这样了

这类“实心物体阴影上出现闪烁白点/孔洞”在 VSM 下常见于以下几种原因,可以按顺序排查:

1. 控制台输入 r.Shadow.Virtual.Cache 0 临时关闭阴影缓存,若白点消失,说明是缓存失效问题,可检查是否有材质用了 World Position Offset 却未设置“Shadow Cache Invalidation Behavior”。

2. 调大方向光的 Shadow Source Angle 或在灯光上把 “Shadow Slope Bias / Normal Bias” 适当调整;也可以试 r.Shadow.Virtual.SMRT.RayCountDirectional 和 SamplesPerRayDirectional(例如 8/4),减少采样噪点。

3. 用 视图模式 → 虚拟阴影贴图 → Cached Page / Virtual Page 可视化,看白点位置是否对应页面边界或无效页。

4. 若是 Nanite 网格,检查模型是否有法线翻转/非闭合面,以及 Nanite 的 “Fallback Relative Error” 设置;用 r.Nanite 0 对比一下即可判断是否 Nanite 引起。

5. 如果之前正常而突然出现,建议删除项目的 DerivedDataCache 和 Intermediate/ShaderCache 后重启,有时是着色器缓存损坏。

试了你的所有方案都不行.关闭nanite阴影恢复正常(并不是所有的物体阴影异常),这些物体之前都显示正常的然后突然有一天就这样了,我用建模工具创建了一个外形差不多的物体阴影是正常的,

你补充的这三点把范围缩得很小:关掉 Nanite 阴影就正常、不是所有物体、新建一个外形差不多的网格阴影是好的。那就不是方向光,也不是 VSM 的全局缓存。坏的是这几个网格自己的 Nanite 数据。阴影深度走的是 Nanite 光栅,主视图看起来还是实心,所以白点只出现在阴影上。

不要再改方向光,只处理这几个坏网格:

  1. 打开坏的静态网格,Nanite 设置里先取消启用,保存,再重新勾上,再保存。这会强制重编 Nanite。很多“以前正常、某一天突然出洞”是这份网格在 Nanite 构建或 DDC 里的数据坏了。新建的网格走的是一次新构建,所以是好的。

  2. 重编之后如果还有洞,看材质。阴影通道会把 Masked、Dither Temporal AA、Pixel Depth Offset、双面叶片当成镂空来光栅。哪怕主体看起来是实心球体,只要某个材质槽是 Masked 或带抖动,VSM 上就会是闪烁白点。把坏网格的材质临时换成默认的实心材质试一次。新建的那个如果用的是不透明材质,差别就在这里。

  3. 还是只有阴影有洞的话,对比两个网格的 Nanite 统计(三角形数量、Fallback Relative Error)。把坏网格的 Fallback Relative Error 调小,并在网格编辑器里看 Nanite 可视化有没有本身就缺的簇。有缺簇就是源网格有零面积三角形或法线翻转,需要在建模工具里修完再导入,而不是继续调阴影偏差。

  4. 看是不是流送没驻留满:看着阴影时开 stat nanite。如果这个网格 residency 不满,白点就是缺页。可以把 r.Nanite.Streaming.StreamingPoolSize 临时加大试一次。新建的小网格驻留得下,所以它正常。

关 Nanite 能好,只说明阴影退回了普通深度,不代表网格本身没问题。先对坏网格做一次取消再启用 Nanite,再换一次默认实心材质,就能分开是构建坏了,还是材质在阴影里被当成镂空。