环境和后期处理

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

备注

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

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

环境

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

Camera3D 节点(高优先级)

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

../../_images/environment_camera.webp

这在想要覆盖现有环境时非常有用,但通常来说使用以下的选项更好。

WorldEnvironment 节点(中优先级,推荐)

WorldEnvironment节点可以添加到任何场景, 但每个活动场景树只能存在一个. 添加多个将导致警告.

../../_images/environment_world.webp

添加的任何 Environment 都具有比默认 Environment 更高的优先级(后述)。这意味着它可以针对各个场景分别进行覆盖,这使它非常有用。

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

备注

从 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 中,曝光和景深信息从环境资源中分离到单独的 CameraAttributes 资源中。 这样可以更轻松地独立于其他环境设置来调整这些属性。

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

有两种 CameraAttribute 资源可用:

  • 实用相机属性: 使用任意单位公开功能,这对于大多数游戏用例来说更容易推理。

  • CameraAttributesPhysical: 使用现实世界单位曝光特征,类似于数码相机。 例如,视野是使用以毫米为单位的焦距,而不是以度为单位的值来设置的。 当物理精度很重要时推荐使用,例如要求照片级真实感渲染。

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

备注

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

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

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

环境可选项

以下是所有环境选项的详细说明以及如何使用它们。

背景

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

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

../../_images/environment_background1.webp

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

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

  • 自定义颜色(Custom Color) 与清晰颜色(Clear Color)类似,但具有自定义颜色值。

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

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

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

天空材质

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

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

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

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

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

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

备注

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

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

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

环境光

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

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

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

  • Disabled: (禁用)不使用任何环境光。 对于纯室内场景很有用。

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

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

../../_images/environment_ambient.webp

当环境光模式设置为 Sky 或 Background(并且背景设置为天空)时,可以使用 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 相同。

备注

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

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

  • 深度雾: 这个基于距相机的距离来应用.

  • 高度雾: 此高度应用于任何低于(或高于)某个高度的物体, 无论距离相机的距离如何.

../../_images/environment_fog_depth_height.webp

这两种雾类型都可以调整它们的曲线, 使它们的过渡或多或少变得清晰.

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

第一个是 Sun Amount,它利用雾的太阳颜色属性。当朝向平行光(通常是太阳)时,雾的颜色将会改变,模拟穿过雾的阳光。

第二个是 Transmit Enabled,可以模拟更逼真的透射率。实践中会使光线在雾中更加突出。

../../_images/environment_fog_transmission.webp

备注

雾会导致在视口中出现色带,尤其是在密度较高的情况下。请参阅 带状颜色,了解如何减少条带。

体积雾

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

参见

有关设定体积雾的内容,请参看 体积雾和雾体积

色调映射

色调映射从电影和游戏行业使用的标准曲线列表中,选择将应用于场景的色调映射曲线。除了 Linear (线性)之外,的色调映射运算子可使得亮部和暗部区域更加均匀,同时防止高亮区域受到裁剪。

色调映射选项有:

  • Mode(模式):色调映射所使用的模式。

    • Linear(线性):默认的色调映射模式。这是最快也是最简单的色调映射运算子,但会导致高亮区域过曝,输出颜色出现可见的裁剪。

    • Reinhardt:对渲染后像素的颜色按照这个公式执行变化:color = color / (1 + color)。可以防止裁剪高亮区域,但最终的图像可能会有些暗淡。

    • Filmic:防止裁剪高亮区域,最终的图像通常比 Reinhardt 鲜艳。

    • ACES:Academy Color Encoding System(学院色彩编码系统)色调映射器。ACES 比其他选项更耗性能一些,但对于高亮区域的处理方式更真实,越亮饱和度越低。ACES 输出的图像通常比 Reinhardt 和 Filmic 的对比度更高。想要让画面更具真实感时,推荐选用 ACES。该色调映射器在 Godot 3.x 中被叫做”ACES Fitted”。

  • Exposure(曝光):色调映射曝光,模拟长时间获取的光照量(默认:1.0)。值越高,整体更亮。修改色调映射运算子或白点后,如果场景看上去太暗,请尝试将这个值略微调高。

  • White(白点):光照映射白点,模拟白色在整个尺度中所处的位置(默认:1.0)。为了让光照更真实,推荐使用 6.08.0 之间的值。值越高,高光区域更少过曝,但会让场景整体看起来更暗。

中后期处理效果

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

备注

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

屏幕空间反射(SSR)

此功能仅在使用 Forward+ 后端时可用,移动或兼容性后端中不可用。

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

../../_images/environment_ssr.webp

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

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

