webgl - WebGL 着色器输出是否应该针对 Gamma 进行调整?

标签 webgl color-space gamma

WebGL 片段着色器输出的 gl_FragColor RGB 值应该是线性的,还是某个 1γ功率以校正显示 Gamma ?如果是后者,是否有特定的值可供使用,或者完整的应用程序必须是可配置的?

WebGL Specification目前不包含“gamma”、“γ”或“线性”的相关使用,并且 GL_ARB_framebuffer_sRGB 扩展名是 not available in WebGL 。还有其他适用的规范吗?如果未指定,当前的实现会做什么?如果有来源良好的答案,我们将不胜感激。

(假设我们已经成功加载或程序生成线性颜色值;也就是说,纹理图像的 Gamma 值不存在问题。)

最佳答案

这是一个困难的问题,但从我能够挖掘的内容(主要来自 this email thread )来看,当前的行为似乎是在加载线性颜色空间图像(例如 PNG)时对其进行 Gamma 校正。像 JPEG 这样的东西无需任何类型的转换即可加载,因为它们已经经过 Gamma 校正。 (来源:https://www.khronos.org/webgl/public-mailing-list/archives/1009/msg00013.html)这表明纹理可能会在非线性空间中传递到 WebGL,这会出现问题。我不确定自 2010 年底以来情况是否有所改变。

Elsewhere in that thread非常明确的是,期望的行为应该是 WebGL 的所有输入和输出都应该位于线性颜色空间中。除此之外发生的事情超出了 WebGL 规范的范围(这就是为什么它对这个问题保持沉默)。

很抱歉,如果这不能权威地回答您的问题,我只是在挖掘有关此事的信息。至于是否应该在着色器中进行校正的问题,我想说答案似乎是“否”,因为 WebGL 输出将被假定为线性的,并且尝试 self 校正可能会导致色彩空间的双重变换。

关于webgl - WebGL 着色器输出是否应该针对 Gamma 进行调整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843321/

相关文章:

javascript - WebGL 参数在浏览器之间不一致

javascript - WebGL 纹理调整大小意外输出

image - YCbCr 颜色空间中的蓝差和红差色度分量是什么意思?

c++ - Gamma 校正看起来没有正确校正,这是线性的吗?

winapi - SetDeviceGammaRamp的正确使用

c++ - 将 OpenGL 1.x 代码移植到 WebGL

android - 为 Android WebView 启用 WebGL 支持

java - 以 jpeg 格式保存色彩空间

css - 使用 CSS 过滤器模拟 Photoshop 的 "Color Overlay"?

css - 脚本能否将网站颜色转换为在多个设备上保持一致?