Physically Based Sky
Physically Based Sky simulates a spherical planet with a two-part atmosphere that has an exponentially decreasing density based on its altitude. This means that the higher you go above sea level, the less dense the atmosphere is. For information on the implementation for this sky type, see Implementation details.
The simulation runs as a pre-process, meaning that it runs once instead of on every frame. The simulation evaluates the atmospheric scattering of all combinations of light and view angles and then stores the results in several 3D Textures, which Unity resamples at runtime. The pre-computation is Scene-agnostic, and only depends on the settings of the Physically Based Sky.
The Physically Based Sky’s atmosphere has two types of particles:
- Air particles with Rayleigh scattering.
- Aerosol particles with anisotropic Mie scattering. You can use aerosols to model pollution, height fog, or mist.
You can use Physically Based Sky to simulate the sky during both daytime and night-time. You can change the time of day at runtime without reducing performance. The following images display a Physically Based Sky in Unity's Fontainebleau demo. For more information about the Fontainebleau demo, and for instructions on how to download and use the demo yourself, see https://github.com/Unity-Technologies/FontainebleauDemo. The Fontainebleau demo only uses Physically Based Sky for its daytime setup in version 2019.3.
Using Physically Based Sky
Physically Based Sky uses the Volume framework. To enable and modify Physically Based Sky properties, add a Physically Based Sky override to a Volume in your Scene. To add Physically Based Sky to a Volume:
- In the Scene or Hierarchy view, select a GameObject that contains a Volume component to view it in the Inspector.
- In the Inspector, go to Add Override > Sky and select Physically Based Sky.
- If the Scene doesn't contain a Directional Light, create one (menu: GameObject > Light > Directional Light). For physically correct results, set the Light's intensity to 130,000 lux.
Next, set the Volume to use Physically Based Sky. The Visual Environment override controls which type of sky the Volume uses. In the Visual Environment override, navigate to the Sky section and set the Type to Physically Based Sky. HDRP now renders a Physically Based Sky for any Camera this Volume affects.
To change how much the atmosphere attenuates light, you can change the density of both air and aerosol molecules (participating media) in the atmosphere. You can also use aerosols to simulate real-world pollution or fog.
Note: HDRP only takes into account Lights that have Affect Physically Based Sky enabled. After Unity bakes the lighting in your project, Physically Based Sky ignores all Lights that have their Mode property set to Baked. To fix this, set the Mode to Realtime or Mixed.
Note: When Unity initializes a Physically Based Sky, it performs a resource-intensive operation which can cause the frame rate of your project to drop for a few frames. Once Unity has completed this operation, it stores the data in a cache to access the next time Unity initializes this volume. You might experience this frame rate drop if you have two Physically Based Sky volumes with different properties and switch between them.
API
To access and control this override at runtime, use the Volume scripting API. Because of how the Volume system works, you edit properties in a different way to standard Unity components. There are also other nuances to be aware of too, such as each property has an overrideState. This indicates to the Volume system whether to use the property value you set, or use the default value stored in the Volume Profile. For information on how to use the API correctly, see Volume scripting API.
Properties
To edit properties in any Volume component override, enable the checkbox to the left of the property. This also tells HDRP to use the property value you specify for the Volume component rather than the default value. If you disable the checkbox, HDRP ignores the property you set and uses the Volume’s default value for that property instead.
Model
Property | Description |
---|---|
Type | Indicates a preset HDRP uses to simplify the Inspector. If you select Earth (Simple) or Earth (Advanced), the Inspector only shows properties suitable to simulate Earth. |
Rendering
Property | Description |
---|---|
Rendering Mode | Indicates wether HDRP should use the default shader or a custom material. |
Material | The material used to render the fulscreen sky pass. It is recommended to make it using the Physically Based Sky Material type of ShaderGraph. |
Planet
Property | Description |
---|---|
Planet Rotation | The orientation of the planet. Not available in Custom Rendering Mode. |
Ground Color Texture | Specifies a Texture that represents the planet's surface. Not available in Custom Rendering Mode. |
Ground Tint | Specifies a color that HDRP uses to tint the Ground Color Texture. |
Ground Emission Texture | Specifies a Texture that represents the emissive areas of the planet's surface. Not available in Custom Rendering Mode. |
Ground Emission Multiplier | A multiplier that HDRP applies to the Ground Emission Texture. Not available in Custom Rendering Mode. |
Space
To make this section visible, set Type to Earth (Advanced) or Custom Planet, and the Rendering Mode to Default.
Property | Description |
---|---|
Space Rotation | The orientation of space. |
Space Emission Texture | Specifies a Texture that represents the emissive areas of space. |
Space Emission Multiplier | A multiplier that HDRP applies to the Space Emission Texture. |
Air
To make this section visible, set Type to Custom Planet.
Property | Description |
---|---|
Air Maximum Altitude | The depth, in meters, of the atmospheric layer, from sea level, composed of air particles. This controls the rate of height-based density falloff. HDRP assumes the air density is negligibly small at this altitude. |
Air Density R | The red color channel opacity of air at the point in the sky directly above the observer (zenith). This directly affects the color of air at the zenith. |
Air Density G | The green color channel opacity of air at the point in the sky directly above the observer (zenith). This directly affects the color of air at the zenith. |
Air Density B | The blue color channel opacity of air at the point in the sky directly above the observer (zenith). This directly affects the color of air at the zenith. |
Air Tint | The single scattering albedo of air molecules (per color channel). A value of 0 results in absorbing molecules, and a value of 1 results in scattering ones. |
Aerosols
Property | Description |
---|---|
Aerosol Maximum Altitude | The depth, in meters, of the atmospheric layer, from sea level, composed of aerosol particles. This controls the rate of height-based density falloff. HDRP assumes the aerosol density is negligibly small at this altitude. |
Aerosol Density | The opacity of aerosols at the point in the sky directly above the observer (zenith). This directly affects the color of aerosols at the zenith. |
Aerosol Tint | The single scattering albedo of aerosol molecules (per color channel). A value of 0 results in absorbing molecules, and a value of 1 results in scattering ones. |
Aerosol Anisotropy | Specifies the direction of anisotropy: • Set this value to 1 for forward scattering. • Set this value to 0 to make the anisotropy almost isotropic. • Set this value to -1 for backward scattering. For high values of anisotropy: • If the light path and view direction are aligned, you see a bright atmosphere/fog effect. • If they are not aligned, you see a dim atmosphere/fog effect. • If anisotropy is 0, the atmosphere and fog look similar regardless of view direction. |
Artistic Overrides
Property | Description |
---|---|
Color Saturation | Controls the saturation of the color of the sky. |
Alpha Saturation | Controls the saturation of the opacity of the sky. |
Alpha Multiplier | A multiplier that HDRP applies to the opacity of the sky. |
Horizon Tint | Specifies a color that HDRP uses to tint the sky at the horizon. |
Horizon Zenith Shift | Controls how HDRP blends between the Horizon Tint and Zenith Tint. If you set this to -1, the Zenith Tint expands down to the horizon. If you set this to 1, the Horizon Tint expands up to the zenith. |
Zenith Tint | Specifies a color that HDRP uses to tint the point in the sky directly above the observer (the zenith). |
Miscellaneous
Property | Description |
---|---|
Number Of Bounces | The number of scattering events. This increases the quality of the sky visuals but also increases the pre-computation time. |
Intensity Mode | Use the drop-down to select the method that HDRP uses to calculate the sky intensity: • Exposure: HDRP calculates intensity from an exposure value in EV100. • Multiplier: HDRP calculates intensity from a flat multiplier. |
- Exposure Compensation | The exposure compensation for HDRP to apply to the Scene as environmental light. HDRP uses 2 to the power of your Exposure Compensation value to calculate the environment light in your Scene. |
- Multiplier | The multiplier for HDRP to apply to the Scene as environmental light. HDRP multiplies the environment light in your Scene by this value. To make this property visible, set Intensity Mode to Multiplier. |
Update Mode | The rate at which HDRP updates the sky environment (using Ambient and Reflection Probes): • On Changed: HDRP updates the sky environment when one of the sky properties changes. • On Demand: HDRP waits until you manually call for a sky environment update from a script. • Realtime: HDRP updates the sky environment at regular intervals defined by the Update Period. |
- Update Period | The period (in seconds) for HDRP to update the sky environment. Set the value to 0 if you want HDRP to update the sky environment every frame. This property only appears when you set the Update Mode to Realtime. |
Include Sun In Baking | Indicates whether the light and reflection probes generated for the sky contain the sun disk. For details on why this is useful, see Environment Lighting. |
Implementation details
This sky type is a practical implementation of the method outlined in the paper Precomputed Atmospheric Scattering (Bruneton and Neyret, 2008).
This technique assumes that you always view the Scene from above the surface of the planet. This means that if a camera goes below the planet's surface, the sky renders as if the camera was at ground level. Where the surface of the planet is depends on whether you enable or disable the Spherical Mode property:
- If you enable Spherical Mode, the Planetary Radius and Planet Center Position properties define where the surface is. In this mode, the surface is at the distance set in Planetary Radius away from the position set in Planet Center Position.
- Otherwise, the Sea Level property defines where the surface is. In this mode, the surface stretches out infinitely on the xz plane and Sea Level sets its world space height.
The default values in either mode make it so the planet's surface is at 0 on the y-axis at the Scene origin. Since the default values for Spherical Mode simulate Earth, the radius is so large that, when you create your Scene environment, you can consider the surface to be flat. If you want some areas of your Scene environment to be below the current surface height, you can either vertically offset your Scene environment so that the lowest areas are above 0 on the y-axis, or decrease the surface height. To do the latter:
If in Spherical Mode, either decrease the Planetary Radius, or move the Planet Center Position down.
If not in Spherical Mode, decrease the Sea Level.
The planet does not render in the depth buffer, this means it won't occlude lens flare and will not behave correctly when using motion blur.
Warmup performance impact
When you switch to or from a Physically Based Sky, it might cause a noticeable drop in frame rate. This is because HDRP performs a large amount of precomputations to render a Physically Based Sky, so the first few frames (depending on the Number of bounces parameter) takes more time to render than other HDRP sky types.
This also applies when HDRP uses the volume system to interpolate between two different Physically Based Skies with different sets of parameters. To do this, HDRP restarts the precomputation every frame in which it performs interpolation. This causes a noticeable drop in frame rate. To avoid this, use a single set of Physically Based Sky parameters for a scene and change the sun light direction and intensity to achieve the result you want.
HDRP restarts precomputation when you change the following parameters:
- Type
- Planetary Radius
- Ground Tint
- Air Maximum Altitude
- Air Density
- Air Tint
- Aerosol Maximum Altitude
- Aerosol Density
- Aerosol Tint
- Aerosol Anisotropy
- Number of Bounces
Reference list
- Bruneton, Eric, and Fabrice Neyret. 2008. “Precomputed Atmospheric Scattering.” Computer Graphics Forum 27, no. 4 (2008): 1079–86. https://hal.inria.fr/inria-00288758/en.