Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

物理灯光和相机单位

为什么使用物理灯光和相机单位?

Godot 对许多适用于光的物理属性(如颜色、能量、相机视野和曝光)使用任意单位(arbitrary units)。 默认情况下,这些属性使用任意单位,因为使用精确的物理单位会带来一些权衡,这对于许多游戏来说是不值得的。 由于 Godot 在默认情况下注重易用性,因此默认情况下禁用物理光单元。

物理单位的优点

如果你的目标是在项目中实现照片级真实感,那么使用现实世界的单位作为基础可以帮助你更轻松地进行调整。 有关现实世界材质、灯光和场景亮度的参考资料可以在`Physically Based <https://physicallybased.info/>`__ 等网站上找到。

当从其他使用物理光单位(如 Blender)的 3D 软件移植场景时,在 Godot 中使用现实世界单位也会很有用。

物理单位的缺点

使用物理光单位的最大缺点是你必须密切注意在给定时间使用的动态范围。 将非常高的光强度与非常低的光强度混合时,可能会遇到浮点精度错误。

实际上,这意味着你必须手动管理曝光设置,以确保场景不会过度曝光或曝光不足。 自动曝光可以帮助你平衡场景中的光线,使其在正常范围内,但它无法恢复因动态范围过高而损失的精度。

使用物理光和相机单位不会自动使你的项目看起来 更好 。 有时,远离现实主义的表现实际上可以使场景在人眼看来更好。 此外,与非物理单位相比,使用物理单位需要更严格的要求。 只有正确设置物理单位以匹配现实世界的参考,才能获得使用物理单位的大多数好处。

备注

物理光单位仅在 3D 渲染中可用,在 2D 渲染中不可用。

设置物理灯光单元

物理光单位可以与物理相机单位分开启用。

要正确启用物理光单位,需要 4 个步骤:

  1. 使用项目设置。

  2. 配置运行。

  3. 配置环境。

  4. 配置 Light3D 节点。

由于物理光和相机单位仅需要少量计算来处理单位转换,因此启用它们不会对 CPU 产生任何明显的性能影响。 然而,在 GPU 方面,物理相机单元目前会强制使用景深。 这对性能有中等影响。 为了减轻这种性能影响,可以在高级项目设置中降低景深质量。

启用项目设置

打开项目设置,启用 高级设置 开关,然后启用 渲染>灯光与阴影>使用物理光线单位 。 重新启动编辑器。

配置相机

警告

当物理光单位启用时,如果你的场景中有一个 WorldEnvironment 节点(即编辑器环境被禁用),你 必须 将一个 CameraAttributes 资源分配给 WorldEnvironment 节点。 否则,如果你有可见的 DirectionalLight3D 节点,3D 编辑器视口将显得极其明亮。

在 Camera3D 节点上,你可以将 CameraAttributes 资源添加到其 Attributes 属性。 该资源用于控制相机的景深和曝光。 使用 CameraAttributesPhysical 时,其焦距属性也用于调整相机的视野(field of view)。

启用物理光单位后,CameraAttributesPhysical 的 Exposure 部分中将提供以下附加属性:

  • Aperture: The size of the aperture of the camera, measured in f-stops. An f-stop is a unitless ratio between the focal length of the camera and the diameter of the aperture. A high aperture setting will result in a smaller aperture which leads to a dimmer image and sharper focus. A low aperture results in a wide aperture which lets in more light resulting in a brighter, less-focused image.

  • Shutter Speed(快门速度): 快门打开和关闭的时间,以 倒数秒 (1/N) 为单位测量。 较低的值将允许更多的光线进入,从而导致图像更亮,而较高的值将允许更少的光线进入,从而导致图像更暗。 当使用脚本获取或设置此属性时,单位为秒,而不是秒的倒数。

  • Sensitivity(灵敏度): 相机传感器的灵敏度,以 ISO 为单位测量。 灵敏度越高,图像越亮。 当启用自动曝光时,这可以用作曝光补偿的方法。 该值加倍将使曝光值(以 EV100 测量)增加 1 级。

  • Multiplier(乘数): 非物理 曝光乘数。 较高的值将增加场景的亮度。 这可用于后期处理调整或制作动画目的。

默认 Aperture 值的16 光圈值适合白天户外使用(即与默认 DirectionalLight3D 一起使用)。 对于室内照明情况,2 到 4 之间的值更合适。

摄影和电影制作中使用的典型快门速度为 1/50(0.02 秒)。 夜间摄影一般使用1/10(0.1秒)左右的快门,而运动摄影则使用1/250(0.004秒)至1/1000(0.001秒)之间的快门速度以减少运动模糊。

在现实生活中,白天户外摄影根据天气情况,感光度通常设置在 50 ISO 到 400 ISO 之间。 较高的值则用于室内或夜间摄影。

备注

与现实生活中的相机不同,Godot 中不会模拟提高 ISO 感光度或降低快门速度(例如可见颗粒或光迹)后产生的不利影响。

请参阅 设置物理相机单位 以了解 CameraAttributesPhysical 属性的描述,这些属性在 使用物理光单位时也可用。

配置环境

警告

默认配置是针对白天户外场景设计的。 夜间和室内场景需要调整 DirectionalLight3D 和 WorldEnvironment 背景强度才能看起来正确。 否则,位置光源(即点光源)在默认强度下几乎不可见。

