是否应针对gamma调整WebGL着色器输出?

是否应针对gamma调整WebGL着色器输出?,webgl,color-space,gamma,Webgl,Color Space,Gamma,WebGL片段着色器是否应输出线性的RGB值,或输出到某个1⁄γ功率,以便校正显示伽马?如果是后者,是否需要使用特定的值,或者整个应用程序必须是可配置的 当前不包含“gamma”、“gamma”或“linear”的相关用法,并且扩展名为。是否有其他适用的规范?如果这是未指定的,那么当前的实现会做什么?如果您能提供一个来源丰富的答案,我们将不胜感激 (假设我们已经成功加载或按程序生成了线性颜色值;也就是说,纹理图像的伽马值没有问题。)这是一个困难的问题,但从我能够挖掘的(主要是从)来看,当前的行为

WebGL片段着色器是否应输出线性的RGB值,或输出到某个1⁄γ功率,以便校正显示伽马?如果是后者,是否需要使用特定的值,或者整个应用程序必须是可配置的

当前不包含“gamma”、“gamma”或“linear”的相关用法,并且扩展名为。是否有其他适用的规范?如果这是未指定的,那么当前的实现会做什么?如果您能提供一个来源丰富的答案,我们将不胜感激


(假设我们已经成功加载或按程序生成了线性颜色值;也就是说,纹理图像的伽马值没有问题。)

这是一个困难的问题,但从我能够挖掘的(主要是从)来看,当前的行为似乎是在加载线性颜色空间图像(如PNG)时对其进行伽马校正。像JPEG这样的东西不需要任何形式的转换就可以加载,因为它们已经被伽马校正了。(来源:)这表明纹理可能会在非线性空间中传递给WebGL,这将是一个问题。我不确定自2010年末以来这种情况是否有所改变

很明显,期望的行为应该是WebGL的所有输入和输出都应该在线性颜色空间中。超出此范围发生的事情超出了WebGL规范的范围(这就是为什么它对这个问题保持沉默的原因)


对不起,如果这不能权威性地回答你的问题,我只是在尽我所能挖掘这件事。至于你是否应该在着色器中进行校正,我想说答案似乎是“否”,因为WebGL输出将被假定为线性,并且尝试自校正可能会导致颜色空间的双重变换。

当我在#WebGL(2012年6月29日)上提到这个问题时,极力表示,几乎所有用户的系统在gamma方面都存在无望的错误配置,因此获得良好结果的唯一方法是在WebGL应用程序中提供gamma选项,即使WebGL为帧缓冲区数据指定了颜色空间(线性或非线性),它无法正确转换为监视器。

您说“…WebGL的输出应在线性颜色空间中”,但也说“WebGL的输出将被假定为sRGB”,这似乎相互矛盾。你能澄清一下吗?是的,解释是我打字比我想象的要快更正一致性。对不起,谢谢。仅供参考,该归档文件()中的后续消息表明,这实际上仍然是一个未解决的问题(将来可能会有上下文选项),但线性可能会获胜,因为类似“OpenGL通常是线性的”这样的语言。另外,如果你想真正完善你的答案,最好将第一段放在最后,根据我的问题,我担心的是输出而不是纹理加载。FWIW,当我明确地将gamma校正添加到加载和输出中时,我会得到更好的结果。不幸的是:/目前的答案似乎是“是”,因为当前的浏览器没有对输出执行gamma校正。您可以使用某些着色器进行测试,例如,这意味着您应该在着色器中实现gamma校正,前提是您执行照明,并且希望获得感知准确的输出。