HDR: Each Good Thing Needs a Proper Implementation
Before we proceed to the description of Crytek’s implementation of HDR, let us revise what the HDR actually is from our original GeForce 6800 Ultra review.
What is HDR?
The major idea of the
The today’s universal image description model is an additive hardware dependent RGB (Red, Green, Blue) model, which was first developed for such display devices as CRT (Cathode Ray Tube), i.e. the regular computer monitor. According to this model, any color can be represented as a sum of three basic colors: Red, Green and Blue with properly selected intensities. The intensity of each basic color is split into 256 shades (intensity gradations).
The number 256 is quite a randomly selected one and appeared as a compromise between the computer graphics subsystem performance, photorealistic image requirements and binary nature of all computer calculations. In particular, they found out that 16.7 million shades (256x256x256) are more than enough for images with photographic quality. Moreover, 256 can be easily codes in the binary system as 2^8, i.e. 1 byte.
Of course, any color in RGB model will be described with an integer triad. Note that floating point numbers (such as 1.6 or 25.4, for instance) cannot be used within this model, and the numbers used are kind of “fake”, i.e. they have nothing to do with real physical lighting parameters.
Certainly, the dynamic monitor range (and the RGB model description) is not enough to represent all real world images or at least that part of it, which a human eye can perceive. The typical consequence of that is the “removal” of all intensities from the upper and lower part of the range. An example here could be a room with the open window on a sunny summer day. The monitor will correctly display either the room interior or the part of the outdoor scene, which you can see through the window.
As far as the computer monitor is concerned, there is hardly anything you can do about it: you cannot increase the screen brightness up to the level of Sun brightness. But if there is nothing we could do about the monitor then why don’t we give up the RGB model, especially since it can be done absolutely painlessly. Let’s describe the images with real physical values of light intensity and color, and the let the monitor display all it can, as it will hardly be worse anyway. :) This is exactly the idea behind NVIDIA’s HDRI (High Dynamic Range Images): for pixels of the image we set the intensity and color in real physical values or values linearly proportional to them. Of course, all real (and fake) lighting parameters are now described with real numbers and not integers, so that we will not be able to cope with 8 bits per channel. This approach immediately eliminates all limitations imposed by the RGB model: the dynamic image range is not limited at all theoretically. This way the question about discreetness and the number of brightness gradations is no longer acute, and the problem of insufficient color coverage is also solved.