Radiance HDR 图像 (.hdr)
Radiance 标准Radiance RGBE (HDR) 是为 Radiance 合成成像系统开发的基础高动态范围格式,它使用共享的 8 位指数来存储光度学精确的亮度值。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 HDR 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 HDR 文件:
十六进制签名 (偏移量 0):
23 3F 52 41 44 49 41 4E 43 45 0AASCII 表示形式: #?RADIANCE\n
标准化: Radiance 合成成像系统规范
技术规格
| 容器架构 | ASCII 标头以空行结束,后接分辨率字符串和二进制 RLE 扫描线 |
| 压缩方式 | 对每个通道的扫描行应用自适应 RLE 编码 |
| 字节序 | 大端序 / 网络字节序 |
| 色彩空间 | 带 CIE 色度坐标的线性 Rec.709 RGB |
| 通道与结构 | RGBE:红、绿、蓝各使用 8 位尾数,并共用 8 位指数 |
| 最大尺寸 | 实际上不受限制(分辨率字符串采用 32 位无符号整数) |
| 透明度 | 无(存储的是物理辐射亮度测量值) |
| 流式传输与渐进式加载 | 支持按扫描线顺序逐行流式读取 |
技术对比矩阵:HDR 对比同类产品
| 技术属性 | HDR (当前) | EXR | TIFF | JPEG |
|---|---|---|---|---|
| 像素编码 | 32 位 RGBE(共享 8 位指数) | 每通道 16 位半精度 / 32 位浮点数 | 8 位 / 16 位整数或 32 位浮点 | 标准 8 位伽马编码整数 |
| 主要使用场景 | 360 度环境照明(IBL) | VFX 多通道合成 | 摄影与印前 | 标准网页图形 |
| 动态范围 | 76 个数量级(10^-38 至 10^38) | 浮点数范围实际上近乎无限 | 视位深而定 | 有限的 8 位 SDR 范围 |
| 支持的通道 | 仅 RGB | 通道数量不限 | 多个自定义通道 | RGB / CMYK |
常见损坏模式与十六进制恢复指南
图像整幅画面出现水平条纹。
根本原因: 扫描线 RLE 解压时,行程长度计数字节损坏。
恢复方法: 使用 File2File.app HDR Repair 重建损坏的扫描行标记,或转换为 EXR。
安全分析与解析器攻击向量
Radiance HDR 解码器通常使用无边界字符串例程解析 ASCII 标头行,这可能会触发栈缓冲区溢出。
已知攻击向量
- 读取分辨率字符串标头(“-Y %d +X %d”)时调用 sprintf/sscanf,未限制输入长度。
- 在格式错误的 RLE 扫描行解码期间发生堆越界写入。
- 分配目标 32 位浮点缓冲区时发生整数溢出。
防御性最佳实践: 在分配图像缓冲区之前,验证 ASCII 头长度和扫描行尺寸。
历史渊源与里程碑
2000保罗·德贝韦克(Paul Debevec)使用 Radiance .hdr 文件在计算机图形学中普及了基于高动态范围图像的照明(IBL)。
1997标准化自适应扫描行运行长度编码,以减小文件大小。
1989格雷格·沃德(Greg Ward)在劳伦斯伯克利国家实验室发明了 RGBE 32 位像素编码和 .hdr 格式。
核心优势与特点
- 每个像素仅占 32 位,文件紧凑,却能表示跨越 76 个数量级的物理光亮度。
- 3D 渲染软件包(Blender、Unreal Engine、Unity、Cinema 4D)对 360 度环境贴图提供普遍支持。
- 文件结构简单、稳健,易于在所有软件平台上实现。
技术局限与劣势
- 由于采用了共享的 8 位指数编码,极暗区域可能会出现量化条带。
- RGB 通道无法存储负数,也不支持任意多重渲染层。
- 在多通道视觉特效制作中,很大程度上已被 OpenEXR 取代。
趣味技术冷知识
- 每个 Radiance HDR 文件都以“#?RADIANCE”或“#?RGBE”文本标头开头。
- 该格式旨在建筑物建成前模拟建筑设计中的真实照明。
- 保罗·德贝韦克(Paul Debevec)于 1997 年发表的标志性 SIGGRAPH 论文《从照片中恢复高动态范围辐射度贴图》使用该格式彻底革新了 CGI 照明。
常见技术问题
HDRI 文件在 3D 制作中有什么用途?
HDRI(.hdr)文件可用作 360 度全景环境贴图,为 3D 对象提供逼真的现实世界光照、阴影和反射。
RGBE 32 位编码是如何工作的?
RGBE 不存储三个独立的浮点数,而是为红色、绿色和蓝色分别使用 8 位,外加一个共享的 8 位指数,将完整的 HDR 动态范围压缩到每个像素仅 4 个字节。
我可以将 HDR 转换为 JPG 吗?
可以。File2File.app 可以在浏览器中直接对 32 位 Radiance HDR 文件进行色调映射,并将其转换为标准的 JPG 或 PNG 图像。