一些用户控制的参数可用于更好地调整技术:

  • 最大步数 确定反射的长度. 这个数字越大, 计算成本就越高.

  • 淡入 允许调整淡入曲线, 这有助于使接触区域更柔和.

  • 淡出 允许调整淡出曲线, 因此步长限制会轻微淡出.

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

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

屏幕空间环境遮挡(SSAO)

此功能仅在使用 Forward+ 后端时可用,移动或兼容性后端中不可用。

正如在 环境 部分提到的, 光节点的光线无法到达的区域会被环境光照亮(要么是因为它在半径之外, 要么是阴影)。Godot可以使用GIProbe,ReflectionProbe,Sky或恒定的环境色来模拟这种情况。但问题是,之前提出的所有方法都更多地作用于较大的尺度(大区域),而不是较小的几何体层面。

恒定环境色和Sky在任何地方都是一样的, 而GI和反射探针的局部细节较多, 但不足以模拟光线无法填充到中空或凹面特征内部的情况.

这可以用屏幕空间环境遮挡来模拟. 如下图所示, 它的目的是确保凹陷区域更暗, 模拟光线进入的较窄路径:

../../_images/environment_ssao.webp

启用此效果、打开灯却无法欣赏到它是一个常见的错误。这是因为 SSAO 仅作用于环境光。而不是直接光。

这就是为什么在上图中,直射光下效果不太明显的原因(左侧)。如果你想强制 SSAO(屏幕空间环境光遮蔽) 也在直射光下工作,请使用 Light Affect(光线影响)参数(尽管并这不好,但有些设计师喜欢它的外观)。

当与 VoxelGI 等真正的间接光源结合使用时,SSAO 看起来最佳:

../../_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 的值将使 :abbr:` SSAO (Screen-Space Ambient Occlusion, 屏幕空间环境光遮挡)`效果在直射光下可见。 高于 0.0 的值在物理上并不准确,但一些艺术家更喜欢这种效果。

屏幕空间间接光照(SSIL)

此功能仅在使用 Forward+ 后端时可用,移动或兼容性后端中不可用。

SSIL 为其他全局照明技术无法覆盖的小细节或动态几何体提供间接照明。 这适用于反射漫反射照明,也适用于自发光材料。 当单独启用 SSIL 时,效果可能不会像预期那样明显。

相反,SSIL 旨在用作其他全局照明技术(例如 VoxelGI、SDFGI 和 LightmapGI)的“补充”。SSIL 还提供微妙的环境光遮挡效果,与 SSAO 类似,但细节较少。

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

可以使用几个参数调整 SSIL:

  • 半径(Radius): 使用屏幕空间间接照明效果时,反射照明可以行进的距离。 较大的值将导致场景中的光线进一步反弹,但可能会导致采样不足的伪像,看起来像光源周围的长尖峰。

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

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

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

../../_images/environment_ssil.webp

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

此功能仅在使用 Forward+ 后端时可用,移动或兼容性后端中不可用。

带符号距离场全局照明(SDFGI)是一种实时全局照明的形式。 它不是屏幕空间效果,这意味着它可以为屏幕外元素提供全局照明(与 SSIL 不同)。

参见

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

../../_images/environment_sdfgi.webp

辉光

备注

当使用兼容性渲染方法时,辉光会采用一些不同实现方式,并使一些检查器中的属性不可用且被隐藏:Levels, Normalized, Strength, Blend Mode, Mix, Map, and Map Strength.

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

在摄影和胶片中,当光量超过介质支持的最大值(无论是模拟还是数字)时,它通常会向外渗出到图像的较暗区域。在 Godot 中使用 辉光 模拟这种效果。

../../_images/environment_glow1.webp

默认情况下,即使启用了效果,它也会变弱或不可见。实际显示它需要发生的两个条件之一:

    1. 像素中的光线超过 HDR阈值 (其中0是所有光线都超过该阈值,1.0是光线超过色调映射器 值). 通常情况下, 这个值应该在1.0, 但它可以调低, 以允许更多的光线渗入. 还有一个额外的参数, HDR Scale , 允许对超过阈值的光线进行缩放(使其更亮或更暗).

../../_images/environment_glow_threshold.webp

    1. 泛光 属性的值设置大于 0 。随着它的增加,它会以更高的数量将整个屏幕发送到辉光处理器。

../../_images/environment_glow_bloom.webp

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

一旦看到辉光,就可以通过一些额外的参数来控制它:

  • Intensity (强度)是效果的整体比例,可以将其增强或减弱( 0.0 可以将其删除)。

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

效果的混合模式也可以改变:

  • Additive (添加)是最强的一种,因为它只在图像上添加辉光效果,不涉及混合。一般来说,它太强了,不能使用,但在低强度的 泛光 下可能看起来很好,会产生一种梦幻般的效果。

  • Screen 确保辉光永远不会比自己更亮,它作为一个整体效果非常好。

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

  • Replace (替换)可以用来 模糊整个屏幕 或调试效果。它只显示辉光的效果,没有下面的图片。

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

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

