Новые возможности DirectX 11: тесселяция

Автор: Topol Суббота, Апрель 21st, 2012 Нет комментариев

Рубрика: Операционные системы

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

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

Традиционно, создание персонажей до момента, как к ним будет применена полигональная сетка, продвигается от Sub-D модели к анимированной модели с картами смещения. Как только сетка будет применена и даже до того, как ее направят в GPU, она будет рассчитана в соответствии с различными уровнями детализации (LOD). Различные уровни LOD могут использоваться для различных классов аппаратных средств или они могут использоваться, когда персонажи или другие столь же значимые объекты находятся далеко от игрока — это добавляет сцене больше деталей с минимальными потерями в производительности.

Подобный выигрыш в производительности наиболее реален для консольной разработки, потому что там аппаратные средства зачастую очень ограничены. Для платформы ПК тесселяция приносит некоторую существенную выгоду. И это является одной из причин, почему AMD представило аппаратное обеспечение для тесселяции в Radeon HD 2900 XT, которое включено в состав всех последующих GPU компании. По сути оно пока что еще не использовалось, но подобный шаг AMD заставил индустрию больше узнать о потенциальной выгоде, предлагаемой аппаратной тесселяцией.

Поговорив с Кевином Гии (Kevin Gee) из Microsoft и Ричардом Хадди из 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, так что у него есть высокий потенциал стать невероятно эффективным способом добавления большого количества деталей в будущие игры. Конечно же, разработчики не обязаны использовать эту стадию конвейера, если им не хочется — если требуется, тесселяцию можно полностью пропустить.

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты