赛道-–-反射光
汉化标题:赛道-–-反射光
原文标题:Tracks-–-Bounced-light
汉化更新时间:2026-01-14 16:10:21 +0800
英文原文最新更新时间:2022-06-13 01:18:53 +0300
整篇可能有点复杂,抱歉如果这篇说明不太清楚。如果你有任何问题或改进建议,请告诉我。
基础
反射光(Bounced light)是 Extra FX 的一部分,会从水平被照亮的表面向附近的墙壁或天花板增加一些额外的光照。下面展示了其效果:
有趣的是,这个效果只花费大约 0.3 毫秒,它不是屏幕空间效果(因此即使被照亮的道路不在画面中也能工作),而且它没有时间上的滞后,因此会立即响应任何光照变化。然而,由于有一些缺点,它需要赛道配置来正常工作。
工作原理
它非常简单:只需从上方拍摄相机周围的赛道,模糊该图像并用其来添加反射光。应用阶段有一点复杂性:它还会比较点与下面表面的距离。更大的差值意味着更多的模糊和更低的强度:
所以这里有第一个缺点:对于隧道和下穿结构,要使其正常工作,光照贴图(light map)应只包含那些你期望会反射光的表面。在 Black Cat County 的示例中(前两张图),岩石不应出现在光照贴图中,否则效果会非常不对劲。注意光照贴图不包含岩石,但包含了岩石投下的阴影:
第二个缺点本质上类似:该方法主要适用于单层轨道。我认为这也是其他游戏几乎没有使用该技巧的原因;一旦出现诸如两层建筑之类的多层场景,整个方法就会失效。幸运的是,在 AC 中 98% 的赛道是平面的,因此效果很好。还有一些额外选项可以帮助处理某些复杂情况,但至少目前还远非完美。
语法
对于任何 …_MATERIALS,也存在 …MESHES(例如 SURFACE_MESHES);两者可以同时使用。
[BOUNCED_LIGHT]
SUPPORTED = 1 ; 这个简单,表示赛道支持反射光
SURFACE_MATERIALS = ? ; 反射光的材质列表,默认值为 1
OBJECT_MATERIALS = ; 对象列表:这些会从光照贴图中完全排除,加入诸如广告牌、标牌、墙、护栏等任何不会向上反射光的平面之外的物体
SPOT_MATERIALS = ; 在不改变表面高度的情况下也会对反射光有贡献的对象列表。例如在 Black Cat County 中,岩石在此列出,因此它们会反射光但不会影响地面高度
OCCLUDING_MATERIALS = ; 会被绘制为黑色从而在地面上投下阴影的对象列表
CLIP_POINT_... = 192, 79, 494 ; 裁剪点列表(稍后会详细说明)
CLIP_POINT_... = -197, 3, -776 ; 请记住,使用 CSP 时可以对键使用“...”并自动设置索引
CLIP_POINT_... = ...什么是“裁剪点(clip points)”?它是一种将天花板与其他部分分离的简便方法。再次看 Black Cat County 的岩石示例。它是一个整体网格。虽然我可能希望其下部对反射光有贡献,但上部当然应该被排除。这种情况经常发生:例如你可能想去除隧道上方的山丘,而该山丘使用与附近某个地形相同的网格名和材质。这时就需要裁剪点。
想象在高度为 500 米处有一个平面。每个裁剪点都会以某种方式把该平面拉到它所在位置然后再返回:
你可以在 Extra FX Debug 应用的 Bounced Light 选项中打开该调试视图。
这套系统有点奇怪,但我发现它在简单通道和长隧道中工作良好,并且与着色器配合良好(记住着色器只会使用最近的 16 个点,但这似乎绰绰有余)。裁剪点不仅可以把平面向下拉,当然也可以将其向上推。此外,每个裁剪点可以有自己的权重来修改其“重力”,如有需要。
我建议添加裁剪点的方式是:把相机移动到应该放置裁剪点的位置,复制其坐标并作为新的 CLIP_POINT_... 行粘贴到赛道配置中。AccExtHelper 应用(位于 这里)有一个按钮可以复制相机位置:
要改变裁剪点的权重,只需在其后添加第四个值。默认权重为 1。还记得我之前提到的 500 米吗?这个值也可以更改:
[BOUNCED_LIGHT]
CLIP_BASE_WEIGHT = 1 ; 裁剪平面初始权重,增加此值会使裁剪点更难拉低平面
CLIP_BASE_Y = 500以上就是基本设置!希望这些说明有意义。噢,还有一点重要提示:请确保将任何不应对反射光有贡献的内容添加到 OBJECT_MATERIALS,这将大大节省生成光照贴图的时间。
未来要添加的功能
- 选项:仅当反射光被禁用时才保持轨道照明启用,作为隧道的修复方案。
额外项
焦散(Caustics)

要启用焦散,使用:
[BOUNCED_LIGHT]
CAUSTICS = 1
CAUSTICS_SCALE = 1 ; 可选,调整焦散强度额外裁剪平面(Extra clip planes)
作为处理多层赛道(如桥梁等)的一种奇怪解决方案,目前有一种可行的办法:定义一个带有新裁剪点且在空间上受限的新裁剪平面。如果相机位于该平面之下,将添加额外裁剪点。举例来说,假设我想让 Nordschleife 的这个隧道在天花板上有漂亮的反射光,同时又不破坏上方其他区域的反射光效果。
为此,我可以这样定义一个新的裁剪平面:
[BOUNCED_LIGHT_ADJUSTMENT_...]
CENTER = -441.05, -141.52, -1993.56 ; 新裁剪平面的中心
RADIUS = 200 ; 其半径,用于提高性能(当相机距离过远时丢弃)并减少不必要的触发
CLIP_BASE_Y = -200 ; 基础 Y 值
CLIP_POINT_... = -440.49, -145.23, -1996.67 ; 定义平面的点:一个在桥下
CLIP_POINT_... = -468.28, -136.91, -2005.69 ; 左侧的一个,上方,用于产生突起
CLIP_POINT_... = -416.11, -135.55, -1975.77 ; 右侧的一个,上方,用于产生突起
CLIP_POINT_... = -418.04, -149.52, -2037.85 ; 桥后面的一个,用于把平面推到路面下方
CLIP_POINT_... = -452.52, -142.24, -1974.21 ; 桥前的一个,用于把平面推到路面下方一旦相机移到该平面下方,其点将被应用到主裁剪平面,从而改变反射光:
这个技巧并不理想,但我相信在一般情况下它可能工作良好,例如当相机绑定在汽车上并可能在桥上或桥下移动时。此外,这个跳变以后可能会被平滑处理。
高度图(Height map)
为了让整体效果更好,它需要能够在任意点知道到表面的距离。现在,设想表面存在孔洞,或者比如你忘记把一些停放的车辆标记为对象网格,它们被错误地认为是会影响反射光的主要凸起。为了解决这个问题,Custom Shaders Patch 会扩展深度图:基本上,对于每个像素,它会检查一定半径内的所有邻居并选择较低但非零的值(以处理孔洞)。但在某些情况下,这可能会降低陡峭表面上反射光的质量。你可以这样更改该行为:
[BOUNCED_LIGHT]
DEPTH_EXPANSION_STEPS = 1 ; 默认值为 1增加步骤数可以在某些复杂情况下增加检查半径(不推荐)。或者,如果你知道你的光照贴图没有孔洞和陡峭跳跃(Extra FX Debug 应用中有选项可以检查检测到的表面距离),可以把它设为 0 以提升性能和质量。






