☰
Godot 引擎 CameraAttributesPhysical 完全指南:基于真实物理单位的曝光、自动曝光与景深控制
2026/10/4 9:41:51 网站建设 项目流程
  • 文档
  • 教程
  • 游戏开发

【免费下载链接】godot-docs

Godot Engine official documentation

项目地址:https://gitcode.com/GitHub_Trending/go/godot-docs
点击查看免费下载

CameraAttributesPhysical是 Godot 引擎中用于以真实物理单位(焦距、光圈、快门速度、ISO 等)控制摄像机渲染效果的资源类,负责**曝光(Exposure)、自动曝光(Auto Exposure)与景深(Depth of Field)三大核心功能。在 Godot 4 中,曝光与景深信息已从Environment资源中拆分出来,独立为CameraAttributes资源体系(见 tutorials/3d/environment_and_post_processing.rst),而CameraAttributesPhysical正是其中面向写实渲染(photorealistic rendering)**的物理单位实现。读完本文,你将掌握该类的全部属性语义与默认值、在WorldEnvironment与Camera3D中的正确挂载方式、室内外场景的调参基准,以及其与CameraAttributesPractical的取舍。

类层次与核心定位

从 classes/class_cameraattributesphysical.rst 可以确认其继承链:

CameraAttributesPhysical < CameraAttributes < Resource < RefCounted < Object

基类 CameraAttributes 是一个纯虚类,由CameraAttributesPhysical与CameraAttributesPractical两个子类继承(见 classes/class_cameraattributes.rst)。CameraAttributes本身已提供以下公共属性:auto_exposure_enabled、auto_exposure_scale、auto_exposure_speed、exposure_multiplier、exposure_sensitivity,这些属性同样作用于CameraAttributesPhysical。

CameraAttributesPhysical在三种使用场景中行为不同(见 classes/class_cameraattributesphysical.rst):

  • 挂在WorldEnvironment上:为所有未自带CameraAttributes的摄像机(包括编辑器摄像机)提供曝光、自动曝光与景深的默认设置;
  • 挂在Camera3D上:覆盖WorldEnvironment中设置的任何CameraAttributes,同时覆盖该Camera3D的far、near、fov、keep_aspect四个属性——也就是说,挂上物理摄像机资源后,这些属性在检视面板中会变为只读;
  • 用于VoxelGI或LightmapGI:仅使用其中的曝光设置,不参与景深计算。

从源码结构看(CameraAttributes是Resource的子类),该资源天然支持保存为.tres文件并在多场景间复用,这是引擎对"资源化配置"的一贯设计。

渲染方法限制(务必先确认)

文档中明确标注了两条硬性限制(见 classes/class_cameraattributesphysical.rst):

  • 景深模糊仅在 Forward+ 与 Mobile 渲染方法中可用,Compatibility 不支持;
  • 自动曝光仅在 Forward+ 渲染方法中可用,Mobile 与 Compatibility 均不支持。

如果项目使用 Compatibility 渲染器,请直接忽略景深与自动曝光相关的属性,只关注曝光部分。

属性总览

CameraAttributesPhysical共定义了 8 个 float 属性(见 classes/class_cameraattributesphysical.rst),按功能可分为"曝光相关"与"视锥/景深相关"两组:

属性默认值单位/语义说明
auto_exposure_max_exposure_value10.0EV100自动曝光允许达到的最大亮度(EV100)
auto_exposure_min_exposure_value-8.0EV100自动曝光允许达到的最小亮度(EV100)
exposure_aperture16.0f-stops光圈大小(f 值),默认适合户外白天
exposure_shutter_speed100.01/N 秒快门速度(脚本中按秒计)
frustum_far4000.0米覆盖Camera3D.far,内部用于景深计算
frustum_focal_length35.0毫米镜头焦距,控制 FOV 与景深
frustum_focus_distance10.0米对焦距离,内部会被钳制
frustum_near0.05米覆盖Camera3D.near,内部用于景深计算

