环境和后期处理

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

环境

Environment资源存储控制渲染环境所需的所有信息. 这包括天空, 环境照明, 色调映射, 效果和调整. 它本身什么都不做, 但是一旦在以下位置之一中按优先级顺序使用它就会启用:

摄像机节点

环境可以设置为相机. 它将优先于任何其他设置.

../../_images/environment_camera.png

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

世界环境节点

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

../../_images/environment_world.png

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

默认环境

可以设置默认环境, 当没有将环境设置为Camera或WorldEnvironment时, 该环境可用作后备环境. 只需前往项目设置 ->渲染 ->环境:

../../_images/environment_default.png

从项目管理器创建的新项目带有默认环境(default_env.tres). 如果需要创建一个, 请将其保存到磁盘, 然后再在此处引用它.

环境可选项

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

背景

“背景(Background) “部分包含有关如何填充背景的设置(屏幕中未绘制对象的部分). 在Godot 3.0中, 背景不仅用于显示图像或颜色, 还可以改变物体受环境光和反射光影响的方式.

../../_images/environment_background1.png

设置背景的方法有很多种:

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

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

  • 天空(Sky) 可让您定义全景天空(360 度球体纹理)或程序式天空(具有渐变和可选太阳的简单天空)。物体将反射它并从中吸收环境光。

  • ** 颜色+天空(Color + Sky )** 可让您定义天空(如上所示), 但使用恒定颜色值绘制背景. 天空仅用于反射和环境光.

环境光

环境(如此处定义)是一种光, 它影响具有相同强度的每个几何体. 它是全局的, 独立于可能添加到场景中的灯光.

有两种类型的环境光: 环境色 (恒定颜色乘以材质反射), 然后从 天空 获得一个(如前所述, 但天空需要设置为背景) 启用).

../../_images/environment_ambient.png

天空(Sky) 设置为背景时, 可以使用 天空贡献度(Sky Contribution) 设置在环境颜色(ambient color)和天空(sky)之间进行混合(为方便起见, 此值默认为1.0, 因此只有天空会影响对象).

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

../../_images/environment_ambient2.png

最后有一个 能量(Energy) 设置, 这是一个乘数, 在使用HDR时非常有用.

一般来说, 环境光应该只用于简单的场景和大型外景, 或是出于性能考虑(环境光消耗少), 但它不能提供最好的光照质量. 最好是用ReflectionProbe或GIProbe生成环境光, 这样可以更忠实地模拟间接光的传播方式. 下面是使用平面环境色和GIProbe在质量上的比较:

../../_images/environment_ambient_comparison.png

使用上述方法之一, 物体获得恒定的环境照明, 由来自探头的环境光代替.

雾, 就像在现实生活中一样, 使远处的物体逐渐消失成均匀的颜色. 物理效果实际上非常复杂, 但Godot提供了一个很好的近似. Godot有两种雾:

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

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

../../_images/environment_fog_depth_height.png

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

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

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

第二个是 ** Transmit Enabled ** , 模拟更逼真的透光率. 在实践中, 它使光线在雾中更加突出.

../../_images/environment_fog_transmission.png

色调映射

此选项仅在使用GLES3后端时适用.

选择应用于场景的色调映射曲线,选项为电影和游戏工业中所使用的标准曲线。除“Linear”(线性)外的色调映射运算子可以使亮部和暗部更均匀,同时防止高亮区域受到裁剪。

色调映射选项有:

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

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

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

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

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

    • ACES:*已废弃(会在 Godot 4.0 中移除)。*与 ACES 的行为类似,但不会随着灯光的变亮而降低饱和度(真实度更低)。推荐使用 ACES Fitted,不推荐 ACES。

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

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

自动曝光(HDR)

此选项仅在使用GLES3后端时适用.

尽管在大多数情况下, 照明和纹理都受到艺术家的严格控制, 但Godot通过自动曝光机制支持简单的高动态范围实现. 当将内部区域与低光和户外相结合时, 这通常用于真实性. 自动曝光模拟相机(或眼睛), 以适应明暗位置和不同光量.

../../_images/environment_hdr_autoexp.gif

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

通过将自动曝光与 Glow 后处理相结合(更多内容如下),超过色调映射 White 的像素将会逸出至辉光缓冲区,从而在摄影中创造典型的泛光效果。

../../_images/environment_hdr_bloom.png

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

