【问题标题】:Should WebGL shader output be adjusted for gamma?WebGL 着色器输出是否应该针对伽玛进行调整?
【发布时间】:2012-06-06 06:49:05
【问题描述】:

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

WebGL Specification 目前不包含“gamma”、“γ”或“linear”的相关用法,GL_ARB_framebuffer_sRGB 扩展名为 not available in WebGL。还有其他适用的规范吗?如果未指定,当前的实现会做什么?我们将不胜感激。

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

【问题讨论】:

    标签: webgl color-space gamma


    【解决方案1】:

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

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

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

    【讨论】:

    • 您说“……WebGL 的输出应该在线性颜色空间中”,但又说“WebGL 输出将被假定为 sRGB”,这似乎相互矛盾。你能澄清一下吗?
    • 是的,原因是我打字的速度比我想象的要快。 :) 更正一致性。对不起。
    • 谢谢。仅供参考,该存档 (e.g.) 中的后续消息表明,它实际上仍然是一个未解决的问题(将来可能会使用上下文选项),但由于“OpenGL 传统上是线性的”之类的语言,线性可能会获胜。另外,如果您想真正完善您的答案,最好将第一段放在最后,根据我的问题,我担心的是输出而不是纹理加载。
    • FWIW,当我在加载和输出中明确添加伽马校正时,我得到了更好的结果。不幸的是:/
    • 目前的答案似乎是“是”,因为当前的浏览器不对输出执行伽马校正。您可以使用一些着色器对其进行测试,例如shadertoy.com/view/Xdl3DM 这意味着如果您执行照明并且想要感知准确的输出,则应该在着色器中实现伽马校正。
    【解决方案2】:

    当我在Freenode #webgl(2012 年 6 月 29 日)上提到这个问题时,Florian Boesch 强烈表示几乎所有用户的系统都在 gamma 方面存在无可救药的错误配置,因此只有这样才能变得更好结果是在 WebGL 应用程序中提供 gamma 选项,因为即使 WebGL 为帧缓冲区数据指定了颜色空间(无论是线性的还是非线性的),它也不会为监视器正确转换。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2014-05-26
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多