通用光线追踪玩家阴影

通用光线追踪玩家阴影

这个基于脚本的模组以一种新的方式为所有网格体开启光线追踪阴影,无需修改或补丁任何游戏文件,确保不会与其他模组冲突,并能为基础游戏和模组网格体均开启阴影。虽然它主要针对拍照模式下的玩家阴影,但也可能影响NPC和环境物体。

描述

这个基于脚本的模组以一种全新的方式为所有网格开启光线追踪阴影,无需修改或修补任何游戏文件。

此前已有许多创作者制作了各种模组,试图为不同类别的游戏实体开启光线追踪阴影,但由于这需要修改/修补网格和实体文件,因此永远无法做到彻底完善——实体数量实在太多,而且模组本身也需要兼容处理。有些模组作者为自己的模组开启了必要标志,另一些作者则不知道需要这样做,导致他们制作的物品缺少阴影。这可能导致现有阴影模组与服装或装备模组组合使用时,在拍照模式中出现阴影缺失的情况。

为了彻底解决这一问题,本模组采用基于脚本的方法,利用 Codeware 的资源与实体加载挂钩能力,在游戏加载网格和实体时动态设置所需的阴影属性。这意味着我们可以覆盖每一个对象,无论是基础游戏还是模组中的对象。

此外,本模组还加入了在拍照模式中禁用通常无法隐藏的非光线追踪玩家阴影的功能。这种假阴影与光线追踪阴影重叠,会产生怪异效果——尤其是手部出现的幻影阴影。我相信这是首个为男性 V(Masc V)实现此功能的模组。

致谢

  • Aeryn:提供了关于光线追踪阴影现状及修复技术的宝贵分析文章
  • PinkyDudeZwei:在各自的阴影修复模组中演示了这些技术
  • Psiberx:解释了实现本模组所需的 Codeware 功能
  • OneSlowZZGilde136Sneaky-Badger3raemaze:提供了大量测试协助!
  • Amon、OneSlowZZ、Gilde136 和 Sneaky-Badger3:提供了演示图片

感谢大家!仅凭我一人之力是无法完成这项工作的。

兼容性

  • 我只在 2.13 版本上测试过。很可能它也适用于较旧的版本,但最终会受限于 Codeware >= 1.9.0 及其依赖项的要求。
  • 本模组仅在光线追踪(RT)或路径追踪(PT)模式下有效。光栅化阴影应保持原样。

实现细节

本模组实现了三种主要机制:

开启网格的光线追踪阴影

这是通常需要为网格设置的属性。它告诉游戏为这些网格进行光线追踪阴影渲染。这对模组实体尤为重要,因为模组作者(包括我在内)通常不会过多考虑阴影网格的问题,因此物品可能缺少阴影网格,或者使用了从基础游戏实体中继承的完全不合适的网格。

为所有网格设置此属性意味着游戏中的所有可见物品都能受益,尽管重点是玩家角色。NPC、载具和环境物体也可能获得缺失的阴影,但我尚未验证具体在哪些情况下生效。

将组件阴影标志设置为默认值

Zwei 的模组解释了为什么这似乎是游戏最新版本中的首选设置。我没有观察到将两者都设置为“默认”或都设置为“始终”之间的差异,即使在非光线追踪模式下也是如此,但如果将来有理由更改,也很容易调整。

禁用玩家拍照模式阴影网格

正如 Zwei 模组中所述,这是一个特殊的实体——它是一个在拍照模式下强制启用的阴影网格,无论光线追踪模式如何。它的存在会导致双重阴影,产生糟糕的视觉效果,尤其是在手部。我使用了不同的技术来消除它(Zwei 用另一个非玩家的阴影网格替换了它,而我关闭了网格内部的“isPlayerShadowMesh”标志)。

问答

为什么第一人称的玩家阴影仍然如此糟糕?

游戏坚持在第一人称模式(FPP)中禁用玩家身体的光线追踪阴影。因此,身体本身始终使用假阴影网格。我认为游戏这样做是因为第一人称玩家身体的形状和比例是一个扭曲的、诡异的形态(这在第一人称游戏中很常见),所以他们必须使用一个看起来更可信、更像人类的假阴影。

如果你想改变这一点,请使用 sosuine 的 General Shadow Fixes 模组。

我的车/摩托车/垃圾桶的阴影还是很差?

如前所述,我并没有真正尝试改进非玩家的阴影。网格标志可能对其他类型的实体有益,但同样也存在影响阴影行为的实体级属性,这些属性可能需要设置为特定值才能获得正确的阴影。同样,有些模组会禁用环境实体的光线追踪阴影,因为其效果看起来很糟糕,所以也许我不做更多改动反而是最好的。

光线追踪(RT)和路径追踪(PT)之间应该有区别吗?

没有。虽然渲染技术不同,但它们都以相同的方式遵循阴影设置,所以你会得到相同的结果,只是 PT 的精度天然更高。

非 RT/PT 阴影呢?

理论上,如果禁用 RT/PT,你应该看到与原版相同的阴影行为。但如果你发现任何变得更糟的地方,请告诉我,我会进行调查。

如果我发现某些东西安装了本模组后看起来比不安装更糟糕怎么办?

这种情况是有可能发生的——我正在盲目地处理所有网格和身体/服装/装备实体,因此可能存在一些阴影有问题的边缘情况。这最可能发生在多个支持“服装支撑”(Garment Supported)的物品叠穿时,因为游戏似乎根据物品的原始形状来计算阴影,而不是压缩后的形态。这种处理情况很困难,因为你希望物品在正常条件下有阴影,而且很难(甚至几乎不可能)判断它是否被压缩。综合考虑,我认为在所有地方都有阴影比在模组物品上缺失阴影要好。另一方面,如果你发现某个网格的阴影从根本上就是坏的,请告诉我,我可以研究将其过滤掉。

我可以卸载其他所有的阴影模组吗?

保留你现有的阴影模组不会有任何坏处,但从概念上讲,一旦安装了本模组,任何其他设置 Mesh 或 SkinnedMeshComponent 属性的模组都不再需要了。一些其他阴影模组会修改材质或其他类型的实体,这些模组仍然会继续带来好处。