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.

环境和后期处理

Godot 4 提供了重新设计的 Environment 资源,以及一个全新的后期处理系统,具有许多开箱即用的效果。

备注

从 Godot 4 开始,环境的 性能/质量 设置是在项目设置中定义的,而不是在 Environment 资源中定义的。这使得全局调整更容易,因为你不再需要单独调整 Environment 资源来适应各种硬件配置。

请注意,大多数 Environment 的性能/质量设置仅在项目设置中启用高级开关后才可见。

环境

Environment 资源存储控制 2D 和 3D 渲染环境所需的所有信息,包括天空、环境光、色调映射、效果和调整。它本身不会执行任何操作,但你可以在以下位置之一(按优先级顺序)使用它以启用它:

Camera3D 节点(高优先级)

可以为 Camera3D 节点设置 Environment。它的优先级高于其他所有设置。

../../_images/environment_camera.webp

这在想要覆盖现有环境时非常有用,但通常建议使用下面的选项。

预览环境和太阳(低优先级)

备注

从 Godot 4 开始,环境和太阳的预览系统替代了 Godot 3 项目中使用的 default_env.tres 文件。

如果当前场景中不存在 WorldEnvironment 节点或 DirectionalLight3D 节点,编辑器会显示预览环境和太阳。可以使用 3D 编辑器顶部的按钮禁用:

../../_images/environment_preview_sun_sky_toggle.webp

点击右侧垂直排列的三个点会显示一个对话框,可用来自定义预览环境的外观:

../../_images/environment_preview_sun_sky_dialog.webp

预览太阳和天空只在编辑器中可见,运行项目时不可见。使用对话框底部的按钮,可以将预览太阳和天空作为节点添加到场景中。

小技巧

在预览环境编辑器中,点击将太阳添加到场景将环境添加到场景时按住 Shift,会将预览太阳和预览环境一同添加到当前场景中(如同单独点击这两个按钮)。可以用这个方法加速项目设置和原型制作。

相机属性

备注

在 Godot 4 中,曝光和景深信息从 Environment 资源分离到单独的 CameraAttributes 资源中。这样可以更轻松地将这些属性独立于其他 Environment 设置进行调整。

CameraAttributes 资源存储曝光和景深信息。它还允许根据场景亮度自动调整曝光。

有两种 CameraAttributes 资源可用:

  • CameraAttributesPractical:各项功能以任意单位暴露,这对于大多数游戏用例更容易理解。

  • CameraAttributesPhysical:各项功能以现实世界单位暴露,类似于数码相机。例如,视野是使用以毫米为单位的焦距,而不是以度为单位的值设置的。建议用于物理精度很重要时,例如照片级真实感渲染。

两种 CameraAttributes 资源类型都允许你使用相同的功能,但它们的配置方式不同。如果你不知道选择哪一个,请使用 CameraAttributesPractical

备注

在 Camera3D 节点上使用 CameraAttributesPhysical 将锁定该 Camera3D 中的 FOV 和长宽比调整,因为视野是在 CameraAttributesPhysical 资源中调整的。如果在 WorldEnvironment 中使用,CameraAttributesPhysical 不会覆盖场景中的任何 Camera3D。

CameraAttribute 资源可以添加到 Camera3D 或 WorldEnvironment 节点。当当前相机设置了 CameraAttributes 时,它将覆盖WorldEnvironment 中设置的 CameraAttributes(如果有的话)。

在大多数情况下,建议在 Camera3D 节点而不是 WorldEnvironment 上设置 CameraAttributes资源。与 WorldEnvironment 不同,将 CameraAttributes 资源分配给 Camera3D 节点会阻止景深显示在 3D 编辑器视口中,除非正在预览相机。

环境选项

以下是所有环境选项的详细说明及使用方法。

背景

Background(背景)部分包含有关如何填充背景的设置(屏幕中未绘制对象的部分)。背景不仅用于显示图像或颜色。默认情况下,它还会影响对象受环境光和反射光影响的方式。这称为基于图像的照明 (IBL)。

因此,背景天空可能会极大地影响场景的整体外观,即使天空在屏幕上永远不会直接可见。调整场景光照时应考虑到这一点。

../../_images/environment_background1.webp

有几种背景模式可供选择:

  • Clear Color 使用项目设置中定义的默认清除颜色。背景将是恒定颜色。

  • Custom Color 与清除颜色类似,但使用自定义颜色值。

  • Sky 允许你定义背景天空材质(见下文)。默认情况下,场景中的对象将反射此天空材质并吸收其中的环境光。

  • Canvas 将 2D 场景显示为 3D 场景的背景。这可用于使环境效果在 2D 渲染中可见,例如 2D 中的辉光

  • Keep 不会绘制任何天空,而是保留前一帧的内容。这提高了纯室内场景的性能,但如果天空在任何时候可见,则会产生“镜厅”(hall of mirrors)视觉故障。

  • Camera Feed(摄像头画面) 可以将来自物理摄像头的 CameraFeed 显示为背景,这在移动设备上开发 AR(增强现实)游戏时非常实用。

