
路径追踪紫色辉光修复 (W3PtSlotFix)
修复开启路径追踪时某些服装上出现的紫色/蓝色光晕:游戏在光线追踪副本中给角色服装分配了错误的纹理。最明显的是《石之心》婚礼套装和欧吉尔德的外套。一个适用于 Steam 5.01 版本的小型 ASI;它使用游戏自身的代码来修复纹理槽位。
查看大图[size=5][b]路径追踪紫色辉光修复[/b][/size]
开启[b]路径追踪[/b]后,《巫师3》中一些服装会出现不该有的紫色或蓝色条纹和毛边。[b]《石之心》婚礼套装[/b]是最严重的情况:它的锦缎腰带、搭扣和领口饰边。[b]欧吉尔德的外套[/b]在领口、徽章和腰带边缘出现该问题,其他有图案的服装(例如安娜·亨利叶塔的一条裙子)也会出现小的紫色斑点。
[center][img]https://staticdelivery.nexusmods.com/mods/952/images/14641/14641-1792444684-576831321.gif[/img]
[i]开启路径追踪下的《石之心》婚礼套装,在 W3PtSlotFix 关闭和开启之间切换。[/i][/center]
这是游戏光线追踪代码(5.01)中的 bug,不是任何模组的问题。本模组在问题发生的位置进行修复,因此覆盖所有角色和服装,而不仅是截图中的那些。
[b]推荐搭配使用:[/b]Scoutbr0 的 [url=https://www.nexusmods.com/witcher3/mods/12993]RT Bear Dress Fix[/url],用于修复宗师熊学派护甲的蓝色辉光。
[size=4][b]游戏中出了什么问题[/b][/size]
在路径追踪下,游戏会为每个网格保留自己的光线追踪副本。对于网格的每一部分,该副本都有一张小的纹理槽表,分两个阶段填充:
[list]
[][b]阶段 0[/b]:材质自身的纹理(漫反射颜色、图案、法线贴图等),用于光线首次击中表面的位置。[/]
[][b]阶段 1[/b]:一套通用纹理(漫反射和法线贴图),用于反弹光线。[/]
[/list]该表还记录每个阶段槽位的起始位置。
对于有动画的角色,游戏会为每个角色制作这张表的单独副本。该复制步骤会复制槽位和阶段布局,但不复制起始位置:它们保持为零。之后的更新看到相同的布局,认为没有变化,就再也不重新计算它们。从此阶段 1 会把它的漫反射和法线贴图写入[i]阶段 0[/i]的前两个槽位。
在大多数材质上,这两个槽位已经存放了漫反射颜色和法线贴图,所以你看不出差别。有图案的布料则不同:槽位 1 存放的是[i]图案[/i]纹理(婚礼套装、欧吉尔德、爱丽丝和安娜·亨利叶塔的裙子所使用的材质类型)。该 bug 用(主要是蓝色的)法线贴图替换了该图案,于是布料在应有图案的位置变成紫色。
[center][img]https://staticdelivery.nexusmods.com/mods/952/images/14641/14641-1792444689-1951009069.gif[/img]
[i]欧吉尔德的外套:关闭修复后,领口、徽章和腰带边缘出现紫色毛边。[/i][/center]
问题有多普遍:在一个繁忙场景(诺维格瑞的教主广场)中,一次内存扫描发现[b]776 个角色网格上有 1,220 个损坏部分[/b]。其中大多数没有可见变化,但每一个都是错的。
[size=4][b]本模组做了什么[/b][/size]
[list]
[]它监视每一次路径追踪纹理绑定都会经过的那个函数:游戏光线追踪函数表中的一个条目,被替换为它自己的函数,而该函数始终会调用原始函数。[/]
[]当游戏绑定阶段 1 纹理时,模组通过几次内存读取检查该部分的阶段 1 起始位置是否在应在的位置:紧接在阶段 0 的纹理之后。[/]
[]如果不是,模组会调用[b]游戏自身的例程[/b]来计算这些起始位置——即游戏在布局变化时运行的那个例程,且布局保持不变。该例程只重新计算这十个起始值和总值。然后游戏原来的绑定照常运行,并落到正确的槽位。[/]
[]每个损坏部分只在其首次使用时修复一次,在绘制出错之前完成。健康部分只承担检查的开销。在测试场景中,它在加载存档后的前 30 秒内修复了约 1,100 个部分。[/]
[]其他内容均不改变:不修改纹理、着色器、网格、脚本或游戏文件,也不向你的存档中写入任何内容。[/]
[/list]
[size=4][b]安全检查[/b][/size]
在挂钩任何东西之前,模组会检查:
[list]
[]它运行在 witcher3.exe 内,且该 exe 是 5.01 版本;[/]
[]函数表条目仍指向游戏的原始函数,因此没有其他模组挂钩它;[/]
[]它所依赖的每一段游戏代码的确切字节。[/]
[/list]如果任何检查失败,它不会挂钩任何东西、不会更改任何东西,并将原因写入 [i]W3PtSlotFix.log[/i]("REFUSED: ...")。游戏更新后,它会自行关闭,而不是猜测。
[size=4][b]需求[/b][/size]
[list]
[]《巫师3》[b]5.01[/b](已在 Steam 版本上测试)。[/]
[]一个 ASI 加载器,例如 [url=https://github.com/ThirteenAG/Ultimate-ASI-Loader]Ultimate ASI Loader[/url],以 [i]dinput8.dll[/i] 的形式放在 [i]bin\x64_dx12[/i] 中。[/]
[]开启路径追踪。没有路径追踪时该 bug 从不显现,模组也没有可见的东西可修复。[/]
[/list]
[size=4][b]安装[/b][/size]
将压缩包解压到你的 [i]The Witcher 3[/i] 文件夹,使 [i]W3PtSlotFix.asi[/i] 和 [i]W3PtSlotFix.ini[/i] 最终位于 [i]bin\x64_dx12\[/i] 中、与 ASI 加载器放在一起。
[list]
[][b]检查是否生效:[/b]加载存档后,[i]bin\x64_dx12\W3PtSlotFix.log[/i] 应显示 "gates passed" 和 "hooked",并列出最初的修复记录以及每 30 秒一次的运行计数。[/]
[][b]不卸载的情况下关闭:[/b]在 [i]W3PtSlotFix.ini[/i] 中设置 [i]Enabled=0[/i]。[/]
[][b]卸载:[/b]删除这两个文件。无论哪种方式都不影响存档。[/]
[/list]
[size=4][b]兼容性[/b][/size]
[list]
[]可与纹理、网格、脚本、ReShade 和 RenoDX 模组一同使用:它不触碰它们的任何文件。[/]
[]不能与另一个挂钩同一光线追踪纹理函数的模组组合使用。如果其中一个先加载,本模组会拒绝加载并在其日志中说明。[/]
[]它只修复这一处纹理混淆问题,不修复其他路径追踪问题。[/]
[]与 Scoutbr0 的 [url=https://www.nexusmods.com/witcher3/mods/12993]RT Bear Dress Fix[/url] 搭配良好,后者修复宗师熊学派护甲裙部的蓝色色调。那是本模组不涉及的另一个独立路径追踪问题,两者可并行工作。[/]
[/list]
[size=4][b]如何发现与测试[/b][/size]
该原因是通过逆向工程游戏的光线追踪材质代码,并读取运行中游戏的实时槽位表发现的。
该修复在同一游戏会话中用可在开/关之间切换的测试版本进行了验证:
[list]
[]开启修复后,婚礼套装的图案槽位重新存放图案纹理;[/]
[]路径追踪器正在绘制的所有内容中,损坏部分的数量降至零;[/]
[]在配对截图中,套装躯干上的紫色像素从约 2.9% 降至 1.3%。[/]
[/list]本页截图来自那些关/开配对:相同姿势、相同帧,仅切换修复开关。
[spoiler]
[b]致模组作者(5.01,TimeDateStamp 0x6AC555A3;地址为 RVA):[/b]
[list]
[]纹理推送:位于 0x382A998 的 DxRayTracing vftable 槽位 +0x48,其中存放 0x1EED600。模组替换该槽位。[/]
[]每个角色的几何副本 0x1F0FC30 会复制每个 chunk 的阶段布局指针,但不复制 chunk+0x904..+0x92B 处的各阶段基址,它们保持为 0。随后 0x1F216F0 因布局指针未变而跳过重新计算。[/]
[]过期检测:u32[chunk+0x90C] != u32[chunk+0x904] + u32[[chunk+0x8C0]+0xF8]。[/]
[]修复:0x1F20DB0(chunk+0x8C0, 0, chunk+0x8C0)。使用相同指针时,它只重新计算基址和总值。[/]
[/list][/spoiler]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。