【问题标题】:Does stripifier techniques gives performance increase?剥离剂技术是否会提高性能?
【发布时间】:2012-12-18 11:30:38
【问题描述】:

我读过很多次,将几何从三角形合并到三角形带或三角形扇形可以提高 3D 渲染的性能,因为必须处理的顶点更少等等......所有这些考虑在使用 VBO 的上下文中的相关性有多大和索引渲染?

例如,我有一个由三角形组成的图元(球体)。我有 VBO,我只存储唯一的顶点,我有 VBO(绑定到 GL_ELEMENT_ARRAY_BUFFER),我存储索引以从顶点构造图元。所有渲染都是通过glDrawElementsInstanced() 完成的。在应用一些条带化技术并将我的基元渲染为 GL_TRIANGLE_STRIP 并启用基元重启后,我是否会获得任何性能提升?

文档说 OpenGL 管道在所有每个顶点操作之后和光栅化之前组装图元。我可以猜到,这意味着驱动程序首先为所有顶点调用顶点(几何等)着色器,然后才开始使用索引数组来获取三角形。如果属实,则条带化会减慢进程,因为将应用对原始重启的额外检查。

我试图找到一些剥离器库,但我发现的所有东西看起来都在几年前被遗弃了。于是人们突然对这个领域失去了兴趣……

考虑到所有这些因素,没有必要进行剥离。我是正确的还是我错过了一些重要的事情?是否需要在现代硬件上进行剥离?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    一般来说,不会,您不会从三条带中获得优势。现代硬件期待索引数据,并为此进行了优化。

    这并不是说可以随机访问索引 - 由于数据被缓存,局部性很重要。因此,按条形顺序排列三角形可能会有所改进。

    性能也会有所不同,具体取决于实际花费了多少时间来担心三角形设置和顶点处理,以及实际着色的时间。

    与所有事情一样 - 分析你的表现,看看什么对你自己的情况有效,但自从 PS2 以来,我就再也没有为剥离三角形而烦恼了。

    【讨论】:

    • 谢谢。你能给我指出一些关于生成好的索引数组的事情吗?例如,我有一个三角形汤,需要考虑到数据的局部性,消除所有重复的三角形。有没有好的算法,或者最好的方法是进行条带化并因此获得局部性?
    • @OlegTitov 老实说,我们不会费心对我们的数据做任何事情。我怀疑我们获得足够的局部性只是偶然,因为导出的模型数据很少是完全随机的。除非我知道那里存在真正的性能瓶颈,否则我什至不会考虑。
    • @JasonD:除此之外,如果你真的需要本地化你的数据,这很容易:将人脸填充到一个八叉树中,并在所述树的深度优先遍历中将它们写出来。
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2010-10-09
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多