天空材质

使用 Sky 背景模式(或将环境光/反射光模式设置为 Sky )时,可在 Environment 资源中编辑 Sky 子资源。编辑此子资源允许你在 Sky 中创建 SkyMaterial 资源。

有 3 种内置天空材质可供选择:

  • PanoramaSkyMaterial:使用 360 度全景天空图像(建议宽高比为 2:1)。为利用高动态范围,全景图像必须采用 HDR 兼容格式(如 .hdr.exr),而非标准动态范围格式(如 .png.jpg)。

  • ProceduralSkyMaterial:使用程序生成的天空,并可调整地面、太阳、天空和地平线的颜色。这是编辑器预览中使用的天空类型。太阳的位置是自动从场景中前 4 个 DirectionalLight3D 节点得出的。同一时间最多可以有 4 个太阳。

  • PhysicalSkyMaterial:使用基于物理的程序天空,带有可调整的散射参数。太阳位置自动从场景中第一个 DirectionalLight3D 节点导出。与 ProceduralSkyMaterial 相比,PhysicalSkyMaterial 的渲染成本稍高。同一时间最多可以有 1 个太阳。

全景天空图像有时称为 HDRI(高动态范围图像)。你可以在 Poly Haven 上找到免费许可的 HDRI。

备注

具有非常明亮区域的 HDR PanoramaSkyMaterial 纹理(例如可以看到太阳的现实生活照片)可能导致环境反射和镜面反射中出现可见的闪光。这是由于纹理的峰值曝光过高造成的。

要解决此问题,请在文件系统面板中选择全景纹理,转到导入面板,启用 HDR 限制曝光,然后单击 重新导入

如果需要自定义天空材质(例如用于程序云),你可以创建自定义天空着色器

环境光

(此处定义)环境光是一种以相同强度影响每个几何体的光。它是全局的并且独立于可能添加到场景中的灯光。环境光是基于图像的照明的两个组成部分之一。与反射光不同,环境光不会因相机的位置和视角而变化。

有几种类型的环境光可供选择:

  • Background:从背景中获取环境光,如天空、自定义颜色或清除颜色(默认)。环境光强度会根据天空图像的内容变化,从而产生更具视觉吸引力的环境光照。必须将天空设置为背景才能显示此模式。

  • Disabled:不使用任何环境光。适用于纯室内场景。

  • Color:对环境光使用恒定颜色,忽略背景天空。所有方向的环境光强度相同,可能导致场景光照看起来更平坦。适用于漆黑阴影可能太暗的室内场景,或者最大限度地提高低端设备的性能。

  • Sky:从指定的天空获取环境光,即使背景设置为 Sky 以外的模式。如果背景模式已经是 Sky,则此模式的行为与 Background 相同。

当环境光模式设置为 Sky 或 Background(且背景设置为 Sky)时,可使用Sky Contribution 属性在环境颜色和天空之间混合。默认情况下,该值设置为 1.0,意味着仅使用环境天空。除非 Sky Contribution 降低到 1.0 以下,否则环境颜色将被忽略。

以下是不同环境光对场景影响的比较:

../../_images/environment_ambient2.webp

最后还有一个 Energy 设置,这是一个乘数,在使用 HDR 时非常有用。

一般来说,简单场景或大型室外场景才应依赖环境光。你也可以这样做来提升性能。环境光的渲染速度很快,但无法提供最佳的光照质量。最好使用 ReflectionProbeVoxelGISDFGI 生成环境光,因为它们能更准确地模拟间接光的传播方式。下面是使用平面环境色和 VoxelGI 在画质方面的比较:

../../_images/environment_ambient_comparison.webp

使用上述方法之一,将使用来自探针的环境光代替恒定的环境光。

反射光

反射光(也称镜面光)是基于图像的照明的另一个组成部分。

反射光可设置为三种模式之一:

  • Background:从背景反射,如天空、自定义颜色或清除颜色(默认)。

  • Disabled:不反射环境中的任何光线。适用于纯室内场景,或最大限度提高低端设备的性能。

  • Sky:从背景天空反射,即使背景设置为 Sky 以外的模式。如果背景模式已经是 Sky,则此模式的行为与 Background 相同。

色调映射

色调映射可从电影和游戏行业常用的标准算法列表中选择应用于场景的色调映射算法。除 Linear 外的其他色调映射模式用于使明暗区域更加均匀,同时避免高光过曝。每种算法都有不同的性能特点,在选择色调映射器时应予以考虑。

