《GPU Gems》第26章 OpenEXR图像格式

发布网友 发布时间:2024-12-24 19:09

我来回答

1个回答

热心网友 时间:2024-12-24 19:37

本章所涉及的内容针对特定格式的实现,不具备通用性,且详细翻译并不具有价值。

OpenEXR,是一种由工业光魔开发的HDR图像格式。

常规的数字图像对比度约为500比1,最暗与最亮部分分别映射为0到1。然而,当需要更多信息或绝对值信息时,这种存储方式便不再适用。此时,HDR应运而生,它能够表示更大范围的信息。例如,下图中油灯与阴影的亮度相差约十万倍,若使用传统的0到1映射,则无法体现这种差异。

传统方式会将整张图压暗以适应范围,但图像效果如下:

若使用OpenEXR之类的HDR格式,则可以达到以下效果:

在2003年,工业光魔发布了一种新的使用半精度浮点的HDR格式。由于IEEE754标准未定义半精度浮点,工业光魔自行实现了一种半精度浮点格式,其中包含1位符号位、5位指数位和10位尾数位。以下是用C++生成半精度浮点的代码:

精度范围:最大值约为65504.0,最小值约为5.96e-8。

色彩范围:在0到1的范围内,半精度浮点可以提供8192个不同的值,而传统方法只能提供235个(注:Gamma 2.2空间)。

工业光魔提供了一套C++接口。

OpenEXR文件结构中,文件头用于声明文件属性。像素则分别存储,你可以在写完RGBA后添加更多通道。

OpenEXR支持PIZ、ZIP以及RLE三种压缩方式。

以下是使用OpenEXR读取与显示图像的示例:

读取:将图像绑定到纹理;

渲染与写入OpenEXR图像:组合两张图像并写入OpenEXR文件;

组织Pbuffer:

以下是着色器代码。以下是over操作:

以下是in操作:

以下是out操作:

OpenEXR存储线性空间的值,而大多数图像处理软件都需要线性空间的值。然而,当我们在显示器上观察图像时,它处于Gamma 2.2空间。以下代码将展示Gamma矫正:

在线性空间调整曝光值:

最后,我们将进行一些调色:

HDR图像可以通过渲染或从真实世界捕捉获得。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com