Термин "тесселяция" стал широко обсуждаться, начиная с
выпуска Microsoft Xbox 360 в конце 2005 года, - разработанный ATI
видеочип Xenos включал в себя выделенный аппаратный модуль тесселяции.
Причина такого решения была весьма очевидна: это должно было улучшить
процесс создания авторского контента и позволить разработчикам и
художникам создавать более реалистичные и сложные персонажи, избегая
при этом огромных накладных расходов. В основе этого подхода лежала
идея, что объект, расположенный далеко от
точки обзора, будет менее детализирован, потому что его тяжело
рассмотреть, но по мере его приближения число треугольников в
изображении этого объекта экспоненциально увеличивается с целью
увеличения его детализации для того, чтобы он выглядел более
реалистично. Достоинством этого метода является то, что, когда
рассматривают полностью просчитанное изображение, среднее количество
обработанных треугольников остается близко к постоянному значению, так
что игроку значительно реже приходится сталкиваться с резкими падениями
производительности. Традиционно, создание персонажей до момента, как к
ним будет применена
полигональная сетка, продвигается от Sub-D модели к анимированной
модели с картами смещения. Как только сетка будет применена и даже до
того, как её направят в GPU, она будет рассчитана в соответствии с
различными уровнями детализации (LOD). Различные уровни LOD могут
использоваться для различных классов аппаратных средств или они могут
использоваться, когда персонажи или другие столь же значимые объекты
находятся далеко от игрока - это добавляет сцене больше деталей с
минимальными потерями в производительности.
Подобный выигрыш в производительности наиболее реален для консольной
разработки, потому что там аппаратные средства зачастую очень
ограничены. Для платформы ПК тесселяция приносит некоторую существенную
выгоду. И это является одной из причин, почему AMD представило
аппаратное обеспечение для тесселяции в Radeon HD 2900 XT, которое
включено в состав всех последующих GPU компании. По сути оно пока что
ещё не использовалось, но подобный шаг AMD заставил индустрию больше
узнать о потенциальной выгоде, предлагаемой аппаратной тесселяцией.
Тесселятор Xbox 360 (и
видеокарты серий Radeon HD 2000, 3000 и 4000) несовместим с DirectX 11,
но тесселятор DX11 покрывает все продукты, которые уже находятся на
рынке. Другой хорошей новостью является то, что в тесселятор чипов
серии Radeon HD 4000 действительно было внесено несколько изменений,
предоставивших разработчикам доступ к соответствующей функции в
приложениях DirectX 10 - это было невозможно с модулем тесселяции,
находящемся внутри чипов серий HD 2000 и 3000.
К тому же, хотя разработчики вряд ли будут использовать это для
сегодняшних приложений, тесселятор RV7xx является действительно
полезным инструментом, поскольку он позволяет разработчикам и
художникам уже сегодня экспериментировать с тесселяцией в программной
среде, которая, как ожидается, будет очень похожа на DirectX 11. В
конце концов, графический конвейер DirectX 11 - это расширение DirectX
10, главным дополнением которого является тесселятор.
Во время презентации на Nvision 2008 говорилось о том, что модуль
тесселяции DirectX 11 является более устойчивым и более гибким, чем
модули тесселяции сегодняшних GPU AMD (включая Xenos). Однако интересно
то, что он до сих пор непрограммируемый - он полагается на Hull Shader,
который должен предоставлять ему правильную информацию, и на Domain
Shader, который берет данные тесселятора и преобразует их в вершину
прежде, чем отправить их далее по конвейеру.
Процесс тесселяции объекта начинается в Hull Shader (иначе
поверхностный шейдер) - он берет контрольные точки и затем вычисляет
требуемый уровень тесселяции. После этого базисного преобразования
контрольные точки отправляются в Domain Shader (иначе зональный или
доменный, шейдер) - тесселятор ничего не знает о контрольных точках.
Вместо этого тесселятору предоставляют некое количество параметров
тесселяции, которые по сути сообщают ему требуемый уровень тесселяции
на определенном патче. Hull Shader также сообщает тесселятору, в каком
режиме он должен работать - разработчик сможет определять, каким
способом будет выполняться процесс тесселяции, поскольку, хотя модуль
тесселяции и обладает фиксированным набором функций, у него есть
несколько операционных режимов.
Тесселятор берет то, что было передано ему из Hull Shader и работает в
патче над созданием требуемой дополнительной геометрии. Как только эта
работа будет закончена, он выдаст доменные точки (domain points) и
данные топологии.
Доменные точки передаются в Domain Shader, который создает на их основе
вершины, которые доступны остальной части конвейера. Тем временем,
данные топологии направляются прямиком на стадию сборки примитивов
конвейера - это происходит потому, что эти данные не нужны шейдерам,
они предназначены для растеризатора.
Здесь важно отметить, что на всех этапах стадии тесселяции работа
производится не с треугольниками; вместо этого, обрабатываются патчи и
точки. Патчи представляют собой кривые или области поверхности и обычно
являются четырехугольниками (иначе квадами). Конечно, патчи могут быть
представлены и треугольниками, но это менее распространено, потому что
большинство 3D-приложений авторинга работают с квадами. Это первый
случай, когда DirectX работает без треугольников, так что это весьма
существенный шаг вперед.
Все из того, что описано выше, выполняется за один проход через
конвейер DX11, так что у него есть высокий потенциал стать невероятно
эффективным способом добавления большого количества деталей в будущие
игры. Конечно же, разработчики не обязаны использовать эту стадию
конвейера, если им не хочется - если требуется, тесселяцию можно
полностью пропустить.