色调映射选项如下:

  • Mode:要使用的色调映射模式。

    • Linear:不修改色彩数据,采用线性色调映射曲线(会不自然地裁切高光值,导致亮部过曝)。最简单且性能最优的色调映射器。

    • Reinhard:一种简单的色调映射曲线,它会降低高光值以防止过曝。这导致画面可能显得暗淡且对比度不足。性能低于线性模式。当 White 保持默认值 1.0 时,Reinhard 的效果与线性模式完全一致。

    • Filmic:使用类似胶片的色调映射曲线来防止高光裁剪,并提供比 Reinhard 更好的对比度。性能略低于 Reinhard。

    • ACES:使用高对比度的胶片风格色调映射曲线,并对高光进行去饱和以获得更真实的外观。性能略低于电影级模式。

    • AgX:采用类似胶片的色调映射曲线,并对高光进行去饱和以获得更逼真的外观。与其他色调映射器相比,它在颜色变亮时能更好地保持色调。这是最慢的色调映射选项。

  • Exposure:调整数值在提供给色调映射器之前的亮度。较高的 Exposure 值会导致图像更亮。提供给色调映射器的数值还会乘以 2.0(用于 Filmic)和 1.8(用于 ACES),以产生与线性模式相似的视觉亮度。

  • 白点(White): 色调映射的白点参考值,它决定了在输入给色调映射器的数值范围内,“亮白色”具体处于哪个位置。如果是为了追求逼真的照片级光照,推荐的数值通常在 6.08.0 之间。设置更高的数值可以减少高光过曝(也就是画面亮处一片死白,失去细节的情况),但可能会让整体场景看起来对比度偏低。当色调映射模式选择 Linear(线性) 时, 白点(White) 参数将不可用。如果你使用的是 AgX 色调映射模式,并且处于移动(Mobile)渲染器下,同时 2D HDR 处于关闭状态,那么你在这里设置的数值会被直接忽略,引擎内部会自动采用 2.0 这个值。

  • AGX 对比度(AGX Contrast): 仅在使用 AgX(色调映射模式)时可用。调高这个数值会让画面中暗部的颜色更深,亮部的颜色更亮。与“调整(Adjustment)”部分里的普通对比度选项相比,它能带来更好的视觉效果,而且完全不会带来额外的性能开销。

中期和后期处理效果

Environment 资源支持许多流行的中期和后期处理效果。

备注

屏幕空间效果(如 SSR(屏幕空间反射)SSAO(屏幕空间环境光遮蔽)SSIL(屏幕空间间接照明)和辉光)不会对位于相机视图之外或被其他不透明几何体遮挡的几何体进行操作。调整设置时应考虑这一点,以避免游戏过程中发生分散注意力的变化。

屏幕空间反射(SSR)

此功能仅在使用 Forward+ 渲染器时可用,Mobile 或 Compatibility 渲染器中不可用。

虽然 Godot 支持多种反射数据源(如 反射探针),但它们可能无法为所有情况提供足够的细节。屏幕空间反射最有意义的场景是物体相互接触时(物体在地板、桌子或水面上等)。

../../_images/environment_ssr.webp

除了提供更多细节外,屏幕空间反射还可以实时工作(而其他类型的反射通常是预先计算的)。这可用于使角色、汽车等在移动时反射到周围的表面上。

屏幕空间反射可以与其他反射源同时使用,以便在可能的情况下获得详细反射,同时在无法使用屏幕空间反射时进行回退(例如反射屏幕外对象)。

以下是一些用户可控的参数,可用于更好地调整该技术:

  • Max Steps:决定反射的最大长度。该值越大,计算成本越高。

  • Fade In:允许调整淡入曲线,有助于使接触区域更柔和。

  • Fade Out:允许调整淡出曲线,使步长限制柔和淡出。

  • Depth Tolerance:可用于允许屏幕空间光线穿过对象后面。光线将把每个对象视为具有该深度,以确定它是否可以从该对象后面穿过。较高的值将使屏幕空间反射表现出更少的“破裂”,但代价是某些对象会产生物理上不正确的反射。

此外,你还可以通过在项目设置中切换 渲染 > 环境 > 屏幕空间反射 > 一半大小 选项调整屏幕空间反射(SSR)的质量。默认情况下,出于性能考虑,屏幕空间反射以半分辨率渲染。禁用此设置将使效果以全分辨率渲染,从而提高质量,但会增加 GPU 占用率。

备注

请记住,屏幕空间反射仅适用于反射不透明几何体。透明材质不会被反射,因为它们不写入深度缓冲。这也适用于使用 hint_screen_texturehint_depth_texture uniform 的着色器。

屏幕空间环境光遮蔽(SSAO)

此功能仅在使用 Forward+ 和 Compatibility 渲染器时可用,Mobile 渲染器中不可用。

