GL_SRGB_ALPHA 的 10 位替代方案?
10-bit alternative to GL_SRGB_ALPHA?
我们目前正在使用 GL_SRGB8_ALPHA8 进行 FBO 色彩校正,但它会在较暗的场景中导致明显的色带。
是否有每个颜色通道有 10 位的 GL_SRGB8_ALPHA8 版本(例如 GL_RGB10_A2)?如果没有,此用例有哪些解决方法?
附加图像已添加对比度以使其更加明显,但它在源代码中仍然很明显。
从表面上看,Direct3D 9 似乎支持这一点,因为它不会将 sRGB 编码为格式。相反,它将采样器设置为线性解码 space,因此我看不出它在 D3D9 上如何无法正常工作,否则纹理将被错误地过滤。我不知道它是如何实现的。即使 GL_EXT_texture_sRGB_decode 也决定(有一条注释)不启用这种类似 D3D9 的行为。
像往常一样,OpenGL 似乎总是在追逐这个已经过时的 API 的幽灵。它可能只有 D3DSAMP_SRGBTEXTURE 之类的东西,并且它会与它平价。大概硬件实现了它。任何条带都可能取决于显示器,因为最终它必须向下转换为显示器的颜色深度,这可能远低于 10 位。
最终我们得到了线性16位浮点格式
我怀疑驱动程序在内部将它用于 SRGB
无论如何,正如@mick-p 指出的那样,我们总是限于显示颜色深度
我们目前正在使用 GL_SRGB8_ALPHA8 进行 FBO 色彩校正,但它会在较暗的场景中导致明显的色带。
是否有每个颜色通道有 10 位的 GL_SRGB8_ALPHA8 版本(例如 GL_RGB10_A2)?如果没有,此用例有哪些解决方法?
附加图像已添加对比度以使其更加明显,但它在源代码中仍然很明显。
从表面上看,Direct3D 9 似乎支持这一点,因为它不会将 sRGB 编码为格式。相反,它将采样器设置为线性解码 space,因此我看不出它在 D3D9 上如何无法正常工作,否则纹理将被错误地过滤。我不知道它是如何实现的。即使 GL_EXT_texture_sRGB_decode 也决定(有一条注释)不启用这种类似 D3D9 的行为。
像往常一样,OpenGL 似乎总是在追逐这个已经过时的 API 的幽灵。它可能只有 D3DSAMP_SRGBTEXTURE 之类的东西,并且它会与它平价。大概硬件实现了它。任何条带都可能取决于显示器,因为最终它必须向下转换为显示器的颜色深度,这可能远低于 10 位。
最终我们得到了线性16位浮点格式 我怀疑驱动程序在内部将它用于 SRGB 无论如何,正如@mick-p 指出的那样,我们总是限于显示颜色深度