改进的光线追踪阴影

改进的光线追踪阴影

启用光线追踪阴影后,此模组通过增加阴影出现的距离,修复了杰洛特头发上的大部分光照伪影,并减少了小物体阴影的突然显现,同时提升了树木阴影移动的距离。我们重获

视觉效果与图形

关于《巫师3》4.04补丁的说明

补丁发布说明提到改善了头发的照明效果——我简要测试了一下,发现这个模组在减少RT阴影下的头发问题(以及提升质量)方面仍然有用。

modImprovedRayTracedShadows_v3.4 的变更

  • 将RTSTConfigInstancingDistance降低至40,以完全修复靠近树木转向时可能出现的帧时间峰值(卡顿)(感谢CapoM235i。)

modImprovedRayTracedShadows_v3.3 的变更内容

  • 将RTSTConfigInstancingDistance的值从90减少到80,以修复个别位置的帧时间尖刺问题(感谢CapoM235i。)

改进版光线追踪阴影v3.2的变更

  • 进一步减少了小物体阴影的突然出现 - 现在阴影出现的距离是原版的两倍。这提供了非常好的画质,但比v3.1版本稍慢一些。
  • 将阴影的最大距离略微减少到600米。

modImprovedRayTracedShadows_v3.1 的变更

  • 新的Speedtree配置与4.03补丁兼容——现在阴影的移动距离从20米增加到35米。这在质量和性能之间取得了良好平衡。4.03补丁之前为获得良好画质所需的更大范围现在已不再必要。
  • 修复了 4.03 版本中仍可能偶尔出现的阴影跳动小问题。

modImprovedRayTracedShadows_v3.0 的变更

  • 移除了Speedtree设置。在《巫师3》4.03版本中,CDPR修复了树木阴影跳跃的故障。
  • 主要修复了杰洛特头发的问题(该问题在4.03补丁中仍未修复)。
  • 新增默认设置,以减少与小物体相比的弹出。

已知bug

  • 《巫师3》中的光线追踪与Hairworks图形选项配合不佳 - 如果杰洛特头发的阴影显示异常,请关闭Hairworks,或使用此模组:[链接缺失]
  • 头发效果并非总是完美,但在多数情况下(尤其是黎明和黄昏时分)比未使用模组时更准确。
  • 像杯子等极小物体的阴影仍可能明显闪烁。我认为《巫师3》判定哪些物体需要光线追踪的算法低估了立方体包围盒的小物体。
  • 在某些角度下,屏幕边缘的草叶阴影可能会消失。这是因为草叶仅在屏幕空间中进行光线追踪,而非世界空间。
  • 这些bug存在于《巫师3》中,模组只能减少其影响,无法完全修复。

依赖关系

兼容性

已在《巫师3》4.03和4.04版本上测试。与"Faster RT if No RT Shadows"模组([链接缺失])中的 FasterRTifNoRTShadows.ini 不兼容。但你可以将该模组中的 FasterRTUltraPerformanceGlobalIllumination.ini 与本模组一起使用。

安装

从zip中提取ImprovedRayTracedShadowsHigh.ini文件,并将其放入《巫师3》安装目录中的\bin\config\platform\pc路径下。

配置

在图形菜单中:

  • 将光线追踪阴影设置为开启。
  • 将阴影质量设置为低。

禁用/卸载

删除ini文件,切换回更高的阴影质量并关闭光线追踪阴影。注意:即使光线追踪阴影关闭,该模组仍会消耗一定性能,因此不要将ini文件留在原处。

关于游戏内“阴影质量”设置的说明

"阴影质量"仅影响非光线追踪阴影(级联阴影)。即使开启光线追踪阴影,级联阴影贴图仍会生成。为何CDPR没有禁用级联阴影?虽然光线追踪阴影应用于主要不透明渲染通道,但旧的级联阴影仍用于反射、杰洛特头发表层,以及其他部分毛发和半透明物体。

生成超高质量级联阴影映射会造成极高的性能开销。如果它们没有应用于任何普通平坦表面,其实并不值得。W3游戏中99%的反射效果来自水面——或是泥泞水洼,或是带波浪的水面,并非完美镜面反射。因此,你其实很难察觉阴影贴图细节变少了。

当光线追踪阴影与层叠阴影差异显著时,你仍会在杰洛特的头发上看到问题。此模组修复了黎明与黄昏时分的巨大差异,但两者仍可能偶尔不匹配(若完全一致,则选择光线追踪阴影便毫无意义了!)

进一步定制化,以追求更高的品质

我不推荐这个。即使在更高的设置下,大部分时间看起来还好,但在某些场景中可能会出现严重的CPU瓶颈,性能会大幅下降——有时甚至低于30帧。

