我正在寻找一种在着色器中渲染时跳过实例的方法。 我有一百万个实例,为了达到性能,基于当前的视图框,我将根据实例的边界跳过实例。
我可以在任何地方编写条件代码吗?
JS比GPU慢,所以我正在寻找如何在GLSL中实现这种条件
答案 0 :(得分:0)
您无法“跳过”实例。您可以将其所有顶点移出屏幕
attribute float visible;
...
gl_Position = mix(vec4(0, 0, -2, 1), gl_Position, visible);
或类似的东西。如果visible
是1.0,那么您将获得与以前一样的结果。如果visible
为0.0,则其所有顶点都在剪辑空间之外。
您还可以采用某种形式(中心+半径,aabb)传递边界,并有效地执行相同的操作。计算该中心+半径是否在视锥体中,如果未将gl_Position
设置为片段空间之外的内容,则进行计算。当然,如果它们已经不在剪辑空间之内,那么这将无济于事。
不过,对于大多数GPU而言,一百万个实例可能太多了