环境和后处理

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

环境

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

摄像机节点

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

../../_images/environment_camera.png

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

世界环境节点

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

../../_images/environment_world.png

添加的任何环境都具有比默认环境更高的优先级(如下所述). 这意味着它可以在每个场景的基础上被覆盖, 这使它非常有用.

默认环境

可以设置默认环境, 当没有将环境设置为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

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

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

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

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

../../_images/environment_fog_transmission.png

品质图

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

从电影和游戏行业中使用的标准曲线的简短列表中选择将应用于场景的色调映射曲线. 色调映射可以使亮区和暗区更均匀, 即使结果不那么强. 色调映射选项包括:

  • 模式: 色调映射模式, 可以是线性,Reindhart,Filmic或Aces.

  • 曝光: 色调映射曝光, 模拟随时间接收的光量.

  • White: 色调映射白色, 模拟缩放白色的位置(默认为1.0).

自动曝光(HDR)

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

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

../../_images/environment_hdr_autoexp.gif

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

通过将自动曝光与* Glow 后期处理相结合(更多内容如下), 超过色调图 * ** 的像素将会流向发光缓冲区, 从而在摄影中创造典型的绽放效果.

../../_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 ** 参数控制模糊量. 对于较大的模糊, 可能需要调整 质量 以避免伪影.

景深/近模糊

此效果可模拟高端相机的焦距. 它使靠近相机的物体模糊(在远处模糊的相反方向上作用). 它有一个 ** ** 距离 , ** 过渡 区域(世界单位):

../../_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. Bloom效果的值设置大于0. 随着它的增加, 它会以更高的数量将整个屏幕发送到辉光处理器.

../../_images/environment_glow_bloom.png

两者都会导致光从较亮的区域开始流血.

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

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

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

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

  • 添加剂(Additive) 是最强的, 因为它只是在图像上添加了发光效果而不涉及混合. 一般来说, 它太强大而无法使用, 但在低强度Bloom下可以看起来很好(产生梦幻般的效果).

  • 屏幕 是默认值. 它确保发光永远不会比自身更亮, 并且可以很好地作为一个整体.

  • Softlight 是最弱的一种, 只会在物体周围产生微妙的色彩干扰. 此模式在黑暗场景中效果最佳.

  • 替换 可用于模糊整个屏幕或调试效果. 它只显示没有下图的发光效果.

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

../../_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