首页 > 解决方案 > 是否可以在 WebGL 中设置条件?

问题描述

我正在寻找一种在着色器中渲染时跳过实例的方法。我有 100 万个实例,为了实现性能,基于当前的 viewbox,我将根据它们的边界跳过实例。

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

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

标签: javascriptwebglwebgl2

解决方案


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

attribute float visible;
...

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

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

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

尽管如此,对于大多数 GPU 来说,一百万个实例可能太多了


推荐阅读