- 文档
- 教程
- 游戏开发
【免费下载链接】godot-docs
Godot Engine official documentation
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_value | 10.0 | EV100 | 自动曝光允许达到的最大亮度(EV100) |
auto_exposure_min_exposure_value | -8.0 | EV100 | 自动曝光允许达到的最小亮度(EV100) |
exposure_aperture | 16.0 | f-stops | 光圈大小(f 值),默认适合户外白天 |
exposure_shutter_speed | 100.0 | 1/N 秒 | 快门速度(脚本中按秒计) |
frustum_far | 4000.0 | 米 | 覆盖Camera3D.far,内部用于景深计算 |
frustum_focal_length | 35.0 | 毫米 | 镜头焦距,控制 FOV 与景深 |
frustum_focus_distance | 10.0 | 米 | 对焦距离,内部会被钳制 |
frustum_near | 0.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 步:
- 启用项目设置:打开 Project Settings → 启用Advanced开关 → 开启Rendering > Lights And Shadows > Use Physical Light Units→重启编辑器;
- 配置摄像机:为场景中的
Camera3D节点添加CameraAttributesPhysical资源到其Attributes属性(此时该类Exposure段的 Aperture、Shutter Speed 等属性才会生效); - 配置环境:为
WorldEnvironment添加Environment资源,并设置Background Intensity(单位 nits/坎德拉每平方米); - 配置灯光:为
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):
| 对比维度 | CameraAttributesPhysical | CameraAttributesPractical |
|---|---|---|
| 单位体系 | 真实物理单位(毫米焦距、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
相关推荐
Godot CameraAttributes 详解:曝光、自动曝光与景深控制完全指南
Godot CameraAttributes 详解:曝光、自动曝光与景深控制完全指南 本文围绕 Godot 引擎官方文档中的 CameraAttributes
文档教程游戏开发Flet Camera 曝光模式 ExposureMode 完全指南:自动曝光与曝光锁定的实战用法
Flet Camera 曝光模式 ExposureMode 完全指南:自动曝光与曝光锁定的实战用法 本文聚焦 Flet 官方相机扩展包 flet camera
前端跨平台桌面应用移动开发告别自动曝光!react-native-vision-camera动态曝光控制终极指南
告别自动曝光!react native vision camera动态曝光控制终极指南 📸 想要在React Native应用中实现专业级的相机曝光控制吗?r
移动开发音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考