../../_images/environment_hdr.png

  • 比例: 用于缩放照明的值. 较亮的值会产生较亮的图像, 较小的值会产生较暗的图像.

  • ** Min Luma:** 自动曝光旨在调整的最小亮度. 亮度是屏幕所有像素中光线的平均值.

  • ** Max Luma:** 自动曝光旨在调整的最大亮度.

  • 速度: 亮度校正的速度. 值越高, 发生的校正越快.

中后期处理效果

环境支持大量广泛使用的中间和后期处理效果.

屏幕空间反射(SSR)

此选项仅在使用GLES3后端时适用.

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

../../_images/environment_ssr.png

另一个优点(即使只启用最小), 它是实时工作(而其他类型的反射是预先计算的). 这可以用来使人物, 汽车等在移动时反射到周围的表面上.

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

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

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

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

  • ** Depth Tolerance ** 可用于屏幕空间射线对间隙的容差. 值越大, 忽略的差距就越大.

  • 粗糙度 将应用屏幕空间模糊来近似具有此材质特征的对象的粗糙度.

请记住, 屏幕空间反射仅适用于反射不透明几何体. 透明对象无法反映.

屏幕空间环境遮挡(SSAO)

此选项仅在使用GLES3后端时适用.

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

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

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

../../_images/environment_ssao.png

启用此效果, 打开灯光并且无法欣赏它是一个常见的错误. 这是因为SSAO仅作用于* ambient * light, 而不是直接光.

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

当与真正的间接光源结合时,SSAO看起来最好, 比如GIProbe:

../../_images/environment_ssao2.png

可以使用以下几个参数调整SSAO:

../../_images/environment_ssao_parameters.png

  • 半径/强度: 要控制遮挡的半径或强度, 可以使用这两个参数. 半径是世界(公制)单位.

  • ** Radius2 / Intensity2:** 可以使用辅助半径/强度. 结合大半径和小半径AO通常效果很好.

  • 偏置(Bias):这可以通过调整来解决自我遮挡问题,但默认情况下通常效果不错。

  • 光线影响(Light Affect): SSAO仅影响环境光线, 但增加此滑块可能会影响直射光线. 有些艺术家喜欢这种效果.

  • ** Ao通道影响(Ao Channel Affect):** 如果使用零值, 则仅将材质的AO纹理用于环境光遮挡; SSAO将不适用. 大于0的值会在不同程度上将AO纹理乘以SSAO效果. 这不会影响没有AO纹理的材料.

  • 质量(Quality): 根据质量,SSAO将针对每个像素对球体进行更多采样. 高品质仅适用于现代GPU.

  • 模糊(Blur): 使用的模糊内核类型. 1x1内核是一个简单的模糊, 可以更好地保留局部细节, 但效率不高(通常在上面的高质量设置下效果更好), 而3x3会更好地柔化图像(有一点像抖动效果)但不保留局部 细节也是如此.

  • 边缘清晰度(Edge Sharpness) : 这可用于保持边缘的清晰度(避免折痕处没有AO的区域).

景深/远模糊

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

../../_images/environment_dof_far.png

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

景深/近模糊

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

../../_images/environment_dof_near.png

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

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

../../_images/environment_mixed_blur.png

辉光

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

../../_images/environment_glow1.png

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

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

../../_images/environment_glow_threshold.png

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

../../_images/environment_glow_bloom.png

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

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

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

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

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

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

  • Screen 确保辉光永远不会比自己更亮,它作为一个周围的方式将非常好。

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

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

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

../../_images/environment_glow_layers.png

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

../../_images/environment_glow_layers2.png

最后, 随着最高的图层在对微小模糊图像的拉伸中被创建, 我们可能会看到一些块状模糊. 启用 Bicubic Upscaling 可以以最低的性能成本拜托它. 注意这只有在使用GLES3时才有效.

../../_images/environment_glow_bicubic.png

调整

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

../../_images/environment_adjustments.png

第一个是能够改变典型的亮度, 对比度和饱和度:

../../_images/environment_adjustments_bcs.png

第二种是通过提供颜色校正梯度. 如下所示的常规黑色到白色渐变将不起作用:

../../_images/environment_adjusments_default_gradient.png

但是创建自定义的会允许将每个通道映射到不同的颜色:

../../_images/environment_adjusments_custom_gradient.png