【发布时间】:2019-09-21 10:45:10
【问题描述】:
我们目前正在使用 GL_SRGB8_ALPHA8 进行 FBO 颜色校正,但它会在较暗的场景中导致明显的色带。
是否有每个颜色通道具有 10 位的 GL_SRGB8_ALPHA8 版本(例如 GL_RGB10_A2)?如果没有,此用例有哪些解决方法?
附加的图像已添加对比度以使其更明显,但在源中仍然很明显。
【问题讨论】:
-
这取决于您在做什么(并且您没有在问题中指定)。对于 10 位,您需要一个 10 位的视频卡。对于视频渲染,使用浮点数,但不是实时渲染,也不是在您自己的计算机上制作。
-
你是如何使用它的?您说“用于 FBO 颜色校正”。这是否意味着您已经将场景渲染为正常的 8 位纹理,而现在您正在将颜色校正作为单独的步骤进行?
-
@immibis 我对讨论很感兴趣,但不确定问题 cmets 是否适合这个问题。 AFAIU 色带问题与 SRGB 没有直接关系。这是我们必须在所有 8 位/组件显示器上遭受的痛苦吗?即使我们在 FBO 中有 16 位的内部精度,在将图片传输到物理监视器时也会丢失。
-
@AntonDuzenko 我问是因为我也尝试通过从 8 位线性缓冲区开始进行颜色校正,然后将其转换为 sRGB。与 sRGB 相比,8 位线性缓冲区对于较暗的颜色根本没有足够的精度,如果您这样做,除非您直接渲染到 sRGB,或者增加位深度,否则条带是不可避免的,或者使用浮点线性缓冲区。
-
@immibis 如果我在这里错了,请纠正我。让我们同意 SRGB FBO 可以为较深的颜色提供更好的精度。假设线性色彩空间允许 0、1、2、3...255 的等级。假设非线性色彩空间可以做例如0、0.3、0.6、0.9 等。这一切都很好并且工作。但最后我需要将这个高精度的帧图片呈现给 DWM/Monitor。当我通过出色的内部帧缓冲区转换为实际发送到视频卡输出的颜色缓冲区时,这种精度会丢失,我错了吗?不,例如HDMI输出处理线性空间? (与原始问题无关)