【问题标题】:Is it possible to set condition for instance in WebGL?是否可以在 WebGL 中设置条件?
【发布时间】:2020-11-21 18:03:57
【问题描述】:

我正在寻找一种在着色器中渲染时跳过实例的方法。 我有 100 万个实例,为了获得性能,我将根据当前视图框跳过实例的边界。

有什么地方可以写条件代码吗?

JS比GPU慢,所以我正在寻找如何在GLSL中制作这个条件

【问题讨论】:

    标签: javascript webgl webgl2


    【解决方案1】:

    你不能“跳过”一个实例。您可以将其所有顶点移出屏幕

    attribute float visible;
    ...
    
      gl_Position = mix(vec4(0, 0, -2, 1), gl_Position, visible);
    

    或类似的东西。如果visible 是 1.0,那么你得到的和你一直得到的一样。如果visible 是 0.0,那么它的所有顶点都在剪辑空间之外。

    您也可以以某种形式(中心 + 半径,aabb)传入边界并有效地做同样的事情。计算该中心 + 半径是否在视锥体中,如果没有将 gl_Position 设置为剪辑空间之外的内容。当然,如果他们已经在剪辑空间之外,那么这将无济于事。

    不过,对于大多数 GPU 来说,一百万个实例可能太多了

    【讨论】:

    • 当顶点不在屏幕上时,它会减少 gpu 负载吗?
    • 当一个三角形的所有顶点都不在屏幕上时,那个三角形就不会被画出来,所以是的。绘制更少的像素 = 更少的 GPU 负载。
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多