Ambient 部分所述,灯光节点的光线无法到达的区域(超出半径或被阴影遮挡)会被环境光照亮。Godot 可以使用 VoxelGI、ReflectionProbe、天空或恒定环境色来模拟这种情况。然而,问题是之前提出的所有方法更多地作用于较大尺度(大区域),而非较小几何体层面。

恒定环境色和天空在任何地方都是相同的,而 GI 和反射探针具有更多的局部细节,但尚不足以模拟光线无法填充空心或凹面特征的情况。

这可以通过屏幕空间环境光遮蔽来模拟。如下图所示,其目的是确保凹陷区域更暗,模拟光线进入的更窄路径:

../../_images/environment_ssao.webp

启用该效果并打开灯光却无法看到效果,这是一个常见的错误。这是因为 SSAO(屏幕空间环境光遮蔽)仅对环境光起作用,不会影响直接光。

这就是为什么在上图中,效果在直射光下不太明显(左侧)。如果想强制 SSAO(屏幕空间环境光遮蔽)也在直射光下工作,请使用 Light Affect 参数。尽管这在物理上不正确,但一些艺术家喜欢这种效果。

SSAO(屏幕空间环境光遮蔽)与真实的间接光源(如 VoxelGI)结合使用时效果最佳:

../../_images/environment_ssao2.webp

可以使用几个参数调整 SSAO(屏幕空间环境光遮蔽)

../../_images/environment_ssao_parameters.webp
  • Radius:计算屏幕空间环境光遮蔽时,对象可以相互遮挡的距离。较高的值会增加遮挡距离,但会牺牲性能和质量。

  • Intensity:屏幕空间环境光遮蔽主要强度。用作屏幕空间环境光遮蔽效果的乘数。值越高,遮挡越暗。由于 SSAO(屏幕空间环境光遮蔽)是一种屏幕空间效果,因此建议对该值保持保守。过强的 SSAO(屏幕空间环境光遮蔽)可能会在游戏过程中分散注意力。

  • Power:遮挡的分布。值越高,遮挡越暗,与 Intensity 类似,但衰减更剧烈。

  • Detail:设置屏幕空间环境光遮蔽效果的附加细节层次的强度。较高的值会使细节通道更突出,但可能导致最终图像出现锯齿。

  • Horizon:判断表面上的某个点是否被遮挡的阈值,表示为从地平线起被映射到 0.0-1.0 范围内的角度。值为 1.0 表示无遮挡。

  • Sharpness:允许屏幕空间环境光遮蔽效果在对象边缘模糊的程度。设置太高会导致对象边缘出现锯齿。设置太低会使对象边缘显得模糊。

  • Light Affect:直射光下的屏幕空间环境光遮蔽强度。在实际中,环境光遮蔽仅适用于间接光,这意味着在直射光下无法看到其效果。高于 0 的值将使 SSAO(屏幕空间环境光遮蔽)效果在直射光下可见。高于 0.0 的值在物理上并不准确,但一些艺术家更喜欢这种效果。

  • AO Channel Affect 对于定义了 AO 纹理的材质,屏幕空间环境光遮蔽的强度。高于 0.0 的值将使 SSAO 效果在 AO 纹理变暗的区域可见。

此外,你还可以在项目设置的 渲染 > 环境 > SSAO 部分调整 SSAO 的质量:

  • Quality:设置屏幕空间环境光遮蔽效果的质量。数值越高,采样次数越多,因此质量越高,但性能会降低。将其设置为 Ultra(超高)将使用 Adaptive Target 设置(见下文)。

  • Half Size:如果设置为 true,屏幕空间环境光遮蔽将以一半大小渲染,然后在添加到场景之前放大。这种方法速度更快,但可能会丢失一些细节。如果设置为 false,屏幕空间环境光遮蔽将以完整大小渲染。

  • Adaptive Target:Quality 设置为 Ultra 时使用的质量目标。值为 0.0 时,画质和速度与 Medium 设置相似;值为 1.0 时,画质远高于其他任何设置,但性能会降低。

  • Blur Passes:计算屏幕空间环境光遮蔽时使用的模糊遍数。较高的值会使画面更平滑,但计算速度较慢,高频细节也会减少。

  • Fadeout From:屏幕空间环境光遮蔽效果开始淡出的距离。使用该选项可从远处隐藏环境光遮蔽效果。

  • Fadeout To:屏幕空间环境光遮蔽完全消失的距离。使用该选项可从远处隐藏环境光遮蔽。

备注

从 Godot 4.6 开始,Compatibility 渲染器中提供了一个简化版本的 SSAO 。虽然外观不同,但与 Forward+ 中的 SSAO 相比,它在低端设备上的性能应该会有显著提升。

