123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- .. _doc_physical_light_and_camera_units:
- Physical light and camera units
- ===============================
- Why use physical light and camera units?
- ----------------------------------------
- Godot uses arbitrary units for many physical properties that apply to light like
- color, energy, camera field of view, and exposure. By default, these properties
- use arbitrary units, because using accurate physical units comes with a few
- tradeoffs that aren't worth it for many games. As Godot favors ease of use by
- default, physical light units are disabled by default.
- Advantages of physical units
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- If you aim for photorealism in your project, using real world units as a basis
- can help make things easier to adjust. References for real world materials,
- lights and scene brightness are wildly available on websites such as
- `Physically Based <https://physicallybased.info/>`__.
- Using real world units in Godot can also be useful when porting a scene from
- other 3D software that uses physical light units (such as Blender).
- Disadvantages of physical units
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The biggest disadvantage of using physical light units is you will have to pay
- close attention to the dynamic range in use at a given time. You can run into
- floating point precision errors when mixing very high light intensities with
- very low light intensities.
- In practice, this means that you will have to manually manage your exposure
- settings to ensure that you aren't over-exposing or under-exposing your scene
- too much. Auto-exposure can help you balance the light in a scene to bring it
- into a normal range, but it can't recover lost precision from a dynamic range
- that is too high.
- Using physical light and camera units will not automatically make your project
- look *better*. Sometimes, moving away from realism can actually make a scene
- look better to the human eye. Also, using physical units requires a greater
- amount of rigor compared to non-physical units. Most benefits of physical units
- can only be obtained if the units are correctly set to match real world
- reference.
- .. note::
- Physical light units are only available in 3D rendering, not 2D.
- Setting up physical light units
- -------------------------------
- Physical light units can be enabled separately from physical camera units.
- To enable physical light units correctly, there are 4 steps required:
- 1. Enable the project setting.
- 2. Configure the camera.
- 3. Configure the environment.
- 4. Configure Light3D nodes.
- Since physical light and camera units only require a handful of calculations to
- handle unit conversion, enabling them doesn't have any noticeable performance
- impact on the CPU. However, on the GPU side, physical camera units currently
- enforce depth of field. This has a moderate performance impact. To alleviate
- this performance impact, depth of field quality can be decreased in the advanced
- Project Settings.
- Enable the project setting
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- Open the Project Settings, enable the **Advanced** toggle then enable
- **Rendering > Lights And Shadows > Use Physical Light Units**. Restart the editor.
- Configure the camera
- ^^^^^^^^^^^^^^^^^^^^
- .. warning::
- When physical light units are enabled and if you have a WorldEnvironment
- node in your scene (i.e. the editor Environment is disabled), you **must**
- have a :ref:`class_CameraAttributes` resource assigned to the
- WorldEnvironment node. Otherwise, the 3D editor viewport will appear
- extremely bright if you have a visible DirectionalLight3D node.
- On the Camera3D node, you can add a :ref:`class_CameraAttributes`
- resource to its **Attributes** property. This resource is used to control the
- camera's depth of field and exposure. When using
- :ref:`class_CameraAttributesPhysical`, its focal length property is also used to
- adjust the camera's field of view.
- When physical light units are enabled, the following additional properties
- become available in CameraAttributesPhysical's **Exposure** section:
- - **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:** The time for shutter to open and close, measured in
- *inverse seconds* (``1/N``). A lower value will let in more light leading to a
- brighter image, while a higher value will let in less light leading to a
- darker image. *When getting or setting this property with a script, the unit
- is in seconds instead of inverse seconds.*
- - **Sensitivity:** The sensitivity of camera sensors, measured in ISO. A higher
- sensitivity results in a brighter image. When auto exposure is enabled, this
- can be used as a method of exposure compensation. Doubling the value will
- increase the exposure value (measured in EV100) by 1 stop.
- - **Multiplier:** A *non-physical* exposure multiplier. Higher values will
- increase the scene's brightness. This can be used for post-processing
- adjustments or for animation purposes.
- The default **Aperture** value of 16 f-stops is appropriate for outdoors at
- daytime (i.e. for use with a default DirectionalLight3D). For indoor lighting, a
- value between 2 and 4 is more appropriate.
- Typical shutter speed used in photography and movie production is 1/50 (0.02
- seconds). Night-time photography generally uses a shutter around 1/10 (0.1
- seconds), while sports photography uses a shutter speed between 1/250 (0.004
- seconds) and 1/1000 (0.001 seconds) to reduce motion blur.
- In real life, sensitivity is usually set between 50 ISO and 400 ISO for daytime
- outdoor photography depending on weather conditions. Higher values are used for
- indoor or night-time photography.
- .. note::
- Unlike real life cameras, the adverse effects of increasing ISO sensitivity
- or decreasing shutter speed (such as visible grain or light trails) are not
- simulated in Godot.
- See :ref:`doc_physical_light_and_camera_units_setting_up_physical_camera_units`
- for a description of CameraAttributesPhysical properties that are also available when
- **not** using physical light units.
- Configure the environment
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- .. warning::
- The default configuration is designed for daytime outdoor scenes. Night-time
- and indoor scenes will need adjustments to the DirectionalLight3D and
- WorldEnvironment background intensity to look correct. Otherwise, positional
- lights will be barely visible at their default intensity.
- If you haven't added a :ref:`class_WorldEnvironment` and :ref:`class_Camera3D`
- node to the current scene yet, do so now by clicking the 3 vertical dots at the
- top of the 3D editor viewport. Click **Add Sun to Scene**, open the dialog again
- then click **Add Environment to Scene**.
- After enabling physical light units, a new property becomes available to edit in
- the :ref:`class_Environment` resource:
- - **Background Intensity:** The background sky's intensity in
- `nits <https://en.wikipedia.org/wiki/Candela_per_square_metre>`__
- (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.
- Configure the light nodes
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- After enabling physical light units, 2 new properties become available in Light3D nodes:
- - **Intensity:** The light's intensity in `lux
- <https://en.wikipedia.org/wiki/Lux>`__ (DirectionalLight3D) or
- `lumens <https://en.wikipedia.org/wiki/Lumen_(unit)>`__ (OmniLight3D/SpotLight3D).
- If a custom **Energy** is set, this energy is multiplied by the intensity.
- - **Temperature:** The light's *color temperature* defined in Kelvin.
- If a custom **Color** is set, this color is multiplied by the color temperature.
- **OmniLight3D/SpotLight3D intensity**
- Lumens are a measure of luminous flux, which is the total amount of visible
- light emitted by a light source per unit of time.
- For SpotLight3Ds, we assume that the area outside the visible cone is surrounded
- by a perfect light absorbing material. Accordingly, the apparent brightness of
- the cone area does *not* change as the cone increases and decreases in size.
- A typical household lightbulb can range from around 600 lumens to 1200 lumens.
- A candle is about 13 lumens, while a streetlight can be approximately 60000 lumens.
- **DirectionalLight3D intensity**
- Lux is a measure pf luminous flux per unit area, it is equal to one lumen per
- square metre. Lux is the measure of how much light hits a surface at a given
- time.
- With DirectionalLight3D, on a clear sunny day, a surface in direct sunlight may
- receive approximately 100000 lux. A typical room in a home may receive
- approximately 50 lux, while the moonlit ground may receive approximately 0.1
- lux.
- **Color temperature**
- 6500 Kelvin is white. Higher values result in colder (bluer) colors, while lower
- values result in warmer (more orange) colors.
- The sun on a cloudy day is approximately 6500 Kelvin. On a clear day, the sun is
- between 5500 to 6000 Kelvin. On a clear day at sunrise or sunset, the sun ranges
- to around 1850 Kelvin.
- .. figure:: img/physical_light_units_color_temperature_chart.webp
- :align: center
- :alt: Color temperature chart from 1,000 Kelvin (left) to 12,500 Kelvin (right)
- Color temperature chart from 1,000 Kelvin (left) to 12,500 Kelvin (right)
- Other Light3D properties such as **Energy** and **Color** remain editable for
- animation purposes, and when you occasionally need to create lights with
- non-realistic properties.
- .. _doc_physical_light_and_camera_units_setting_up_physical_camera_units:
- Setting up physical camera units
- --------------------------------
- Physical camera units can be enabled separately from physical light units.
- After adding a :ref:`class_CameraAttributesPhysical` resource to the **Camera
- Attributes** property of a Camera3D nodes, some properties such as **FOV** will
- no longer be editable. Instead, these properties are now governed by the
- CameraAttributesPhysical's properties, such as focal length and aperture.
- CameraAttributesPhysical offers the following properties in its **Frustum** section:
- - **Focus Distance:** Distance from camera of object that will be in focus,
- measured in meters. Internally, this will be clamped to be at least 1
- millimeter larger than the **Focal Length**.
- - **Focal Length:** Distance between camera lens and camera aperture, measured
- in millimeters. Controls field of view and depth of field. A larger focal
- length will result in a smaller field of view and a narrower depth of field
- meaning fewer objects will be in focus. A smaller focal length will result in
- a wider field of view and a larger depth of field, which means more objects will be
- in focus. This property overrides the Camera3D's **FOV** and **Keep Aspect**
- properties, making them read-only in the inspector.
- - **Near/Far:** The near and far clip distances in meters. These behave the same
- as the Camera3D properties of the same name. Lower **Near** values allow the
- camera to display objects that are very close, at the cost of potential
- precision (Z-fighting) issues in the distance. Higher **Far** values allow the
- camera to see further away, also at the cost of potential precision
- (Z-fighting) issues in the distance.
- 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.
- Common focal length values used in filmmaking and photography are:
- - **Fisheye (ultrawide angle):** Below 15 mm. Nearly no depth of field visible.
- - **Wide angle:** Between 15 mm and 50 mm. Reduced depth of field.
- - **Standard:** Between 50 mm and 100 mm. Standard depth of field.
- - **Telephoto:** Greater than 100 mm. Increased depth of field.
- Like when using the **Keep Height** aspect mode, the effective field of view
- depends on the viewport's aspect ratio, with wider aspect ratios automatically
- resulting in a wider *horizontal* field of view.
- Automatic exposure adjustment based on the camera's average brightness level can
- also be enabled in the **Auto Exposure** section, with the following properties:
- - **Min Sensitivity:** The darkest brightness the camera is allowed to get to,
- measured in EV100.
- - **Max Sensitivity:** The brightest the camera is allowed to get to, measured in EV100.
- - **Speed:** The speed of the auto exposure effect. Affects the time needed for
- the camera to perform auto exposure. Higher values allow for faster
- transitions, but the resulting adjustments may look distracting depending on
- the scene.
- - **Scale:** The scale of the auto exposure effect. Affects the intensity of
- auto exposure.
- EV100 is an exposure value (EV) measured at an ISO sensitivity of 100. See
- `this table <https://en.wikipedia.org/wiki/Exposure_value#Tabulated_exposure_values>`__
- for common EV100 values found in real life.
|