В чем преимущество использования треугольника-полосы и треугольника-вентилятора при рендеринге? - PullRequest
3 голосов
/ 09 сентября 2010

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

На данный момент моя абстракция поддерживает рендеринг геометрии только в виде общих списков треугольников (D3DPT_TRIANGLELIST в терминах Direct3D). Есть несколько других способов представления объектов - например, треугольные полосы (D3DPT_TRIANGLESTRIP) или треугольные вееры (D3DPT_TRIANGLEFAN).

Мой вопрос - действительно ли они используются при рисовании геометрии в современных 3D-движках?

Какую пользу может принести их использование и как они вписываются в конвейер создания игр? (Я имею в виду, например, могут ли художники разрабатывать свои модели так, чтобы они использовали эти strips / fans техники?)

Ответы [ 3 ]

5 голосов
/ 09 сентября 2010

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

Поклонники не так распространены. Они могут пригодиться для рисования выпуклых многоугольников, но даже те, которые обычно могут быть сделаны так же эффективно с полосами.

4 голосов
/ 09 сентября 2010

Есть несколько других способов представления объектов - например, треугольные полосы (D3DPT_TRIANGLESTRIP) или треугольные вееры (D3DPT_TRIANGLEFAN).

Мой вопрос - действительно ли они используются при рисовании геометрии в современном 3Dдвигатели?

TriangleStrip часто используются для рендеринга рельефа местности или других типов ячеек с сочетанием индексов перезапускаемых полос (0xFFFF или 0xFFFFFFFF) или вырожденных полос.Они предлагают лучшее соотношение с точки зрения хранения треугольников на индексы.И если у вас есть хорошие сетки, оптимизированные для кеширования вершин, они будут полностью править миром.

TriangleFan присутствуют в D3D9, но были удалены из D3D10 и D3D11.Мой совет, избегайте их использования.Причина, по которой они больше не годятся, заключается в том, что они выполняют ужасную работу в том, что касается интерполяции атрибутов (таких как texcoord или normals), потому что вы можете делать с ними очень тонкие и вытянутые треугольники.

Вы можете поспоритьВы можете сделать это тоже с полосами или списками треугольников, да, конечно, но на самом деле умение делать фанатов приводит к не дружеским (мудрым артефактам) сеткам.Удалив его из D3D, инструменты создания контента, вероятно, будут выводить тесселяцию, которая позволяет избежать длинных треугольников с острыми углами.

Длинные и тонкие треугольники также плохи (с точки зрения производительности), поскольку они генерируют субоптимальные фрагменты квадратов в процессе растеризации (см.отлично Humus post по триангуляции ).

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

2 голосов
/ 09 сентября 2010

Преимущество состоит в том, что они уменьшают объем данных, которые должны быть переданы в механизм рендеринга. Для отправки N треугольников в списке потребуется указать 3*N баллов; если они могут быть представлены как полоса или веер, то вам нужно только указать N+2 баллов

...