TriangleList против TriangleStrip

Между TriangleStrip и TriangleList, который выполняется быстрее?

Что-то интересное, которое я только что прочитал, говорит: "Мой метод с использованием списка треугольников получил около 780 кадров в секунду, а один с полосой треугольника получил только 70 кадров в секунду". У меня нет подробностей относительно того, что именно он делает, но в соответствии с этим он получает примерно в 10 раз больше частоты кадров, используя TriangleList. Я нахожу этот контринтуитивный, потому что список содержит больше вершинных данных.

Кто-нибудь знает техническую причину, по которой TriangleList может быть намного быстрее, чем Strip?

Ответ 1

Список треугольников может быть намного быстрее, чем полоса, потому что он экономит призывы на рисование, легко группируя данные вершин. Рисование вызовов дорого, поэтому память, которую вы сохраняете с помощью полосы, иногда не стоит снижения производительности.

Ответ 2

Треугольные полосы - это оптимизация памяти, не оптимизация скорости. В какой-то момент в прошлом, когда пропускная способность шины между системной памятью и видеопамятью была основной шейкой бутылки в приложении с интенсивным использованием данных, тогда да, это также сэкономило бы время, но это очень редко. Кроме того, преобразование кеша было очень маленьким в старом оборудовании, поэтому обычная полоса будет кэшировать лучше, чем плохо оптимизированный индексированный список.

Причина, по которой список треугольников может быть равным или более эффективным, чем треугольная полоса, является индексом. Индексы позволяют преобразовать аппаратное преобразование и вершины кэша очень хорошо, учитывая, что вы правильно оптимизировали свою геометрию и порядок треугольников. Кроме того, в очень сложной сетке, требующей большого количества вырожденных треугольников, полосы будут медленнее и занимать больше памяти, чем индексированный список.

Я должен сказать, что я немного удивлен тем, что ваш пример показывает разницу в размере величины.

Ответ 3

Индексированные списки треугольников обычно выигрывают.

Вот простое правило. Подсчитайте количество вершин, которые вы будете загружать на графическую карту. Если список треугольников (точнее, индексированный список треугольников) имеет меньше вершин, чем те же данные, что и треугольная полоска, то, скорее всего, он будет работать быстрее.

Если число вершин очень близко в обоих случаях, возможно, полоса будет работать быстрее, потому что она не имеет накладных расходов на список индексов, но я ожидаю, что это также относится к конкретным драйверам.

Неиндексированные списки треугольников почти всегда имеют наихудший случай (3 верта на треугольник, без совместного использования), если только вы не имеете дело с дизъюнктными квадами, которые также будут стоить 6 вершин на квадрат с использованием дегенеративной десорбции. В этом случае вы получаете каждый квадрат для 4 вершин с индексированными списками треугольников, поэтому он, вероятно, снова выигрывает, но вы бы хотели протестировать на своем целевом оборудовании, я думаю.