使用 Compatibility 渲染器时,只能调整 RadiusIntensity 参数。

屏幕空间间接照明(SSIL)

此功能仅在使用 Forward+ 渲染器时可用,Mobile 或 Compatibility 渲染器中不可用。

SSIL(屏幕空间间接照明)为其他全局照明技术无法覆盖的小细节或动态几何体提供间接照明。这适用于反弹的漫反射光照,也适用于自发光材质。当单独启用 SSIL(屏幕空间间接照明)时,效果可能不那么明显,这是预期之中的。

相反,SSIL(屏幕空间间接照明)旨在作为其他全局照明技术(如 VoxelGI、SDFGI 和 LightmapGI)的补充SSIL(屏幕空间间接照明)还能提供一种细微的环境光遮蔽效果,类似于 SSAO,但细节较少。

此功能仅提供间接照明,并非完整的全局光照解决方案。这使其区别于其他 3D 引擎所提供的屏幕空间全局光照(SSGI)。SSIL(屏幕空间间接照明)可以与 SSR(屏幕空间反射)和/或 SSAO(屏幕空间环境光遮蔽)组合使用,实现更高的画质(有额外的性能开销)。

可以使用几个参数调整 SSIL(屏幕空间间接照明)

  • Radius:使用屏幕空间间接照明效果时,反弹光照可以传播的距离。较大的值将导致场景中的光传播更远,但可能导致采样不足的伪像,看起来像光源周围的长尖峰。

  • Intensity:屏幕空间间接照明效果的亮度乘数。值越高,光线越亮。

  • Sharpness:允许屏幕空间间接照明效果在对象边缘模糊的程度。设置太高会导致对象边缘出现锯齿。设置太低会使对象边缘显得模糊。

  • Normal Rejection:计算屏幕空间间接照明时使用的法线拒绝量。法线拒绝使用给定样本点的法线来拒绝背向当前像素的样本。当物体只有一侧被照亮时,为避免漏光,法线拒绝是必要的。但是,如果需要漏光(例如当场景主要包含从相机看不到的面发射光线的发光对象时),可以禁用法线拒绝。

此外,你还可以在项目设置的 渲染 > 环境 > SSIL 部分调整 SSIL 的质量:

  • Quality:设置屏幕空间间接照明效果的质量。数值越高,采样次数越多,因此质量越高,但性能会降低。将其设置为 Ultra 将使用 Adaptive Target 设置(见下文)。

  • Half Size:如果设置为 true,屏幕空间环境光遮蔽将以一半大小渲染,然后在添加到场景之前放大。这种方法速度更快,但可能会丢失一些细节。如果设置为 false,屏幕空间环境光遮蔽将以完整大小渲染。

  • Adaptive Target:Quality 设置为 Ultra 时使用的质量目标。值为 0.0 时,画质和速度与 Medium 设置相似;值为 1.0 时,画质远高于其他任何设置,但性能会降低。使用自适应目标时,性能开销会随场景复杂度增加而增加。

  • Blur Passes:计算屏幕空间间接照明时使用的模糊遍数。较高的值会使画面更平滑,但计算速度较慢,高频细节也会减少。

  • Fadeout From:屏幕空间间接照明效果开始淡出的距离。使用该选项可从远处隐藏屏幕空间间接照明。

  • Fadeout To:屏幕空间间接照明完全消失的距离。使用该选项可从远处隐藏屏幕空间间接照明。

../../_images/environment_ssil.webp

有符号距离场全局光照(SDFGI)

此功能仅在使用 Forward+ 渲染器时可用,Mobile 或 Compatibility 渲染器中不可用。

有符号距离场全局光照(SDFGI)是一种实时全局光照形式。它不是屏幕空间效果,因此可以为屏幕外元素提供全局光照(与 SSIL(屏幕空间间接照明)不同)。

参见

有关设置该全局光照技术的说明,请参阅《带符号距离场全局光照(SDFGI)》。

../../_images/environment_sdfgi.webp

辉光

备注

当使用兼容性渲染方法时,辉光会使用一种不同的实现,会使一些属性在检查器中不可用而被隐藏:LevelsNormalizedStrengthBlend ModeMixMapMap Strength

该实现为在低端设备上运行进行了优化,因此灵活性较差。

在摄影和电影中,当光量超过介质支持的最大明度(亮度)时,它通常会向外扩散到图像的较暗区域。在 Godot 中使用 Glow 效果模拟这种效果。

../../_images/environment_glow1.webp

默认情况下,即使启用了该效果,它也会很弱或不可见。实际显示它需要满足以下两个条件之一:

    1. 像素中的光线超过 HDR Threshold(其中 0 表示所有光线都超过该阈值,1.0 表示光线超过色调映射器 White 值)。通常情况下,该值应为 1.0,但可以降低它以允许更多光线渗出。还有一个额外参数 HDR Scale,可用于缩放(使之更亮或更暗)超过阈值的光线。