你可以编辑ini文件:

  • 如果你想进一步减少阴影突然出现的情况,可以尝试将ProximityTLASObjectAngleSize的值调低一点(例如设为0.03)。
  • 如果希望树木阴影能延伸到更远的地方,可以增大RTSTConfigUpdateDistance和RTSTConfigUpdateWindSimBlendDistance(例如设为60/55)。
  • 若想保持原版画质/性能但仅修复毛发问题,请删除除 [Rendering] 部分外的所有内容。

性能

这可能会因您的系统、其他设置以及游戏中的位置而有很大差异。它会影响GPU和CPU。例如在我的系统上:

  • GPU: Nvidia 3080Ti

  • CPU: AMD Ryzen 9 5900X

  • 分辨率 3180x2160 DLSS 性能模式

  • W3版本:4.03

  • 设置:所有光追效果开启,全局光照性能模式,其他设置均为超高(除非另有说明)。

  • 已安装:来自我的模组([链接缺失])

  • 场景:诺维格瑞广场,火刑台前的台阶上。这很可能是游戏中要求最高的场景,无论是否使用模组都受CPU限制,因此差异很小。

  • 使用模组后的帧率:

    • 46FPS(光线追踪阴影开启,非光线追踪“阴影质量”低,mod v3.2 - v3.4)
    • 47FPS(光线追踪阴影开启,非光线追踪“阴影质量”低,mod v3.1 或 v3.0)
    • 注意:以下是常见的帧率表现,mod v3.1 - v3.3 版本在树木较多的区域转身时偶尔会出现卡顿(掉帧)。v3.4 和 v3.0 版本则流畅得多(帧生成时间更稳定)。
  • 无模组时的帧率:

    • 48FPS(开启RT阴影,“阴影质量”极高;存在更多突然出现和头发问题)
    • 49FPS(关闭RT阴影,“阴影质量”极高)
  • 场景:断桥快速旅行点,白果园(树木众多,给光线追踪带来较大负担)

  • 使用模组后的帧率:

    • 56FPS(RT阴影开启,非RT“阴影质量”低,mod v3.2 - v3.4)
    • 57FPS(RT阴影开启,非RT“阴影质量”低,mod v3.1)
    • 60FPS(RT阴影开启,非RT“阴影质量”低,mod v3.0 使用原版树木更新距离)
    • 注意:以下是典型的帧率表现。模组 v3.1 - v3.3 版本在树木较多的区域转动视角时偶尔会出现卡顿(掉帧)。v3.4 和 v3.0 版本则流畅得多(帧时间更稳定)。
  • 未安装模组时的帧率:

    • 56FPS(开启RT阴影,"阴影质量"极高;会出现更多弹出和头发问题)
    • 61FPS(关闭RT阴影,"阴影质量"极高)

关于《巫师3》4.04补丁性能与4.03版本的对比说明

快速测试显示,在4.04版本中,无论是否使用模组,帧率都更高。在断桥处提升较小(+1帧),但在诺维格瑞,无论是否使用模组,帧率都快了约4帧!

技术信息

ImprovedRayTracedShadowsHigh.ini 包含:

[Rendering/RT/SpeedTree]
RTSTConfigInstancingDistance=40
RTSTConfigUpdateDistance=40
RTSTConfigUpdateWindSimBlendDistance=35
RTSTConfigSkinnedTimeout=63

[Rendering/RT]
ProximityTLASObjectAngleSize=0.05
ProximityExtendedTLASSize=600
DebugTlas=0

[Rendering]
TerrainShadowsDegreesLimit=1.000000
CascadeShadowsDegreesLimit=1.000000

可以通过你的dx12user.settings文件来设置,而非直接修改ini文件。遗憾的是,无法通过ini文件应用级联阴影的修改,也无法制作一个通过菜单实现所有功能的模组(我曾尝试过,但游戏拒绝将某些ini设置保存到dx12user.settings文件中)。

每个设置是做什么的?

[Rendering/RT/SpeedTree]

RTSTConfigInstancingDistance=40 (默认值: 20) 树木产生自身阴影的距离(以米为单位)。超出此距离后,在光线追踪的视角中,同类型的不同树木将共享同一个模型。较高的数值(例如80)可以修复某些偶尔出现的阴影跳跃问题(即使在4.03补丁后仍可能存在),即共享模型的几棵树木中某棵会切换到自身模型;但已观察到,当数值大于53时会导致卡顿(帧时间偶尔出现峰值)。因此,为安全起见,在mod v3.4中此值已降低至与RTSTConfigUpdateDistance一致。