方法侧只有一个只读方法:get_fov()(见 classes/class_cameraattributesphysical.rst),用于返回与当前frustum_focal_length对应的垂直视野角度,该值在焦距每次改变时由引擎内部自动重算。

曝光相关属性详解

exposure_aperture:光圈(f-stops)

光圈大小以 f 值(f-stops)度量——它是镜头焦距与光圈直径之间无量纲的比值。语义为(见 classes/class_cameraattributesphysical.rst):

  • 高光圈值→ 更小的实际光圈开口 → 画面更暗、景深更锐利(清晰范围更大);
  • 低光圈值→ 更宽的光圈开口 → 进光更多、画面更亮、背景虚化更强。

默认16.0适合户外白天场景(配合默认DirectionalLight3D使用);室内灯光环境下建议取 2~4。

该属性仅在项目设置ProjectSettings.rendering/lights_and_shadows/use_physical_light_units启用后才生效。这是整个物理光照体系的总开关,启用后需要重启编辑器。

exposure_shutter_speed:快门速度

快门开合时间按1 / shutter_speed秒评估(见 classes/class_cameraattributesphysical.rst):

  • 值越大→ 曝光时间越短 → 进光越少 → 画面越暗;
  • 值越小→ 曝光时间越长 → 进光越多 → 画面越亮。

默认100.0。注意脚本单位差异:在检视面板中以"每秒倒数(1/N)"显示,而通过脚本 get/set 时单位是秒(见 tutorials/3d/physical_light_and_camera_units.rst)。例如set_shutter_speed(0.02)等价于面板中的 1/50 秒。典型参考值:电影/摄影常用 1/50(0.02 秒),夜间摄影约 1/10(0.1 秒),体育摄影用 1/250(0.004 秒)~1/1000(0.001 秒)以减少运动模糊。

auto_exposure_min/max_exposure_value:自动曝光的 EV100 下限与上限

这两个属性决定自动曝光计算时对场景平均亮度的钳制范围(单位 EV100,即 ISO 100 下的曝光值):

  • auto_exposure_max_exposure_value(默认10.0):场景平均亮度计算时颜色值会被钳制到"至少"此值,限制自动曝光不能低于某亮度,即存在一个临界点,超过后场景保持明亮(见 classes/class_cameraattributesphysical.rst);
  • auto_exposure_min_exposure_value(默认-8.0):颜色值被钳制到"至少"此值,限制自动曝光不能高于某亮度,即存在临界点,超过后场景保持黑暗(见 classes/class_cameraattributesphysical.rst)。

名称中的 min/max 指的是"亮度范围边界",语义方向与直觉相反,调参时需留意。启用自动曝光前,记得先在基类CameraAttributes上开启auto_exposure_enabled = true。

视锥 / 景深相关属性详解

物理摄像机模式下,视野与景深全部由焦距、对焦距离与近远裁剪面推导,因此Camera3D的 FOV 与 Keep Aspect 会被锁定为只读(见 tutorials/3d/environment_and_post_processing.rst)。

frustum_focal_length:焦距(毫米)

镜头镜片与光圈之间的距离,单位毫米,同时控制视野与景深(见 classes/class_cameraattributesphysical.rst):

  • 焦距越大→ 视野越小(长焦)、景深越窄 → 清晰物体更少;
  • 焦距越小→ 视野越宽(广角)、景深越大 → 清晰物体更多。

默认35.0mm 对应广角镜头,但生成的垂直视野仍明显窄于默认"实用"模式的 75° 垂直 FOV——因为影视与摄影行业偏好较窄视野以获得更电影化的观感(见 tutorials/3d/physical_light_and_camera_units.rst)。挂到Camera3D.attributes上时,它覆盖Camera3D.fov与Camera3D.keep_aspect。