../../_images/environment_glow_threshold.webp
    1. Bloom 属性的值大于 0.0。随着该值的增加,它会以更大的幅度将整个屏幕发送到辉光处理器。

../../_images/environment_glow_bloom.webp

两者都会导致光线开始从较亮区域渗出。

一旦辉光可见,就可以使用一些额外参数来控制它:

  • Intensity 是效果的整体比例,可以增强或减弱(0.0 为移除)。

  • Strength 指高斯滤波器内核的处理强度。较大的值会使滤波器饱和并向外扩展。一般来说不需要改变这个值,因为可以通过 Levels 更有效地调整大小。

效果的 Blend Mode 也可以更改:

  • Additive 是最强的一种,因为它只在图像上叠加辉光效果,不涉及混合。一般来说它太强而不宜使用,但与低强度的 Bloom 搭配使用效果不错(会产生梦幻般的效果)。

  • Screen 确保辉光永远不会比自己更亮,整体来说效果非常好。

  • Softlight 是默认且最弱的一种,只在物体周围产生细微的颜色扰动。这种模式在黑暗场景中效果最佳。

  • Replace 可以用来模糊整个屏幕或调试效果。它只显示辉光效果,不包含原本的图像。

  • Mix 将辉光效果与主图像混合。这可以用于更好的艺术控制。混合因子由出现在混合模式上方的 Mix 属性控制(仅当混合模式设置为 Mix 时出现)。除非增加 Bloom,否则高混合因子值会使图像变暗。

Godot 提供了Levels(层级),用于改变辉光效果的大小和形状。较小的层是在物体周围出现的较强的辉光,而大的层是覆盖整个屏幕的朦胧辉光:

../../_images/environment_glow_layers.webp

然而,这个系统的真正优势在于结合各个层级来创造更有趣的辉光图案:

../../_images/environment_glow_layers2.webp

最后,可以使用 glow map 来控制辉光效果,辉光贴图是一种纹理,用于确定屏幕每个部分的辉光亮度。可以选择为该纹理着色,以将辉光效果染成辉光贴图的颜色。纹理会被拉伸以适应视口,因此建议使用与视口最常见纵横比(如 16:9)相匹配的纵横比,以避免出现明显的失真。

辉光贴图纹理有 2 种主要用途:

  • 使用污垢图案纹理创建“镜头污垢”(lens dirt)效果。

  • 使用渐变纹理让屏幕特定部分的辉光减弱。

../../_images/environment_glow_map.webp

默认情况下,辉光在桌面平台使用双三次缩放滤镜,在移动平台使用双线性缩放滤镜。双三次缩放滤镜能提供更高质量、更少块状外观,但它会增加 GPU 性能开销(在集成显卡上可能尤为明显)。缩放模式可通过 渲染 > 环境 > 辉光 > 放大模式 项目设置控制。此设置仅在使用 Forward+ 或 Mobile 渲染器时有效,因为 Compatibility使用不同的辉光实现。

../../_images/environment_and_post_processing_glow_scale_mode.webp

在 2D 中使用辉光

在 2D 中使用辉光有两种方法:

  • 从 Godot 4.2 开始,使用 Forward+ 和 Mobile 渲染方法时可以启用 2D 渲染的 HDR。这会带来性能开销,但能允许更大的动态范围。这也让你能够使用对象各自的 ModulateSelf Modulate 属性控制哪些对象产生辉光(在取色器中使用强度滑块)。启用 HDR 还可以减少 2D 渲染输出中的条带现象。

  • 如果你想最大限度地提高性能,可以禁用 2D 渲染的 HDR。但这会减少你对哪些对象产生辉光的控制。

    • 启用辉光,将环境背景模式设置为 Canvas,然后降低 Glow HDR Threshold),使非过亮的像素也能产生辉光。为防止 UI 元素产生辉光,请将它们设为 CanvasLayer 节点的子节点。你可以使用 Environment 资源的 Background > Canvas Max Layer 属性来控制哪些图层受辉光影响。

在 2D 场景中使用辉光的示例

在 2D 场景中使用辉光的示例。启用了 HDR 2D,同时使用取色器中的强度滑块将硬币和子弹的 Modulate 属性增加到过亮值。

警告

如果启用了 渲染 > 视口 > HDR 2D 项目设置,2D 渲染器将在线性颜色空间中渲染,因此在 canvas_item 着色器中用作颜色输入的 uniform 采样器也必须使用 source_color 提示。如果不这样做,纹理会显得褪色。

如果禁用了 2D HDR,source_color 将在 canvas_item 着色器中继续保持正常工作,因此无论在哪种情况下,只要相关就建议使用该提示。

