Physically Meaningful Rendering using Tristimulus Colours

Johannes Meng, Florian Simon, Johannes Hanika, and Carsten Dachsbacher

Computer Graphics Forum (Proceedings of EGSR 2015)

Four chairs with diffuse reflectance defined in Rec.709 ∈ [0,1]3. In results obtained using an RGB path tracer (top left), the indirect illumination seems to glow unnaturally, e.g. behind the bunnies. A spectral path tracer reveals why (bottom left): to reproduce the same colours, reflectance spectra must violate energy conservation, causing the render to diverge. With the mapping techniques we propose, colour values can be altered so that both the RGB and the spectral render produce physically plausible results (right images).
In photorealistic image synthesis the radiative transfer equation is often not solved by simulating every wavelength of light, but instead by computing tristimulus transport, for instance using sRGB primaries as a basis. This choice is convenient, because input texture data is usually stored in RGB colour spaces. However, there are problems with this approach which are often overlooked or ignored. By comparing to spectral reference renderings, we show how rendering in tristimulus colour spaces introduces colour shifts in indirect light, violation of energy conservation, and unexpected behaviour in participating media. Furthermore, we introduce a fast method to compute spectra from almost any given XYZ input colour. It creates spectra that match the input colour precisely. Additionally, like in natural reflectance spectra, their energy is smoothly distributed over wide wavelength bands. This method is both useful to upsample RGB input data when spectral transport is used and as an intermediate step for corrected tristimulus-based transport. Finally, we show how energy conservation can be enforced in RGB by mapping colours to valid reflectances.




  title = {Physically Meaningful Rendering using Tristimulus Colours},
  author = {Johannes Meng and Florian Simon and Johannes Hanika and Carsten Dachsbacher},
  year = 2015,
  volume = 34,
  number = 4,
  journal = {Computer Graphics Forum (Proceedings of Eurographics Symposium on Rendering)},
  pages = {31--40}