четверг, 9 октября 2008 г.

Тесселяция

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

Зачем нужна тесселяция? Ведь есть возможность динамического изменения числа полигонов, если можно изначально создать объект с большим числом полигонов. Конечно, если объект находится близко, то для придания реалистичности можно сразу использовать сетку с большим числом полигонов. Однако по мере удаления объекта такой подход становится неоптимальным, поскольку на качестве картинки это не скажется и ресурсы процессора будут израсходованы впустую. Для удаленных объектов целесообразно применять сетки с невысоким числом полигонов.
Именно поэтому разработчики зачастую идут на компромисс, используя среднее число полигонов. Этот подход далек от совершенства, и тесселяция позволяет избежать проблем, связанных с необходимостью применения разного числа полигонов на сетке при приближении и удалении одного и того же объекта. В каком-то смысле тесселяция напоминает mip-уровни для текстур, когда используются различные детализации одной и той же текстуры в зависимости от положения объекта на экране.

Игровые 3D сцены, персонажи и объекты формируются из полигонов, которые состоят из треугольников. Для примера, представьте себе пирамиду с квадратным основанием. Она создана из смежных треугольников и основания, в ней каждая сторона представляет собой один большой треугольник, а основание составлено из четырех треугольников.
Другие объекты создаются точно таким же способом, смежные треугольники создают вместе более сложные формы, что и показано ниже.
В примере с нашей пирамидой нужно использовать не меньше и не больше восьми треугольников для создания формы. Меньшее количество треугольников не создадут требуемой формы, а большее количество никак не повлияет на вид. С другой стороны, в более сложных геометрических конструкциях разница между минимально требуемым и большим количеством полигонов уже явно заметна.
Для иллюстрации наших слов составим сферу из восьми смежных треугольников. Они создают некое подобие сферического объекта, который на самом деле состоит из двух пирамид, соединенных основаниями. Повышая число треугольников, или сегментов сферы, мы придаем объекту более реалистичный вид, так как в окружающем нас мире сфера может быть представлена только бесконечным количеством полигонов.

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

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

Художник должен соблюдать баланс между числом треугольников, описывающих сцену, и ее визуальным качеством. Однако еще раз отметим, что для идеально реалистичного представления сцены необходимо использовать бесконечное число треугольников, однако это не представляется возможным. Игры должны выпускаться с учетом оборудования, на котором они будут работать. Причем для успешной продажи игра должна запускаться не только на самых мощных системах, поэтому большинство игр значительно ограничивают количество используемых на сцене полигонов. Например, в Quake III Arena в среднем в сцене используется 10 000 полигонов.

Мы приходим к тому, что количество полигонов нужно бы увеличить для лучшего восприятия игры, но аппаратные границы сдерживают замыслы художников. Если мы все же постараемся улучшить качество игры, то логичным решением будет увеличение количества полигонов (или треугольников). Однако существуют и другие способы о которых мы поговорим немного позже