行业常用焦距参考(见 tutorials/3d/physical_light_and_camera_units.rst):

  • 鱼眼(超广角):低于 15 mm,几乎看不到景深;
  • 广角:15~50 mm,景深较浅;
  • 标准:50~100 mm,标准景深;
  • 长焦:大于 100 mm,景深较深。

frustum_focus_distance:对焦距离(米)

镜头到被对焦物体的距离,单位米(见 classes/class_cameraattributesphysical.rst)。内部会被钳制为至少比frustum_focal_length大 1 毫米,防止出现对焦距离小于焦距的物理悖论。默认10.0米。

frustum_near / frustum_far:近远裁剪面覆盖

分别覆盖Camera3D.near(默认0.05)与Camera3D.far(默认4000.0),单位米(见 classes/class_cameraattributesphysical.rst 与 classes/class_cameraattributesphysical.rst)。行为与Camera3D同名属性一致:更小的 Near 允许显示极近物体,更大的 Far 允许看到更远,但两者都会在远处引入精度(Z-fighting)问题。它们也被引擎内部用于景深计算。

get_fov()

返回与当前frustum_focal_length对应的垂直视野角度(见 classes/class_cameraattributesphysical.rst)。该值在焦距每次变化时由内部自动计算并缓存,可通过脚本读取以获取等效 FOV,例如用于 UI 显示或与实用模式参数做换算。

与"Keep Height"宽高比模式类似,实际视野还取决于视口宽高比——更宽的宽高比会自动产生更宽的水平视野(见 tutorials/3d/physical_light_and_camera_units.rst)。

完整启用流程(编辑器实操)

按 tutorials/3d/physical_light_and_camera_units.rst 的指引,使用物理光照/摄像机单位共需 4 步:

  1. 启用项目设置:打开 Project Settings → 启用Advanced开关 → 开启Rendering > Lights And Shadows > Use Physical Light Units→重启编辑器;
  2. 配置摄像机:为场景中的Camera3D节点添加CameraAttributesPhysical资源到其Attributes属性(此时该类Exposure段的 Aperture、Shutter Speed 等属性才会生效);
  3. 配置环境:为WorldEnvironment添加Environment资源,并设置Background Intensity(单位 nits/坎德拉每平方米);
  4. 配置灯光:为Light3D节点设置Intensity(DirectionalLight3D 用 lux,OmniLight3D/SpotLight3D/AreaLight3D 用 lumens)与Temperature(色温,单位 Kelvin)。

关键警告:启用物理光照单位后,如果场景中存在WorldEnvironment且编辑器的默认环境被禁用,则必须为该WorldEnvironment节点分配CameraAttributes资源;否则在场景中可见DirectionalLight3D时,3D 编辑器视口会异常明亮(见 tutorials/3d/physical_light_and_camera_units.rst)。

关于性能:启用物理单位本身在 CPU 侧几乎没有开销(只有少量单位换算);但在 GPU 侧,物理摄像机单位会强制启用景深,带来中等程度的性能开销,可通过项目设置中的高级选项降低景深质量来缓解(见 tutorials/3d/physical_light_and_camera_units.rst)。

室内外场景调参基准

文档给出的默认值全部面向户外白天场景,室内与夜间需按以下基准调整(见 tutorials/3d/physical_light_and_camera_units.rst):

  • 光圈(Aperture):户外白天默认16.0合适;室内灯光取 2~4;
  • 快门速度(Shutter Speed):影视通用 1/50(0.02 s),夜间约 1/10(0.1 s),体育摄影 1/250~1/1000;
  • 感光度(ISO,即基类exposure_sensitivity):户外白天通常 50~400,室内/夜间用更高值。自动曝光开启时,ISO 翻倍 = 曝光值(EV100)增加 1 档,可作为曝光补偿手段。

同时注意两点(见 tutorials/3d/physical_light_and_camera_units.rst):

  • 与真实相机不同,提高 ISO 带来的噪点、降低快门带来的拖影等副作用 Godot 不会模拟;
  • 物理单位不会自动让画面"更好看",需要严格对照真实世界参考值设置才能发挥优势;且高动态范围下需人工管理曝光以避免浮点精度问题(见 tutorials/3d/physical_light_and_camera_units.rst)。

