High Dynamic Range (HDR) and Tonemapping in Unity
High Dynamic Range (HDR)
As well as Color Space, the ‘dynamic range’ of your camera
needs to be configured. Essentially, this defines how extremely bright or dark
colors are captured by scene cameras. HDR can be enabled from the camera
component in the Inspector by using the HDR checkbox. Note that HDR is
unsupported by some mobile hardware. It is also not supported in Forward
Rendering when using techniques such as multi-sample anti-aliasing (MSAA).
HDR is best used in combination with Linear Color Space in
order to preserve accuracy when handling very bright colors.
By default, cameras in Unity use a Low Dynamic Range (LDR).
Colors are stored using 8-bits per channel - red, green and blue. 8-bits refers
to the ‘precision’ and means that color data is stored with 8 values of either
1 or 0, giving 256 possible unique combinations for each color channel. 256 x
256 x 256 colors per channel means that by storing values using 8-bits we are
able to uniquely reference over 16 million color variations ranging in
intensity from black to white.
In reality, colors in the real world extend far outside this
16 million color range. There are infinite permutations of color possibilities,
and brightness goes beyond what our eyes can even see. Similarly Unity is capable
of handling extremely bright lights which produce colors beyond that which can
be displayed on an LDR device such as your computer screen. However, despite
this potential limitation in the output device, these extreme light values
still remain useful to us in a number of applications.
By enabling HDR on your scene camera, colors will be stored
with much greater precision (using the floating point representation). Many
more unique colors over a much brighter range of luminance can be handled.
HDR enables us to preserve the great differences in brightness between, say, outdoor lighting in our scenes and shaded areas. We can also create effects like ‘blooms’ or glows by applying effects to these bright colors in your scene. Special effects like these can add realism to particles or other visible light sources. However, these extreme color values also need to be handled somehow to prevent them being ‘clamped’ to white.
Tonemapping
Using the analogy of photography, if we were to photograph
our scene using different exposure settings, then we could start to see these
extreme color details which otherwise might have been lost. Light tones in the
brightest areas of the image which have been lost to white can be recovered, or
dark tones lost to black. This is analogous to ‘tonemapping’ in computer
graphics, where we take colors outside of the range reproducible by our target
device (computer screen, for example) and shift them mathematically into a
range which can be reproduced. The resulting output still makes sense
perceptually, because colors remain relative to one another. They are correct
in context.
When using HDR cameras, the Tonemapping Image Effect from
Standard Assets (Assets>Import Package>Effects) must be added to the
camera. This script provides you control over how very bright color intensities
recorded by your camera are converted into colors which can be displayed.
Comments
Post a Comment