使用线性颜色空间还意味着 alpha 混合会发生变化。低不透明度值的精灵通常会变得更加显眼,字体渲染会因字体抗锯齿的低不透明度像素变得更明显而显得更粗。这也会影响编辑器自身的渲染。

使用辉光使屏幕模糊

辉光可用于模糊整个视口,这在菜单打开时的背景模糊中很有用。除非将环境的背景模式设置为 Canvas,否则只有 3D 渲染会受到影响。为了防止 UI 元素在使用 Canvas 背景模式时被模糊,请将它们设为 CanvasLayer 节点的子节点。你可以使用 Environment 资源的 Background > Canvas Max Layer 属性来控制哪些图层受该模糊效果影响。

要将辉光用作模糊效果解决方案:

  • 启用 Normalized 并根据偏好调整层级。增加更高层级索引的层会导致图像更模糊。建议将单个辉光层级设置为 1.0,并将所有其他辉光层级保留为 0.0,不过这不是必需的。请注意,最终外观会根据视口分辨率有所不同。

  • Intensity 设置为 1.0,并将 Bloom 设置为 1.0

  • 将混合模式设置为 Replace,将 HDR Luminance Cap 设置为 1.0

使用辉光模糊菜单背景中 2D 渲染的示例

使用辉光模糊菜单背景中 2D 渲染的示例

备注

本节仅涉及非体积雾。可以同时使用非体积雾和 体积雾和雾体积

雾就像在现实生活中一样,使远处的物体逐渐消失成均匀的颜色。Godot 中有两种雾:

  • 深度雾:基于距相机的距离应用。

  • 高度雾:应用于任何低于(或高于)特定高度的对象,与距相机的距离无关。

../../_images/environment_fog_depth_height.webp

这两种雾类型都可以调整它们的曲线,使过渡更明显或更模糊。

可以调整两个属性以使雾效果更有趣:

首先是 Sun Scatter,它利用当前场景中 DirectionalLight3D 的颜色和能量。当朝向平行光(通常是太阳)时,雾气会根据光的颜色着色,以模拟阳光穿过雾气的效果。

其次是 Aerial Perspective,根据天空颜色调整雾的色调,更好地融合天空与背景。较高的值会产生更多的色调变化,数值为 1.0 时大气透视将完全取代雾的常规颜色。这可用于大型开放世界关卡以提供更好的景深感,或避免天空和雾色之间的颜色不连续。

如果 Sun ScatterAerial Perspective 都大于 0.0,太阳散射(sun scatter)将应用在大气透视之上。

备注

雾可能导致视口中出现条带,尤其是在密度较高的情况下。如何减少条带见《带状颜色》。

体积雾

体积雾为场景提供逼真的雾效果,其颜色会受到穿过雾的灯光影响。

参见

关于设置体积雾的文档,请参阅《体积雾和雾体积》。

调整

在处理结束时,Godot 提供了进行一些标准图像调整的可能性。

../../_images/environment_adjustments.webp

基本 BCS 调整

第一项调整是能够更改典型的 Brightness(亮度)、Contrast(对比度) 和 Saturation (饱和度)属性:

../../_images/environment_adjustments_bcs.webp

使用一维渐变进行颜色校正

第二项调整是通过提供颜色校正渐变来实现。这可以通过将 GradientTexture1D 资源分配给 Color Correction 属性,或者加载包含水平渐变的纹理来实现。渐变的最左侧部分表示源图像中的黑色,而渐变的最右侧部分表示源图像中的白色。

如下所示的黑到白的线性渐变将不产生任何效果:

../../_images/environment_adjustments_default_gradient.webp

但自定义的黑白渐变能够将每个通道映射到不同的颜色:

../../_images/environment_adjustments_custom_gradient.webp

使用 3D LUT 进行颜色校正

3D 查找纹理(LUT)也可用于色彩校正。这是一种特殊纹理,用于分别修改各个颜色通道(红、绿、蓝)。该图像可以是任何分辨率,但由于颜色校正是低频数据,出于性能原因,建议坚持使用低分辨率。LUT 纹理的分辨率通常为 17×17×17、33×33×33、51×51×51 或 65×65×65(奇数尺寸允许更好的插值)。

为了使其工作,查找纹理的导入模式必须在导入面板中设置为 Texture3D(而不是作为常规 Texture2D 导入):

../../_images/environment_adjustments_3d_lut_import.webp

确保同时配置要导入的水平和垂直切片数量。如果不这样做,LUT 纹理在使用时将无法正确影响视口。你可以通过在文件系统面板中双击它来预览 3D 纹理是如何导入的,然后转到检查器翻看纹理的图层。

你可以使用这个中性 33×33×33 LUT 模板作为基础(右键点击并选择 另存为…):

../../_images/environment_adjustments_3d_lut_template.webp

