从“图像格式”,我们看到:
11 位浮点数没有符号位;它有 6 位尾数和 5 位指数。
从“半精度浮点格式”中我们可以推导出: 11位浮点数的相对精度为2-6,即1/64
但对于 8 位 RGB 图像,255 时的相对精度为 (255-254)/255 = 1/255。
那么,
GL_R11F_G11F_B10F
的精度对于亮度范围较大(例如255)的8位RGB图像来说是否不好?
使用浮点图像的原因是为了允许表达 [0, 1] 范围之外的值。如果这就是您需要做的,那么这就是您需要做的,并且规范化整数格式将没有帮助,无论其精度如何。
这种特殊的浮点格式在不使用共享指数的情况下尽可能压缩浮点 RGB 数据。相对于标准化 8 位整数,它确实会损失精度,只有大约 2.1 位小数精度(由于 IEEE-754 浮点数的工作方式,您会得到比实际多一位尾数的效果)。
但如前所述,如果您需要大于 1 的值,则不能选择标准化格式。这种特殊的浮点格式适用于可以容忍精度损失的情况。这适用于 HDR 情况下的帧缓冲区输出等用途。它的大小是 16 位浮点 RGBA 格式的一半,因此可以代表帧缓冲区带宽成本的显着性能改进。
这是一个优化。您可能会使用半浮点进行开发,但随后您切换到此并看看您是否可以分辨出差异。如果没有,您可以永久切换到它(可能使用面向用户的设置以获得更高的图像保真度)。