自动曝光的设置与效果

开启自动曝光后,渲染器会逐帧评估场景平均亮度并自动调节曝光,常用于"室内暗 + 室外亮"的过渡场景模拟人眼/相机的适应(见 tutorials/3d/environment_and_post_processing.rst)。核心属性组合:

  • 基类auto_exposure_enabled(开启开关)、auto_exposure_scale(强度,默认0.4)、auto_exposure_speed(适应速度,默认0.5)、exposure_sensitivity(ISO 基准,默认100.0)、exposure_multiplier(曝光倍数,默认1.0);
  • 本类auto_exposure_min/max_exposure_value(EV100 钳制范围,默认-8.0/10.0)。

需要留意两点成本:逐帧亮度评估有中等性能开销,建议仅在必要时开启(见 tutorials/3d/environment_and_post_processing.rst);且自动曝光仅支持 Forward+ 渲染器。启用后,过曝像素会向 Glow 缓冲区溢出,形成摄影中典型的泛光(bloom)效果。

与 CameraAttributesPractical 的取舍

两种CameraAttributes子类功能等价但配置单位不同(见 tutorials/3d/environment_and_post_processing.rst):

对比维度CameraAttributesPhysicalCameraAttributesPractical
单位体系真实物理单位(毫米焦距、f-stops 光圈、ISO、EV100)任意/实用单位
视野控制通过frustum_focal_length推导 FOV,锁定Camera3D.fov/keep_aspect使用dof_blur_*系列属性与 ISO 灵敏度,直接易用
景深计算由焦距 + 对焦距离 + 光圈自动计算手动设置近/远模糊距离、过渡区与模糊量(dof_blur_near/far_distance、dof_blur_near/far_transition、dof_blur_amount)
适用场景写实渲染、影视/摄影向、从 Blender 等 DCC 移植场景大多数游戏默认场景

官方明确建议:不确定选哪种时,默认用CameraAttributesPractical。景深模糊效果本身对比如下(无论物理还是实用模式,效果渲染路径一致):

注意事项汇总

  • 景深模糊不支持透明背景视口(Viewport.transparent_bg = true时不生效,见 classes/class_cameraattributespractical.rst);
  • 将CameraAttributesPhysical挂到Camera3D会锁定 FOV 与宽高比调整;若挂在WorldEnvironment上则不会覆盖场景中任何Camera3D;
  • 推荐优先把CameraAttributes挂到Camera3D节点而非WorldEnvironment——这样可以避免景深效果在 3D 编辑器视口中持续显示,除非正在预览该摄像机(见 tutorials/3d/environment_and_post_processing.rst);
  • 物理光照单位仅适用于3D 渲染,不适用于 2D;
  • 所有属性均可通过脚本的set_/get_访问器读写(如set_aperture、set_shutter_speed、set_focal_length、set_focus_distance、set_far、set_near),为动态调节(如对焦动画、过场镜头)提供了完整 API 支持。

如需进一步深入物理单位的完整配置链路(灯光强度、色温、背景强度等),可继续阅读仓库中的 tutorials/3d/physical_light_and_camera_units.rst 与 tutorials/3d/environment_and_post_processing.rst;类定义原文见 classes/class_cameraattributesphysical.rst,其基类与姊妹类分别为 classes/class_cameraattributes.rst 与 classes/class_cameraattributespractical.rst。

  • 文档
  • 教程
  • 游戏开发

【免费下载链接】godot-docs

Godot Engine official documentation

项目地址:https://gitcode.com/GitHub_Trending/go/godot-docs
点击查看免费下载
上一篇:fastai模型安全:对抗攻击防御与鲁棒性增强终极指南
下一篇:Newton几何模块完全指南:碰撞检测、SDF与接触优化的核心技术

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询