【问题标题】:Can I avoid texture gradient calculations in webgl?我可以避免 webgl 中的纹理渐变计算吗?
【发布时间】:2016-01-15 11:55:38
【问题描述】:

我们有一个 webgl/three.js 应用程序,它广泛使用纹理缓冲区在通道之间传递数据和存储数据数组。这些都对 mipmap 没有任何用处。我们可以很容易地阻止 mipmap 生成:在 three.js 级别,我们将 min 和 mag 过滤器设置为 NearestFilter,并将 generateMipmaps 设置为 false。

但是,着色器在编译时并不知道没有 mipmapping。使用 ANGLE 编译时,我们会收到很多警告消息:

警告 X4121:必须将基于梯度的操作移出流控制以防止发散。使用非梯度操作可以提高性能

我已经重新编码,以便(可选地)避免围绕此类查找的流程。 在我的 Windows/NVidia 机器上,使用条件流可以提高性能并且不会导致任何视觉问题(但会导致消息)。

我不希望纹理查找是基于梯度的操作。我想做的是以他们在编译时知道没有决定的方式编写着色器;这应该(略微)提高性能并让消息消失。但是,我在 GLES 2 的 GLSL 中看不到任何方法(由 webgl 使用)。它可以在以后的版本中使用 textureLodOffset() 和其他各种方式来完成。我可以看到的第 2 级中唯一的控制是 texture2D() 上的偏差选项,但这是一个偏差而不是绝对值,因此不能解决问题。所以,最后……

问题:您知道在 WEBGL 级别 GLSL 着色器中防止 lod 计算的任何方法吗?

【问题讨论】:

    标签: three.js glsl webgl glsles


    【解决方案1】:

    您可以尝试确保:

    • 使用gl_FragCoord 代替用户变化
    • NEAREST 设置在texImage2d 之前,而不是之后

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多