OpenGL:GL_R11F_G11F_B10F 的精度对于 8 位 RGB 图像来说好吗?

问题描述 投票:0回答:1

“图像格式”,我们看到:

11 位浮点数没有符号位;它有 6 位尾数和 5 位指数。

从“半精度浮点格式”中我们可以推导出: 11位浮点数的相对精度为2-6,即1/64

但对于 8 位 RGB 图像,255 时的相对精度为 (255-254)/255 = 1/255。

那么,

GL_R11F_G11F_B10F
的精度对于亮度范围较大(例如255)的8位RGB图像来说是否不好?

image opengl floating-point precision pixelformat
1个回答
3
投票

使用浮点图像的原因是为了允许表达 [0, 1] 范围之外的值。如果这就是您需要做的,那么这就是您需要做的,并且规范化整数格式将没有帮助,无论其精度如何。

这种特殊的浮点格式在不使用共享指数的情况下尽可能压缩浮点 RGB 数据。相对于标准化 8 位整数,它确实会损失精度,只有大约 2.1 位小数精度(由于 IEEE-754 浮点数的工作方式,您会得到比实际多一位尾数的效果)。

但如前所述,如果您需要大于 1 的值,则不能选择标准化格式。这种特殊的浮点格式适用于可以容忍精度损失的情况。这适用于 HDR 情况下的帧缓冲区输出等用途。它的大小是 16 位浮点 RGBA 格式的一半,因此可以代表帧缓冲区带宽成本的显着性能改进。

这是一个优化。您可能会使用半浮点进行开发,但随后您切换到此并看看您是否可以分辨出差异。如果没有,您可以永久切换到它(可能使用面向用户的设置以获得更高的图像保真度)。

© www.soinside.com 2019 - 2024. All rights reserved.