使用上述 LUT 模板,将其导入模式更改为 Texture3D 后,在导入面板中将其 水平 切片数设置为 33,然后单击 重新导入。如果将该 LUT 加载到 Color Correction 属性中,你暂时不会看到任何明显差异,因为该纹理作为起点是中性的。

可以在图像编辑器中修改该 LUT 模板,为图像提供不同的氛围。常见的工作流程是将 LUT图像放在项目 3D 视口的屏幕截图旁边,然后使用图像编辑器同时修改 LUT 图像和屏幕截图。然后可以保存 LUT 并将其应用到游戏引擎,以实时执行相同的颜色校正。

例如,在图像编辑器中修改 LUT 模板使其具有“棕褐色”外观会得到右侧的图像:

../../_images/environment_adjustments_3d_lut_comparison.webp

备注

调整和颜色校正在色调映射之后应用。这意味着当启用调整时,上面定义的色调映射属性仍然有效。

相机属性选项

Godot 有两种相机属性:物理(physical)和实用(practical)。当你使用 CameraAttributesPhysical(物理相机属性) 而不是 CameraAttributesPractical(实用相机属性)时,景深(depth of field)会根据相机的对焦距离、焦距和光圈自动计算出来。此外,还会提供“视锥体(Frustum)”相关的选项。

景深/远模糊

该效果模拟相机的焦点距离。它模糊给定范围后面的物体。它包含一个初始 Distance(距离)和 Transition(过渡)区域(单位为世界单位):

../../_images/environment_dof_far.webp

Amount 参数控制模糊量。对于较大的模糊,可能需要在高级项目设置中调整景深质量以避免出现伪影。

景深/近模糊

该效果模拟相机的焦点距离。它模糊靠近相机的物体(作用方向与远景模糊相反)。它包含一个初始 Distance(距离)和 Transition(过渡)区域(单位为世界单位):

../../_images/environment_dof_near.webp

Amount 参数控制模糊量。对于较大的模糊,可能需要在高级项目设置中调整景深质量以避免出现伪影。

通常同时使用两种模糊效果来将观众的注意力集中在给定对象上,或者创造所谓的“移轴”效果

../../_images/environment_mixed_blur.webp

曝光

这会乘上相机可见的整体场景亮度。较高的值会产生视觉上更亮的场景。

自动曝光

此功能仅在使用 Forward+ 渲染器时可用,Mobile 或 Compatibility 渲染器中不可用。

尽管在大多数情况下,光照和纹理都受到艺术家的严格控制,但 Godot 通过自动曝光机制支持基本的高动态范围实现。这通常用于将低光的室内区域和明亮的室外区域相结合时增加真实感。自动曝光通过模拟相机(或眼睛)努力适应明暗位置及其不同的光量。

备注

自动曝光需要每帧评估场景亮度,这会造成一定的性能开销。因此,如果自动曝光对你的场景影响不大,建议禁用该功能。

../../_images/environment_hdr_autoexp.webp

使用自动曝光的最简单方法是确保室外灯光(或其他强光)的能量超过 1.0。这是通过调整灯光自身的 Energy 乘数来实现的。为了保持一致,Sky 通常也需要使用能量乘数,以配合方向光。通常,3.0 到 6.0 之间的值就足以模拟室内外条件。

通过将自动曝光与 辉光 后期处理相结合,超出色调映射 White 的像素将溢出到辉光缓冲区,从而在摄影中产生典型的泛光效果。

../../_images/environment_hdr_bloom.webp

“自动曝光”部分中的用户可控值具有合理的默认值,但你仍然可以调整它们:

../../_images/environment_hdr.webp
  • Scale:用于缩放光照的值。值越高,图像越亮;值越低,图像越暗。

  • Min Sensitivity / Min Exposure Value:自动曝光的目标最小明度(使用 CameraAttributesPractical 时以 ISO 为单位,使用 CameraAttributesPhysical 时以 EV100 为单位)。明度是屏幕所有像素中光的平均值。

  • Max Sensitivity / Max Exposure Value:自动曝光的目标最大明度(使用 CameraAttributesPractical 时以 ISO 为单位,使用 CameraAttributesPhysical 时以 EV100 为单位)。

  • Speed:亮度自行校正的速度。值越高,亮度校正越快。较高的值可能更适合快节奏的游戏,但在某些情况下可能会分散注意力。

使用 CameraAttributesPractical 时,曝光的 Sensitivity 是以 ISO 为单位,而不是 EV100。典型的 ISO 值介于 50 到 3200 之间,值越高,最终曝光越高。现实生活中,白天摄影一般使用 100 到 800 之间的 ISO 值。

参见

如果你希望使用现实世界的单位来配置相机的曝光、视野和景深,请参阅物理灯光和相机单位