来自"Image Format" ,我们看到:
An 11-bit float has no sign-bit; it has 6 bits of mantissa and 5 bits of exponent.
从“Half-precision floating-point format ”,我们可以推导出: 11位 float 的相对精度为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 float 的工作方式,您会得到比实际多一位尾数的效果)。
但如前所述,如果您需要大于 1 的值,则不能选择标准化格式。这种特殊的浮点格式适用于可以容忍精度损失的情况。这适用于 HDR 情况下的帧缓冲区输出等用途。它的大小是 16 位浮点 RGBA 格式的一半,因此可以代表帧缓冲区带宽成本的显着性能改进。
这是一个优化。您可能会使用半浮点进行开发,但随后您切换到此并看看您是否可以分辨出差异。如果没有,您可以永久切换到它(可能使用面向用户的设置以获得更高的图像保真度)。
关于image - OpenGL:GL_R11F_G11F_B10F的精度对于8位RGB图像来说好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940805/