Обрабатываются ли вершины по-поли для индексированных сеток?

8

Я немного покопался в том, что на самом деле происходит на аппаратном уровне в GPU, и нашел NVidia Life of the треугольник, который довольно хорошо объясняет конвейер, по крайней мере, для зеленых прямоугольников. Одна вещь, которая мне не ясна, это то, что происходит с индексированными сетками, когда одна и та же вершина используется для группы разных треугольников. Поскольку данные обычно не сохраняются дольше, чем это необходимо в потоковом процессоре, я предполагаю, что вершина просто уничтожается после растеризации, затем извлекается и снова запускается через вершинный шейдер всякий раз, когда она появляется в новом треугольнике. Кто-нибудь может это подтвердить? Кроме того, что происходит в режимах линейной или треугольной полос? Сохраняет ли GPU преобразованные данные вершин где-нибудь до тех пор, пока 2 или 3 соответствующих примитива не будут растеризованы в этих случаях?

русс
источник

Ответы:

5

Ключевое выражение, которое вы можете искать, - это «Post Transform Cache» .

Обычно это эффективно из-за естественного повторного использования вершин, но переупорядочение вашей сетки, например, с помощью метода Хоппе (примечание: на странице также перечислены некоторые более поздние работы) или с помощью Форсайта, может улучшить положение вещей.

Саймон Ф
источник
1
Да, это тот. Спасибо. :-) Я занимался индексированными марширующими кубами на довольно больших объемах и мне было любопытно, как они воспроизводятся, поскольку локальность вершин довольно плоха между срезами. Имеет смысл где-то кешировать вершины (наверное, только в стандартном кеше L1 / 2?). Мои сетки, вероятно, не в порядке, чтобы повторно обрабатывать множество вершин, поэтому я рассмотрю эти алгоритмы.
Russ
4

Это зависит от того, насколько далеко друг от друга вершины используются повторно.

Например, квадрат 0, 1, 2, 2, 1, 3будет иметь достаточно короткий интервал , что 1и 2вершины будут повторно использоваться. Но если между повторными использованиями будет сто вершин, более вероятно, что повторного использования не будет.

Но когда они намного дальше друг от друга, вершина выпадает из кэша и должна быть повторно обработана вершинным шейдером.

Вот почему некоторые 3D-программы имеют способ улучшить локальность вершин для индексированных сеток путем переупорядочения вершин.

чокнутый урод
источник