Reinhard Tone Mappers
Two variants of the classic Reinhard operator are included. Both are fast and parameter-light — good when you need a neutral, predictable tone response without tuning.
Reinhard – Jodie
A parameter-free variant that blends luminance-based and per-channel Reinhard to avoid color fringing at high values.
Formula:
float l = luminance(v);
float3 tv = v / (1.0 + v);
return lerp(v / (1.0 + l), tv, tv);
- The luminance path (
v / (1 + l)) preserves hue but can look washed out. - The per-channel path (
v / (1 + v)) is more saturated but can hue-shift. - Blending with
tv(the per-channel result) gives a balanced compromise.
Settings: None.

Reinhard – Extended
The original Reinhard 2002 formulation (Equation 4 from "Photographic Tone Reproduction for Digital Images") with a configurable white point. The white point controls where the curve saturates — values above Lw are compressed to white.
Formula:
float3 numerator = v * (1.0 + v / (Lw * Lw));
return numerator / (1.0 + v);
Settings reference
| Setting | Default | Range | Description |
|---|---|---|---|
| Max White (Lw) | 4.0 | (0, 1] | Controls highlight compression. Higher = less effect. |
Tuning tips:
Lw = 0.1→ strong effect, heavy highlight compressionLw = 0.5→ balanced, moderate highlight roll-offLw = 1.0→ weakest effect, closest to no compression
warning
Avoid 0 — the image will blow out to white.

When to use Reinhard
- Legacy or stylized projects that want a classic "game" look
- Very fast rendering contexts where shader complexity matters
- As a neutral reference when debugging tone mapping in a scene
Reference
Reinhard 2002: "Photographic Tone Reproduction for Digital Images", Erik Reinhard et al., SIGGRAPH 2002.