OpenGL:GL_R11F_G11F_B10F的精度是否适合8位RGB图像?

时间:2016-04-29 14:22:53

标签: image opengl precision 8-bit

"Image Format",我们看到:

  

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

从" Half-precision floating-point format",我们可以扣除: 11位浮点的相对精度为2 ^( - 6),即1/64

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

所以它说GL_R11F_G11F_B10F的精度对于亮度范围很大的8位RGB图像不好(例如255)?

1 个答案:

答案 0 :(得分:2)

使用浮点图像的原因是允许您表示超出范围[0,1]的值。如果您需要做什么,那就是您需要做什么,并且规范化的整数格式将无济于事,无论其精确度如何。

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

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

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