../../_images/environment_glow_layers.webp

然而,这个系统的真正优势在于结合水平来创造更有趣的辉光模式:

../../_images/environment_glow_layers2.webp

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

辉光贴图纹理有 2 个主要案例:

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

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

../../_images/environment_glow_map.webp

在 2D 中使用辉光

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

  • 从 Godot 4.2 开始,你可以在使用 Forward+ 和移动渲染方法时,启用 HDR 进行 2D 渲染。这会产生一定的性能损耗,但也会带来更大的动态范围。HDR 还可以让你通过使用各自的 Modulate (调制) 或 Self Modulate (自调制) 属性,来控制哪些对象产生辉光(在颜色选择器中使用 RAW 模式)。启用 HDR 还可以减少 2D 渲染输出中的条带。

    • 要在 2D 中启用 HDR,请打开项目设置,启用 渲染 > 视口 > HDR 2D ,然后重新启动编辑器。
  • 如果你想最大限度地提高性能,可以禁用 HDR 进行 2D 渲染。但是这会减少你物体辉光的控制。

    • 启用辉光,将环境背景模式设置为 Canvas ,然后降低 Glow 中的 HDR Threshold (HDR 阈值),以便不是过亮的像素仍然会发出辉光。为了防止 UI 元素产生辉光,请将它们设为 CanvasLayer 节点的子节点。你可以使用环境资源的 Background > Canvas Max Layer 属性来控制哪些层受辉光影响。
在 2D 场景中使用辉光的示例

在 2D 场景中使用辉光的示例。 已启用 HDR 2D,而硬币和子弹的 Modulate 属性使用颜色选择器中的 RAW 模式增加到过亮的值。

警告

如果启用了 Rendering > Viewport > HDR 2D 项目设置,2D 渲染器将在线性颜色空间中渲染,因此 source_color 也必须用于在 canvas_item 中用作颜色输入的统一采样器着色器。如果不这样做,纹理就会显得很淡。

如果禁用了 2D HDR, source_color 将在 canvas_item 着色器中保持正常工作,因此,建议你的工作与之相关时使用它。

使用辉光来使屏幕模糊

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

要使用辉光光作为一种模糊效果解决方案:

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

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

  • 将 Blend Mode (混合模式)设置为 Replaced ,并将 HDR Luminance Cap (HDR 亮度上限)设置为 1.0

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

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

调整

在处理结束时,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 纹理来预览如何导入 3D 纹理,然后转到检查器以翻转纹理的图层。

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

../../_images/environment_adjustments_3d_lut_template.webp

使用上述 LUT 模板,将其导入模式更改为 Texture3D 后,在导入面板中将其 Horizontal 切片数量设置为 33 ,然后单击 重新导入 。 如果将此 LUT 加载到 颜色校正 属性中,你现在不会看到任何明显的差异,因为该纹理被设计为中性起点。

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

例如,在图像编辑器中修改 LUT 模板以使其呈现“棕褐色”外观,结果如下图所示:

../../_images/environment_adjustments_3d_lut_comparison.webp

备注

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

相机属性选项

景深/远模糊

此效果可模拟高端相机的焦距。它模糊了给定范围后面的物体。它有一个 距离过渡 区域(世界单位):

../../_images/environment_dof_far.webp

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

景深/近模糊

此效果可模拟相机的焦距。它使靠近相机的物体模糊(在远处模糊的相反方向上作用)。它具有 Distance(距离)以及 Transition(过渡)区域(使用世界单位):

../../_images/environment_dof_near.webp

** Amount ** 参数控制模糊量. 对于较大的模糊, 可能需要调整 质量 以避免伪影.

通常使用两种模糊将观众的注意力集中在给定对象上。

../../_images/environment_mixed_blur.webp

备注

当使用 CameraAttributesPhysical 而不是 CameraAttributesPractical 时,景深是根据相机属性的焦距、焦距和光圈自动计算的。

曝光

这会成倍增加相机可见的整体场景亮度。 值越高,场景视觉上越亮。

自动曝光

此功能仅在使用 Forward+ 后端时可用,移动或兼容性后端中不可用。

尽管在大多数情况下,光照和纹理都受到艺术家的严格控制,但 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 时,使用 ISO 中定义的 灵敏度 而不是 EV100 中的曝光值来设置曝光。 典型的 ISO 值在 50 到 3200 之间,值越高,最终曝光越高。 现实生活中,白天摄影一般使用100到800之间的 ISO 值。

参见

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