我正在使用实例化在 opengl 中渲染数百万个四边形,并且效果很好。基础四边形有 6 个顶点,每个实例都有一个 vec3 来表示其位置。然而,对于每个实例,我需要根据实例的位置计算一些向量。如果我在顶点着色器中执行此操作,我将为每个实例计算这些向量 6 次。有没有办法每个实例只计算一次?
在有人提到几何着色器之前,我之前使用过几何着色器,但我切换到实例化,因为它很慢。也许有办法同时使用两者?它有好处吗?
最佳答案
序言:不要通过实例渲染四边形。实例化,on various hardware ,当实例的大小不是非常小时,效果最佳。小型实例可能会降低此类硬件的大量性能。
另外...为什么您的实例化基础四边形有 6 个不同 顶点(而不是 4 个顶点,其中 2 个顶点是共享的)?如果您要使用实例,最好使用三角形带,每个实例都是 4 元素带。
至于你问题的主旨……不。没有实例着色器,也没有办法让 VS 按实例而不是按顶点执行某些代码。
但是,您真的不应该为此感到压力。如果计算是“基于实例的位置”,那么这意味着主要的性能问题是读取每个实例的数据,而不是计算。 GPU 必须能够有效地处理读取相同内存地址的多个调用,因此您可以假设从该地址读取 4 次调用不会比从该地址读取 1 次调用慢多少。
所以,接受它并继续前进。
关于opengl - 你能计算每个实例而不是每个顶点的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460750/