RTSTConfigUpdateDistance=40 (默认:20) 在光线追踪视角下,树木受风影响更新并移动的距离(以米为单位)。设置为默认值20时,你会注意到中等距离树木的阴影是静止的。设为35时效果明显改善,但在黎明和黄昏阴影较长时仍能观察到部分静态阴影,不过4.03补丁后至少不会出现跳跃现象。提高该值会带来显著的性能消耗,且消耗会快速增加——与距离的平方成正比。这是因为每帧更新每棵树木的光线追踪加速结构需要较高的计算成本。

RTSTConfigUpdateWindSimBlendDistance=35(默认值:15) 这是《巫师3》4.03补丁新增的功能,用于修复树木阴影跳动的问题。该参数表示树木完全随风摆动的距离范围。在RTSTConfigUpdateWindSimBlendDistance与RTSTConfigUpdateDistance之间,风的效果会逐渐减弱至零。这个5米的过渡区域修复了4.03补丁之前令人困扰的阴影跳动问题。

RTSTConfigSkinnedTimeout=63 (默认:16) 在v3.4版本中新增。增加此值可减少RTSTConfigInstancingDistance > 53时出现的卡顿,但无法完全消除。较小的值会损害性能。在v3.4版本中,当RTSTConfigInstancingDistance=40时,可能无需更改此设置,但为了以防万一,我保留了较高的值。

[渲染/实时]

ProximityTLASObjectAngleSize=0.05(默认值:0.1,数值越小质量越高) 该角度是摄像机周围一个圆形的切片。只有屏幕上估计大于此尺寸的物体才会被添加到光线追踪的加速结构中,从而投射阴影、出现在反射中,并影响全局光照。

值越高,阴影在离摄像机更近的地方会显得更明显。默认值下,某些物体的阴影会出现相当明显的跳跃现象;诺维格瑞的Passiflora外的灯笼和花盆就是一个很好的例子。

降低该值会带来显著的性能开销,因为受影响的对象多为人物,需要每帧进行动画处理,且更新加速结构的成本很高。对象与人物的数量将与(1/ProximityTLASObjectAngleSize)的平方成比例增长,因此将ProximityTLASObjectAngleSize减半会使距离翻倍,导致对象数量变为原来的4倍。

ProximityTLASSize - 未更改(默认值 400)

ProximityExtendedTLASSize=600(默认800) 这是小型和大型物体被添加到光线追踪中的最大距离(以米为单位)。在早期版本中,我降低了ProximityTLASSize的设置。自补丁4.03以来,ProximityTLASSize似乎不再生效。我认为该补丁中的性能改进将所有内容合并到一个由ProximityExtendedTLASSize控制的TLAS中。你几乎不会注意到性能方面的微小改进。即使在非常远的视角下,远处的阴影最终也会消失,而设置在600米时整体效果仍然不错。

DebugTlas=0 (默认值: 1) TLAS代表顶级加速结构,这是光线追踪对世界的视角。最终用户不需要任何额外的开发者调试代码运行。设为0不会对视觉产生影响,但我相信能提升性能(很难测量,但提升幅度小于1帧/秒)

[渲染]

TerrainShadowsDegreesLimit=1.000000 (默认值:15)

CascadeShadowsDegreesLimit=1.000000 (默认值: 15) 这主要修复了开启光线追踪阴影时的头发显示问题。若不修复,在接近黎明或黄昏时会出现杰洛特头发底层处于阴影中、而顶层被阳光照亮的情况,视觉效果非常糟糕。为何会发生这种问题?透明细发的顶层属于后续渲染阶段,使用的是级联阴影而非光线追踪阴影。默认渲染级联阴影贴图时,《巫师3》假设太阳始终与地平线保持至少15度夹角,但光线追踪阴影会采用太阳的真实位置。为何要改变级联阴影的角度参数?很可能是因为阴影过长过时,级联阴影会显得画质粗糙且像素化。

将最小角度改为1度可使光线追踪阴影与级联阴影更好地对齐,从而大幅减少毛发问题出现的概率。当然两者并非完全一致——我们之所以使用RT阴影,是因为其比级联阴影更精确、视觉效果更佳!不过经过此项调整后,任何不一致之处都会变得细微、短暂,且在进出阴影区域时难以察觉。

如前所述,较低质量的级联阴影是可以接受的——所有你会注意到问题的大平面都使用光线追踪阴影。


我的描述基于实验和阅读关于渲染的公开论文与文档。我没有《巫师3》闭源引擎的特殊权限或知识,所以我的解释可能不够完美。

我所有的MOD

  • FSR DLSS 通过启用抖动来提升透明画质 - [链接缺失]
  • Faster Ray Tracing 超高性能 RT - [链接缺失]
  • 改进光线追踪阴影 - [链接缺失]