如果你尚未将 WorldEnvironmentCamera3D 节点添加到当前场景,请立即单击 3D 编辑器视口顶部的 3 个垂直点来添加。 单击 将太阳添加到场景 ,再次打开对话框,然后单击 将环境添加到场景

启用物理光单位后,可以在 Environment 资源中编辑一个新属性:

  • Background Intensity: The background sky's intensity in nits (candelas per square meter). This also affects ambient and reflected light if their respective modes are set to Background. If a custom Background Energy is set, this energy is multiplied by the intensity.

配置灯光节点

在启用物理光单位后,Light3D 节点中有 2 个新属性可用:

  • Intensity: The light's intensity in lux (DirectionalLight3D) or lumens (OmniLight3D/SpotLight3D). If a custom Energy is set, this energy is multiplied by the intensity.

  • Temperature(温度): 光的 色温 以开尔文(Kelvin)为单位定义。 如果设置了自定义 Color ,则该颜色将乘以色温。

OmniLight3D/SpotLight3D 强度

流明是光通量的度量,是光源每单位时间发出的可见光总量。

对于 SpotLight3D,我们假设可见锥体外部的区域被完美的光吸收材料包围。 因此,锥体区域的表观亮度 不会 随着锥体尺寸的增大和减小而改变。

典型的家用灯泡的亮度范围约为 600 流明至 1200 流明。 一支蜡烛的亮度约为 13 流明,而一盏路灯的亮度约为 60000 流明。

DirectionalLight3D 强度

勒克斯是单位面积光通量的度量,等于每平方米一流明。 勒克斯是在给定时间内照射到表面的光量的度量。

使用 DirectionalLight3D 情况下,在晴朗的晴天,阳光直射下的表面可能会接收到大约 100000 勒克斯。 家中的一个典型房间可能接收到大约 50 勒克斯的亮度,而月光照射下的地面可能接收到大约 0.1 勒克斯的亮度。

色温

6500 开尔文是白色。 较高的值会导致较冷(偏蓝)的颜色,而较低的值会导致较暖(偏橙色)的颜色。

阴天的太阳的色温约为 6500 开尔文。 晴天时,太阳的色温在 5500 至 6000 开尔文之间。 在晴朗的日子里,当日出或日落时,太阳的色温约为 1850 开尔文。

色温图,从 1,000 开尔文(左)到 12,500 开尔文(右)

色温图,从 1,000 开尔文(左)到 12,500 开尔文(右)

EnergyColor 等其他 Light3D 属性在出于制作动画目的以及偶尔需要创建具有非真实属性的灯光时仍可编辑。

设置物理相机单位

物理相机单位可以与物理光单位分开启用。

在将 CameraAttributesPhysical 资源添加到 Camera3D 节点的 Camera Attributes 属性后,FOV 等属性将不再可编辑。相反,现在这些属性由 CameraAttributesPhysical 的属性来控制,如焦距和光圈。

CameraAttributesPhysical 在其 Frustum(截锥体)部分提供以下属性:

  • Focus Distance:(焦距距离)相机到将处于焦点的物体的距离,以米为单位测量。内部将被限制为至少比 Focal Length 大 1 毫米。

  • Focal Length:(焦距)相机镜头与相机光圈之间的距离,以毫米为单位测量。控制视野和景深。较大的焦距将导致较小的视野和较窄的景深,意味着较少的物体会处于焦点。较小的焦距将导致较宽的视野和较大的景深,这意味着更多的物体会处于焦点。此属性会覆盖相机的 FOVKeep Aspect 属性,使它们在检视器中为只读。

  • Near/Far:以米为单位的近裁剪和远裁剪距离。这些与 Camera3D 具有同名属性的行为相同。较小的 Near 值允许相机显示非常近的物体,但可能会在远处出现精度(Z 冲突)问题。较大的 Far 值允许相机看到更远的距离,但可能会导致远处出现精度(Z 冲突)问题。

The default focal length of 35 mm corresponds to a wide angle lens. It still results in a field of view that is noticeably narrower compared to the default "practical" vertical FOV of 75 degrees. This is because non-gaming use cases such as filmmaking and photography favor using a narrower field of view for a more cinematic appearance.

在电影制作和摄影中常用的焦距数值有:

  • 鱼眼(超广角):低于 15 毫米。几乎看不到景深。

  • 广角:介于 15 毫米到 50 毫米之间。景深减小。

  • 标准:介于 50 毫米到 100 毫米之间。标准景深。

  • 长焦:大于 100 毫米。增加景深。

就像使用 保持高度(Keep Height)纵横比模式时一样,有效视场取决于视口的纵横比,较宽的纵横比将自动导致更宽的水平视场。

Auto Exposure(自动曝光)部分,还可以根据相机的平均亮度级别启用自动曝光调节,具有以下属性:

  • 最小灵敏度:相机可以达到的最暗亮度,以 EV100 为单位测量。

  • 最大灵敏度:相机可以达到的最亮亮度,以 EV100 为单位测量。

  • 速度:自动曝光效果的速度。影响相机执行自动曝光所需的时间。较高的值可以实现更快的过渡,但根据场景的不同,得到的调整可能会显得分散注意力。

  • 比例:自动曝光效果的比例。影响自动曝光的强度。

EV100 是在 ISO 100 感光度下测量的曝光值(EV)。请参考此表获取在实际生活中常见的 EV100 值。