Skip to main content

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 Jodie

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

SettingDefaultRangeDescription
Max White (Lw)4.0(0, 1]Controls highlight compression. Higher = less effect.

Tuning tips:

  • Lw = 0.1 → strong effect, heavy highlight compression
  • Lw = 0.5 → balanced, moderate highlight roll-off
  • Lw = 1.0 → weakest effect, closest to no compression
warning

Avoid 0 — the image will blow out to white.

Reinhard Extended Lw 0.1 Reinhard Extended Lw 0.5 Reinhard Extended Lw 1.0

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.