我一直在研究GPU的硬件级别上实际发生的情况,发现NVidia的“三角形的生命”可以很好地解释管道,至少对于绿箱而言。我不清楚的一件事是,当一堆不同的三角形使用相同的顶点时,索引网格会发生什么。由于数据通常不会在流处理器中保留所需的时间,因此我猜测顶点在栅格化之后会被简单破坏,然后只要出现在新的三角形中就被提取并再次遍历顶点着色器。有人可以确认吗?此外,在直线条纹或三角形条纹模式下会发生什么?在这种情况下,GPU是否会将转换后的顶点数据保留在某个位置,直到对2或3个相关基元进行栅格化?

#1 楼

您可能要查找的关键表达式是“ Post Transform Cache”。

由于自然的顶点重用,这通常是有效的,但是对网格进行了重新排序,例如使用Hoppe的方法(请注意:该页面还列出了一些最近的工作),或者Forsyth可以进一步改进。

评论


$ \ begingroup $
是的,就是那个。谢谢。 :-)我一直在做大量索引的行进多维数据集,并对它们的渲染方式感到好奇,因为切片之间的顶点局部性很差。将顶点缓存在某个位置是有意义的(我想只是在标准的L1 / 2缓存中?)。我的网格物体可能杂乱无章,无法重新处理很多顶点,因此我将研究这些算法。
$ \ endgroup $
– russ
16年8月16日在9:06

#2 楼

这取决于顶点被重用的距离。例如,正方形0, 1, 2, 2, 1, 3的间隔足够短,可以重用12的顶点。但是,如果重用之间有一百个顶点,那么很可能就不会有重用。

但是,如果它们相距很远,则顶点将从缓存中掉出来,必须对其进行重新处理。顶点着色器。

这就是为什么某些3D软件可以通过重新排列顶点来改善索引网格的顶点局部性的原因。