Qu’est-ce que Radiance HDR ?
Radiance HDR est un format d’image à grande plage dynamique développé pour le système de rendu Radiance et couramment identifié par l’extension HDR. Son encodage de pixels RGBE habituel représente chaque pixel avec trois octets de couleur et un octet d’exposant partagé.
Comment fonctionne Radiance HDR
Une image Radiance comporte trois parties : un en-tête d’informations textuel, une chaîne de résolution et des enregistrements de lignes de balayage. L’en-tête commence généralement par #?RADIANCE (stb_image et ImageMagick acceptent aussi #?RGBE), contient des affectations de variables comme FORMAT (soit 32-bit_rle_rgbe, soit 32-bit_rle_xyze), EXPOSURE, COLORCORR et PRIMARIES, et se termine par une ligne vide. La chaîne de résolution, par exemple -Y 1024 +X 2048, indique le nombre de pixels et l’ordre dans lequel ils ont été écrits. Chaque pixel occupe quatre octets : une mantisse sur 8 bits pour chacune des trois primaires et un exposant commun sur 8 bits. Un octet de mantisse est une fraction de 256, et non une valeur entière : le code de référence de Radiance décode un canal selon la formule (mantisse + 0,5) / 256 × 2^(exposant − 128), et un octet d’exposant égal à 0 signifie noir. Les octets (128, 64, 32, 129) stockent donc environ (1 ; 0,5 ; 0,25). Les lignes de balayage sont stockées sans compression ou avec l’un des deux schémas de compression par plages ; la référence Radiance estime la compression habituelle à environ 2:1. Les valeurs sont linéaires et peuvent avoir un sens physique : pour les données RGB, un pixel de (1, 1, 1) correspond à 1 watt par stéradian par mètre carré sur le spectre visible. La référence Radiance précise toutefois que les valeurs ne sont pas physiquement valides si les sources lumineuses n’ont pas été correctement modélisées, si l’image a été convertie depuis un autre format ou si un filtrage personnalisé a été appliqué. La documentation de Radiance utilise le suffixe .pic ; .hdr est le suffixe courant ailleurs.
Points clés
- RGBE attribue à chaque pixel une mantisse sur 8 bits par canal et un seul exposant partagé, et non trois nombres à virgule flottante. Dans un pixel non noir, l’octet de mantisse du canal le plus lumineux est compris entre 128 et 255, et les deux autres canaux sont mis à l’échelle avec le même exposant ; un canal beaucoup moins lumineux que le plus lumineux conserve donc peu de bits significatifs. L’auteur du format estime la précision à environ 1 % sur plus de 76 ordres de grandeur et précise que les pas de quantification peuvent devenir visibles dans les zones bleues et magenta saturées.
- La chaîne de résolution indique l’ordre de balayage ainsi que les dimensions.
-Y N +X Mest la forme standard : N lignes stockées de haut en bas, chacune contenant M pixels de gauche à droite. Sept autres combinaisons de signes et d’axes décrivent un stockage inversé ou pivoté, et lorsque X vient en premier, le premier nombre est la largeur, pas la hauteur. Un décodeur qui n’extrait que deux nombres transpose ou inverse ces fichiers ; la référence Radiance précise que certains programmes ne gèrent que l’ordre standard. - Les quatre octets sont occupés par les trois mantisses et l’exposant ; il n’y a donc ni canal alpha ni signe. La transparence doit être transportée dans un fichier distinct ou un autre format, et RGBE ne peut pas stocker de composantes négatives, ce qui le limite aux couleurs situées dans le gamut de ses primaires RGB. La variante XYZE, déclarée par
FORMAT=32-bit_rle_xyze, couvre le gamut visible, mais un décodeur doit vérifier la ligneFORMATpour distinguer les deux variantes. Confirmez donc la prise en charge de XYZE avant de vous y fier. - Les variables d’en-tête modifient la signification des nombres.
EXPOSUREest un multiplicateur déjà appliqué aux pixels et cumulatif ; la radiance d’origine est donc la valeur stockée divisée par le produit de toutes les lignesEXPOSURE.COLORCORRest un multiplicateur appliqué et cumulatif de même nature, indiqué séparément pour chaque primaire ; chaque canal doit donc aussi être divisé par son produitCOLORCORR.PRIMARIESdonne les chromaticités ; en son absence, les valeurs par défaut de Radiance s’appliquent, et leur point blanc est à énergie égale (0,333 ; 0,333), et non D65. Certains décodeurs n’utilisent pas ces informations : la documentation d’OpenImageIO indique qu’il suppose que tout fichier RGBE est linéaire avec des primaires sRGB.
Quand Radiance HDR est utile
Utilisez Radiance HDR lorsqu’un moteur de rendu ou un outil d’éclairage attend une entrée au format .hdr, le plus souvent pour des cartes d’environnement et un éclairage fondé sur l’image qui nécessitent des valeurs linéaires bien au-delà du blanc d’affichage. La documentation d’OpenImageIO indique que le format reste utilisé dans de nombreuses applications héritées et pour distribuer des cartes d’environnement HDR, mais recommande des formats plus récents comme OpenEXR, sauf lorsqu’un accès aux fichiers hérités est nécessaire. Lors de la conversion, vérifiez que la destination respecte l’exposition, la correction colorimétrique, les primaires et l’orientation de l’en-tête ; une sortie sur 8 bits ne peut pas conserver la plage supplémentaire.
Comment Transloadit vous aide avec Radiance HDR
Le tableau des formats d’image de Transloadit répertorie HDR, décrit comme le format d’image RGBE de Radiance, parmi les formats que ses Robots basés sur ImageMagick, dont /image/resize, peuvent lire et écrire.
Le tableau indique uniquement les capacités de lecture et d’écriture ; il ne décrit pas la façon dont les valeurs à grande plage dynamique sont converties lorsque la sortie est un format sur 8 bits comme JPEG ou PNG. Vérifiez donc la luminosité et les couleurs sur un fichier représentatif.
Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression
Références
- Formats de fichiers Radiance (Greg Ward Larson) : format de fichier image, variables d’en-tête, chaîne de résolution, enregistrements de lignes de balayage
- Greg Ward : encodages d’images à grande plage dynamique (section sur l’encodage RGBE de Radiance)
- Le format de fichier image RADIANCE (note de référence avec un exemple de code d’encodage et de décodage de pixels)
- Modules de formats inclus dans OpenImageIO : HDR/RGBE
- Ticket stb #1323 : demande de prise en charge de XYZE dans les fichiers Radiance .hdr