RGBE image format
RGBE or Radiance HDR is an image format invented by Gregory Ward Larson for the Radiance rendering system. It stores pixels as one byte each for RGB (red, green, and blue) values with a one byte shared exponent. Thus it stores four bytes per pixel.
Filename extension |
.hdr |
---|---|
Internet media type |
image/vnd.radiance |
Uniform Type Identifier (UTI) | public.radiance[1] |
Magic number | 23 3f 52 41 44 49 41 4e 43 45 0a |
Type of format | lossless image format |
Website | radsite |
Description
RGBE allows pixels to have the dynamic range and precision of floating-point values in a relatively compact data structure (32 bits per pixel) - often when images are generated from light simulations, the range of per-pixel color intensity values are much greater than will nicely fit into the standard 0..255 (8-bit) range of standard 24-bit image formats. As a result, either bright pixels are clipped to 255, or dim pixels lose numeric precision.
By using a shared exponent, the RGBE format gains some of the advantages of floating-point values whilst using less than the 32 or 16 bits per color component that would be needed for single precision or half-precision data in the IEEE floating-point format, and with a higher dynamic range than half-precision. An exponent value of 128 maps integer colors [0..255] into [0..1) floating-point space.
A second variant of the format uses the XYZ color model with a shared exponent. The mime type and file extension are identical, thus applications reading this file format need to interpret the embedded information on the color model.
Greg Ward provides code to handle RGBE files in his Radiance renderer.
Similar formats
OpenGL mandates support for an analogous RGB9_E5 color (not render) format, where three channels have 9 bits of mantissa each and share 5 bits of exponent.[2]
JPEG XT Part 2 (Dolby JPEG-HDR) and Part 7 Profile A are based on the RGBE format.
RGBM is a format with the exponent replaced with a shared multiplier, while RGBD stores a divider instead. These formats lack the dynamic range of RGBE and logLUV, but are more amenable to a naive approach of linear interpolation on each component.[3] Like RGBE, they can be packaged in any format that accepts a four-channel color model, including ordinary formats like PNG (appropriating the RGBA structure) for 3D textures.[4]
A wider variety of color formats take the more conventional route of storing separate floating-point numbers. These include the Xbox '7e3' format (3 10bit floating point color channels, each with 7bits of mantissa and 3 bits of exponent) and the OpenGL R11F_G11F_B10F format.[2]
References
- "CGImageSource.SupportedTypes". Claris FileMaker MBS Plug-in. MonkeyBread Software.
- "Small Float Formats - OpenGL Wiki".
- Guertault, Julien. "Gamma correct and HDR rendering in a 32 bits buffer". Light is Beautiful. Retrieved 11 May 2019.
- "Textures". Learn PlayCanvas. Retrieved 11 May 2019.