车辆 – 雨水遮挡调整
汉化标题:车辆 – 雨水遮挡调整
原文标题:Cars – Rain occlusion tweaks
汉化更新时间:2025-01-14 00:00:00 +08:00
英文原文最新更新时间:2025-11-08 12:39:08 -03:00
为了判断车辆的哪些网格应该是湿润的、哪些应该是干燥的,CSP 在加载时会进行非常基本的逐顶点 AO(环境光遮蔽)烘焙。如果顶点被照亮,我们可以认为它从外部可见程度足够,因此可以变湿润。这需要一些时间,但每辆车只发生一次(大多数情况下),然后结果会缓存在 "cache/cars_data/…/rain_occlusion" 中。
对于实际烘焙,CSP 在车辆周围均匀排列 256 个光源(来自所有方向,不仅仅是顶部,因此翻车车辆的底部也可能变湿润),为这些光源生成阴影贴图,然后遍历所有顶点并将它们与这些阴影贴图进行比较。
需要注意的几点:
- 使用着色器
ksBrokenGlass、ksWindscreen,或名称以DAMAGE_GLASS开头的网格被排除; - 如果网格的任何父级没有 "active" 标志,它将不会投射阴影(这就是
COCKPIT_LR不起作用的方式); - 该过程也适用于 LOD(细节层次);
- CSP 估计车辆的大小以计算阴影贴图应该有多大(毕竟它需要包围整个车辆)。如果你有一个非常小的几何片离车辆很远,CSP 会看到它,将阴影贴图拉伸,结果你将无法获得任何可行的质量;
- 如果网格的顶点没有超过 5% 的湿润度,当完全下雨时,该网格不会被标记为需要昂贵的雨滴着色器;
- 你可以在 CSP Debug 应用程序中查看烘焙后的雨水遮挡。请注意,CSP 还有一个单独的动态车辆湿润度贴图,它会叠加应用在上面,因此你需要花一些时间让车辆完全暴露在雨中才能看到确切的湿润度;
- 默认情况下,任何带有特定皮肤
MODEL_REPLACEMENT_…部分的皮肤都会获得自己的阴影贴图,因此如果皮肤交换了车辆外部几何的一部分,它会正确地变湿润。然而,如果皮肤只交换例如仪表板上的东西,它也会导致它获得自己的湿润度计算,从而减慢速度,因此你可能想要明确说明是否需要单独的雨水遮挡计算。
没有雨滴着色器标志的网格以蓝色显示。红色是完全湿润,绿色是干燥。
配置
实际计算可以使用这些设置进行调整:
ini
[RAIN_FX]
CUSTOM_SKIN_OCCLUSION = 0 ; 设置为 1 以便为每个皮肤提供单独的雨水遮挡。你可能想要使用这一点的唯一情况是,如果你有一个带有 `MODEL_REPLACEMENT_…` 的皮肤改变了内部某些不影响雨水分发的内容,将其设置为 0。
; 为了在特定位置遮挡水,你可以添加这些部分来描述投射阴影的额外球体:
[RAIN_FX_OCCLUSION_CASTING_SPHERE_…]
POSITION = X, Y, Z ; 相对于车辆模型坐标
RADIUS = Rx, Ry, Rz ; 每个轴,以米为单位
; 请注意,对于所有这些 Rx/Ry/Rz,你也可以设置单个值,它将用于所有三个轴
; 为了调整特定材质或网格,使用这些:
[RAIN_FX_OCCLUSION_ADJUSTMENT_…]
MESHES = ?
MATERIALS = ? ; 这和 MESHES 是常规过滤器。如果没有设置,则适用于所有。
SAMPLE_OFFSET = 0 ; 沿法线移动阴影贴图采样点的偏移量,以米为单位。如果覆盖网格在底层网格上投射阴影,你可以为底层网格增加此值,它会在更远的地方采样阴影贴图。如果未设置,将使用有用的默认值。
WETNESS_MULT = 1
WETNESS_ADD = 0
WETNESS_MIN = 0
WETNESS_MAX = 1
WETNESS_EXP = 1 ; 基本的后处理。如果你想要某个网格完全湿润,将 WETNESS_MIN 设置为 1。如果你想要阻止网格获得任何雨水(例如,如果薄屋顶在边缘泄漏),将 WETNESS_MAX 设置为 0。
; 默认采样偏移,稍微降低内部湿润度并增加外部车窗湿润度(有助于贴纸):
[RAIN_FX_OCCLUSION_ADJUSTMENT]
INTERIOR_SAMPLE_OFFSET = -0.01
EXTERIOR_WINDOWS_SAMPLE_OFFSET = 0.01
EXTERIOR_MIRRORS_SAMPLE_OFFSET = 0.01加热
还有一个单独的事情,当车辆加热时,湿润度在加热区域周围会降低。默认情况下,它只影响排气管和车轮。以下是你可以调整的参数:
ini
; 排气点的默认参数:
[RAIN_FX_OCCLUSION_HEATING_EXHAUST]
RADIUS = 0.3, 0.4, 0.5 ; 排气点周围加热球体的 Rx, Ry, Rz(使用火焰或如果存在的话,`PARTICLES_FX_EXHAUST_…` 条目)
GRADIENT_OFFSET = 0.2 ; 强度开始衰减的点,相对于半径
INTENSITY = 0.4 ; 将此值和 INTENSITY_FACING 设置为 0 以禁用
INTENSITY_FACING = 5 ; 对于 GRADIENT_OFFSET 为 0.8 的 0.1 半径具有更高的强度,几乎停止实际排气点上的任何雨水
; 额外加热点:
[RAIN_FX_OCCLUSION_HEATING_…]
MESHES = ? ; 受影响网格的过滤器
POSITION = X, Y, Z
RADIUS = Rx, Ry, Rz
GRADIENT_OFFSET = 0
INTENSITY = 0.5可选屋顶情况
考虑到所有这些,在设置菜单中可以切换屋顶的情况很棘手,但是可行的。[WING_BASED_SWITCH_…] 的单个条目可以有一个 ALTER_SHAPE = RAIN_OCCLUSION 参数,它将生成一个替代的雨水遮挡集合。或者,将你的动画命名为 "roof.ksanim",如果你没有使用 [WING_BASED_SWITCH_…] 并且动画设置正确,CSP(较新版本,0.2.11 等)应该会自动检测它并生成替代的湿润度计算。