Reflections are part of physically based rendering. They make materials respond to their environment and are most visible on glossy surfaces such as car paint, glass, chrome, wet roads, polished floors, and metal parts.
In BeamNG, reflections can come from multiple sources depending on material settings, graphics settings, and the object being rendered.
Without reflections, materials can appear flat, dull, or disconnected from the scene. Good reflection setup improves:
Physically based materials depend on reflected light for roughness, metallic, and clear coat response.
BeamNG supports several reflection sources:
These systems work together. When one source is unavailable, the engine usually falls back to another source.
Dynamic cubemaps are real-time reflection captures used for the player vehicle. They update during gameplay and provide accurate reflections of the surrounding environment.
Dynamic cubemaps are only available for the player vehicle. If dynamic reflections are disabled in graphics settings, materials fall back to the level cubemap instead.
Dynamic Reflections missing on the left, and enabled on the right.
Static cubemaps are pre-captured reflection maps. They do not update in real time, but they are cheaper to render and work well for fixed environments or specific materials.
Static cubemaps can be used in two main ways:
Static Reflections missing on the left, and enabled on the right.
A material can reference a specific cubemap directly. Use this when a material needs a controlled reflection source, such as a showroom object, special prop, or environment-specific surface.
Use per-material cubemaps when:
To assign a material cubemap, select the material in Material Editor, set reflection mode to Cubemap, then assign the cubemap.
Level cubemaps represent the general environment reflection for a level. They are used by materials when reflection mode is set to Level, and may also be used as fallback reflection data.
If a v1.5 material’s reflection mode is set to None, level cubemap reflections can still be used when lighting quality is set to High or Ultra. Legacy v1 materials do not receive this automatic fallback.
Use level cubemaps for:
To set the level cubemap, select the LevelInfo object in the scene tree, then assign the cubemap to globalEnviromentMap.
Materials can control which reflection source they use.
The material does not explicitly request a reflection source.
However, a v1.5 material still receives global level cubemap reflections when Lighting Quality is set to High or Ultra.
Use this for materials where reflections are not needed or should be very subtle.
The material uses the level cubemap environment map.
This is the recommended option for most static environment materials that need reflections without a custom cubemap.
The material uses a specific assigned cubemap.
Use this when the material needs a custom static reflection source.
Planar reflections are used for flat reflective water surfaces. Unlike cubemaps, which capture the environment from a point, planar reflections render a mirrored view of the scene from the water surface. This makes them much more accurate for large flat surfaces.
Planar reflections are available only on select object types:
Use them mainly for water rendering, where reflections of the sky, terrain, vehicles, and nearby objects need to line up with the water surface.
Planar reflections require Lighting Quality to be set to Low or higher. On Lowest Lighting Quality (Basic Lighting), water objects use their fallback cubemap instead.
Compared to cubemaps or Screen Space Reflections , planar reflections are relatively expensive because the scene needs to be rendered again from the reflected view. Use them only where the visual improvement is worth the performance cost. Since version 0.40, water can receive Screen Space Reflections on top of its planar or cubemap reflection, which makes it possible to disable planar reflections on many water objects. See SSR on water .
Planar Reflections missing on the left, and enabled on the right.
Planar reflection settings:
Since version 0.40, BeamNG supports Screen Space Reflections (SSR). Instead of capturing the environment from a fixed point like a cubemap, SSR traces reflection rays through the depth of the image that is currently on screen. It reflects exactly what the camera sees, in the correct place, so nearby objects, the ground under a vehicle, or a wet road reflecting the car above it line up with the scene.
SSR is a screen-space effect: it can only reflect what is visible on screen. When a reflection ray leaves the screen, hits the sky, or reaches geometry that is hidden behind something else, SSR has no information and the material falls back to its usual cubemap reflection. In practice this means SSR adds accurate local reflections on top of the existing reflection setup; it does not replace cubemaps.
For every reflective pixel, the renderer first evaluates the normal cubemap reflection (dynamic, static, or level cubemap). Where SSR finds a valid hit, the traced result replaces the cubemap contribution for that pixel. Where SSR misses, the cubemap stays. The transition is blended, so partially valid hits fade between both sources.
For content creators this means:
SSR is controlled by Screen Space Reflections in the graphics options.
| Setting | Effect |
|---|---|
| Off | SSR disabled. Materials use cubemap reflections only. |
| Low | Reflections traced at quarter resolution. Cheapest option, softer reflections. |
| Medium | Reflections traced at half resolution. Good balance for most systems. |
| High | Reflections traced at full resolution. Sharpest result, highest cost. |
SSR requires:
The reflection is traced at the current render resolution before upscaling and uses the previous frame for temporal stability, so it works together with the anti-aliasing and upscaling options.
Water objects (WaterPlane, WaterBlock, River) receive SSR on top of their normal reflection. When SSR finds a hit, it is blended over the planar reflection or, when planar reflections are disabled, over the fallback cubemap.
This makes SSR a cheaper alternative to planar reflections for many water surfaces:
Vehicle interiors usually have an inner window surface material separate from outer. SSR can only reflect on first reflective layer, this means if SSR was enabled on interiro glass, it wouldnt be visible outside of vehicle. The official vehicles solve this by assigning the special BlackSkyCubemap to the inner glass material, which suppresses its cubemap and ssr reflection.
SSR follows the same convention. A translucent material that uses BlackSkyCubemap and no dynamic cubemap does not receive SSR itself, while the surfaces seen through it keep their reflections, reduced by the glass opacity.
"etk800_glass_int": {
"translucent": true,
"cubemap": "BlackSkyCubemap",
"castShadows": false
}
Use BlackSkyCubemap on any interior see-through glass, that shouldn’t disable ssr behind it. Regular outer glass should keep its normal cubemap or dynamic cubemap setup so it receives SSR.
Static cubemaps can be captured using:
World Editor → Window → Cubemap Editor
A typical workflow:
Capture cubemaps from locations that represent the surrounding environment. For large areas, use a neutral location that does not overrepresent one landmark or lighting condition.
Static cubemaps can be normalized using ambient lighting / global illumination information. This keeps reflection intensity and color aligned with the level lighting instead of making cubemaps appear too bright or too dark.
Evaluate reflections together with:
Possible causes:
Capture or assign a more appropriate cubemap.
Reflection quality depends on graphics settings. Make sure materials have proper fallback behavior through level cubemaps.
Possible causes:
Possible causes:
Assign BlackSkyCubemap to the inner glass material. See Interior glass and BlackSkyCubemap
.
PostFxSSSRObject and other post effects.Was this article helpful?