Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
带符号距离场全局光照(SDFGI)
带符号距离场全局光照(SDFGI)是 Godot 中的一种新技术。它提供准实时全局光照,可适用于任何世界大小,并支持程序化生成的关卡。
SDFGI 支持动态光源,但不支持动态遮挡物或动态发光表面。因此,SDFGI 比烘焙光照贴图提供更好的实时能力,但不如VoxelGI。
从性能角度来看,SDFGI 是 Godot 中最耗资源的全局光照技术之一。与 VoxelGI 类似,仍有许多设置可用于调整其性能需求,但会牺牲质量。
重要
SDFGI 仅在使用 Forward+ 渲染器时受支持,不支持 Mobile 或 Compatibility 渲染器。
参见
不确定 SDFGI 是否适合你的需求?请查看我应该使用哪种全局光照技术?以了解 Godot 4 中可用 GI 技术的比较。
视觉对比
禁用 SDFGI。
启用 SDFGI。
设置 SDFGI
在 Godot 中,SDFGI 是启用所需步骤最少的全局光照技术:
请在检查器中确保你的 MeshInstance 节点将其 Global Illumination > Mode 属性设置为 Static。
对于导入的 3D 场景,可在文件系统面板中选择 3D 场景文件后,在导入面板中配置烘焙模式。
添加一个 WorldEnvironment 节点,并为其创建一个 Environment 资源。
编辑 Environment 资源,向下滚动到 SDFGI 部分并展开它。
启用 SDFGI > Enabled。当相机移动时,SDFGI 会自动跟随,因此无需配置范围(与 VoxelGI 不同)。
环境 SDFGI 属性
在 Environment 资源中,有几个属性可用于调整 SDFGI 的外观和质量:
使用遮挡(Use Occlusion):如果启用,SDFGI 将投射额外的射线来查找并减少漏光。这会带来性能开销,因此仅在你实际需要时才启用此属性。
读取天空光(Read Sky Light):如果启用,环境光照将体现在全局照明中。应在室外场景中启用此项,并在纯室内场景中禁用。
反弹反馈(Bounce Feedback):默认情况下,使用 SDFGI 时,间接光照只反弹一次。将此值设为大于
0.0会使 SDFGI 反弹多次,以较小的性能代价提供更逼真的间接光照。根据场景不同,合理值通常在0.3到1.0之间。注意,在某些场景中,大于0.5的值可能导致无限反馈循环,使场景在几秒钟内变得极其明亮。如果你的间接光照看起来有“斑块”,考虑将此值增加到大于0.0以获得更均匀的光照效果。如果结果导致光照看起来太亮,降低 Energy 进行补偿。级联(Cascades):较高值会产生更详细的 GI 信息(和/或更大的最大距离),但在 CPU 和 GPU 上的成本明显更高。相机快速移动时,拥有更多级联的性能成本尤其会增加,因此如果你的相机移动速度很快,请考虑将此值降至
4或更低。最小单元格尺寸(Min Cell Size):用于最近、最详细级联的最小 SDFGI 单元格尺寸。较低值会产生更准确的间接光照和反射,但会降低性能。调整此设置还会自动影响级联 0 距离(Cascade 0 Distance)和最大距离(Max Distance)。
级联 0 距离(Cascade 0 Distance):最近、最详细级联结束的距离。较大值可使最近的级联过渡不那么明显,但会降低最近级联的细节层次(level of detail)。调整此设置还会自动影响最小单元格尺寸(Min Cell Size)和最大距离(Max Distance)。
最大距离(Max Distance):控制计算带符号距离场的距离(针对最不详细级联)。SDFGI 在此距离之外不会产生任何效果。该值应始终设置为低于相机的远裁剪面(Far)值,因为超出观看距离计算 SDFGI 没有任何好处。调整此设置还会自动影响最小单元格尺寸(Min Cell Size)和级联 0 距离(Cascade 0 Distance)。
Y 比例(Y Scale):控制 SDFGI 探针垂直分布的距离。默认情况下,垂直分布与水平分布相同。然而,由于大多数游戏场景并非高度垂直,因此将 Y 比例设置为
75%甚至50%可以提供更好的质量并减少漏光,而不会影响性能。能量(Energy): SDFGI 间接光照的亮度乘数。
法线偏置(Normal Bias):用于 SDFGI 探测射线反弹的法线偏置。与探针偏置(Probe Bias)不同,这只会增加相对于网格法线的值。这使得偏置调整更加细致,避免无缘无故地增加过多偏置。如果你发现间接光照或反射中出现条纹伪影(striping artifacts),请增加此值。
探针偏置(Probe Bias):用于 SDFGI 探测射线反弹的偏置。如果你发现间接光照或反射中出现条纹伪影,请增加此值。
SDFGI 与灯光和对象的交互
灯光发射的间接能量由其颜色、能量以及间接能量属性决定。若要使特定灯光发射更多或更少的间接能量而不影响其直接光量,请在 Light3D 检查器中调整 Indirect Energy 属性。
为确保使用 SDFGI 时获得正确的视觉效果,你必须根据它们在场景中的用途(静态或动态)配置网格和灯光的全局光照属性。
网格有 3 种全局光照模式可供选择:
Disabled:SDFGI 生成中不会考虑该网格。该网格将接收来自场景的间接光照,但不会向场景贡献间接光照。
Static(默认):SDFGI 生成中将考虑该网格。该网格将接收并为场景贡献间接光照。如果在生成 SDFGI 后网格以任何方式发生变化,则相机必须远离该对象,然后再移回靠近它,以便 SDFGI 重新生成。或者,可以关闭后再重新打开 SDFGI。如果两者都不做,间接光照看起来就会不正确。
Dynamic(SDFGI 不支持):SDFGI 生成中不会考虑该网格。该网格将接收来自场景的间接光照,但不会向场景贡献间接光照。这与使用 SDFGI 时的 **Disabled* 烘焙模式行为相同。*
此外,灯光(DirectionalLight3D、OmniLight3D 和 SpotLight3D)还有 3 种烘焙模式可供选择:
Disabled:SDFGI 烘焙不会考虑该灯光。该灯光不会为场景贡献间接光照。
Static:SDFGI 烘焙时将考虑该灯光。该灯光将为场景贡献间接光照。如果烘焙后灯光以任何方式发生变化,则直到相机远离灯光再返回之前(这将导致 SDFGI 重新烘焙),间接光照看起来都不正确。如果有疑问,请使用此模式进行场景照明(level lighting)。
Dynamic(默认):SDFGI 烘焙不会考虑该灯光,但它仍会实时为场景贡献间接光照。与 Static 相比,此选项速度较慢。仅对在游戏过程中会发生显著变化的灯光使用 Dynamic 全局光照模式。
备注
灯光发射的间接能量取决于其颜色、能量以及间接能量属性。若要使特定灯光发射更多或更少的间接能量而不影响其直接光量,请在 Light3D 检查器中调整 Indirect Energy 属性。
参见
常规使用建议见我应该在网格和灯光上使用哪种全局光照模式?。
调整 SDFGI 性能和质量
由于 SDFGI 的要求相对较高,因此它在配备最新独立 GPU 的系统上表现最佳。在较旧的独立 GPU 和集成显卡上,需要调整设置才能获得合理的性能。
在项目设置的渲染 > 全局光照部分,还可以通过几种方式调整 SDFGI 的质量:
SDFGI > 探测射线数:值越高,质量越好,但代价是 GPU 占用率较高。如果该值设置得太低,则由于投射的射线数量非常少,可能会导致表面上出现可见的间接光照“斑块”。
SDFGI > 收敛帧数:值越高,质量越好,但 GI 需要更多时间才能完全收敛。首次加载场景时,或当具有除 Disabled 之外的烘焙模式的灯光快速移动时,此设置的效果尤为明显。如果该值设置得太低,则由于投射的射线数量非常少,可能会导致表面上出现可见的间接光照“斑块”。如果你的场景光照没有有助于 GI 的快速移动灯光,请考虑将其设为
30以提高质量而不影响性能。SDFGI > 更新灯光帧数:较低值会使移动灯光反射得更快,但代价是 GPU 占用率较高。如果你的场景光照没有有助于 GI 的快速移动灯光,请考虑将其设为
16以提高性能。全局光 > 半分辨率:如果启用,SDFGI 和 VoxelGI 都将以减半的分辨率渲染 GI 缓冲区。例如,当以 3840×2160 渲染时,GI 缓冲区将以 1920×1080 分辨率计算。启用此选项可节省大量 GPU 时间,但可能会在细微细节周围引入可见的锯齿。
SDFGI 渲染性能还取决于级联数量和环境资源中选择的单元大小(见上文)。
SDFGI 注意事项
SDFGI 由于其级联性质而有一些缺点。当相机移动时,间接光照中可能会出现级联偏移。这可以通过调整级联大小来缓解,也可以通过添加雾来缓解(这将使远处的级联偏移不那么明显)。
此外,如果相机移动过快,性能也会受到影响。这可以通过两种方式解决:
确保相机在任何情况下都不会移动过快。
如果需要高速移动相机,请在环境资源中暂时禁用 SDFGI,然后在相机速度减慢时重新启用 SDFGI。
启用 SDFGI 时,全局光照也需要一些时间才能完全收敛(默认为 25 帧)。这在 GI 仍在收敛时会产生明显的过渡效果。若要隐藏这一点,可以使用覆盖整个视口的 ColorRect 节点,并使用 AnimationPlayer 节点在切换场景时将其淡出。
仅在相机移入或移出级联时才会更新带符号距离场。这意味着,如果在远处修改了几何图形,则一旦相机靠近,全局光照的外观将是正确的。但是,如果移动了烘焙模式设置为 Static 或 Dynamic 的附近对象(例如门),则全局光照将显示不正确,直到相机远离该对象。
SDFGI 的锐利反射仅在不透明材质上可见。即使材质的粗糙度低于 0.2,透明材质也只会使用模糊的反射。