Module bevy::pbr::environment_map

source ·
Expand description

Environment maps and reflection probes.

An environment map consists of a pair of diffuse and specular cubemaps that together reflect the static surrounding area of a region in space. When available, the PBR shader uses these to apply diffuse light and calculate specular reflections.

Environment maps come in two flavors, depending on what other components the entities they’re attached to have:

  1. If attached to a view, they represent the objects located a very far distance from the view, in a similar manner to a skybox. Essentially, these view environment maps represent a higher-quality replacement for crate::AmbientLight for outdoor scenes. The indirect light from such environment maps are added to every point of the scene, including interior enclosed areas.

  2. If attached to a LightProbe, environment maps represent the immediate surroundings of a specific location in the scene. These types of environment maps are known as reflection probes. ReflectionProbeBundle is available as a mechanism to conveniently add these to a scene.

Typically, environment maps are static (i.e. “baked”, calculated ahead of time) and so only reflect fixed static geometry. The environment maps must be pre-filtered into a pair of cubemaps, one for the diffuse component and one for the specular component, according to the split-sum approximation. To pre-filter your environment map, you can use the glTF IBL Sampler or its artist-friendly UI. The diffuse map uses the Lambertian distribution, while the specular map uses the GGX distribution.

The Khronos Group has several pre-filtered environment maps available for you to use.

Currently, reflection probes (i.e. environment maps attached to light probes) use binding arrays (also known as bindless textures) and consequently aren’t supported on WebGL2 or WebGPU. Reflection probes are also unsupported if GLSL is in use, due to naga limitations. Environment maps attached to views are, however, supported on all platforms.

Structs

Constants