Поиск по сайту

up

Microsoft DirectX 11 – новый виток эволюции игровой графики

10-11-2009

Впервые о DirectX 11 мир услышал в ноябре 2008 года, тогда компания Microsoft представила свои начальные разработки API (Application Programming Interface) и новые возможности обработки графики. Официально же DirectX 11 стал доступен 22 октября 2009 года, вместе с выходом новой операционной системы Windows 7 (хотя доступен в виде обновления и для Windows Vista). Причем первые графические адаптеры для аппаратной поддержки DirectX 11 представила компания AMD еще до официального появления финальной версии API. Графический процессор под кодовым названием RV870 официально является первым в мире решением с полной поддержкой новых технологий, включенных в состав Microsoft DirectX 11. Выпуск Radeon HD 5870 (RV870) от AMD состоялся 23 сентября 2009 года, а первой игрой, в которой можно будет насладиться всей красотой новых технологий, является Colin McRae: DiRT 2 от компании Codemaster, именно они первые заявили об использовании DirectX 11. В недалеком будущем стоит ожидать ответа и от NVIDIA для визуализации новых игр с поддержкой DirectX 11, которых со временем будет все больше и больше.

Фактически новая версия DirectX 11 является расширенной и улучшенной версией своего предшественника DirectX 10. Наиболее серьезным различием между предыдущей и новой версиями API является модуль тесселяции, который присутствует в DirectX 11. Однако есть и другие совершенно новые технологии, которые становятся доступны в новом Direct3D11.

Сравнение возможностей визуализации DirectX 10 и DirectX 11

Сравнение детализации изображения в DirectX 10 и DirectX 11: СТАЛКЕР - Зов припяти

Главные особенности и новшества DirectX 11

  • Tessellator (модуль тесселяции)
  • Shader Model 5.0 (Шейдерная Модель версии 5.0)
  • Compute Shader (Вычеслительные шейдеры)
  • Multithreaded rendering (Многопоточная визуализация)
  • BC6 & BC7 (два новых формата сжатия текстур)
  • Conservative oDepth (Запись шейдера в буфер глубины)

Tessellator (модуль тесселяции)

Тесселяция не является совершенно новой технологией, впервые её стали использовать видеопроцессоры Xenos, которые были разработаны компанией AMD для игровых консолей Xbox 360 в 2005 году. Однако модуль тесселяции использованный в DirectX 11 является более устойчивым и гибким, нежели модуль, использованный в графических процессорах Xenos.

Тесселяция - увеличения количества полигонов

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

Все стадии обрабатываются в графическом процессоре

Процесс тесселяции предмета начинается в Hull Shader (поверхностный шейдер) - он берет контрольные точки и вычисляет нужный уровень тесселяции. После этой базисной реорганизации контрольные точки отправляются в Domain Shader (доменный шейдер) - тесселятор абсолютно ничего не знает о контрольных точках. Вместо этого тесселятору предоставляют некоторое количество параметров тесселяции, которые задают ему требуемый уровень тесселяции на определенном патче (особые минимальные кусочки объекта). Hull Shader сообщает тесселятору, в каком порядке он должен работать - разработчик сможет определить, каким методом произойдет процесс тесселяции, поскольку модуль тесселяции располагает фиксированным комплектом функций, у него есть несколько операционных режимов. Тесселятор берет то, что было подано ему из Hull Shader и действует в патче над формированием требуемой добавочной геометрии. Как только эта стадия будет завершена, он выдаст доменные точки (domain points) и данные топологии. Доменные точки подаются в Domain Shader, который создает на их основе вершины, доступные прочей части конвейера. Одновременно данные топологии адресуются прямо на этап сборки примитивов конвейера - это совершается потому, что данные шейдерам не нужны, они подготовлены для растеризатора. Здесь нужно отметить то, что на всех этапах стадии тесселяции работа ведется не с треугольниками – вместо этого обрабатываются патчи и точки. Патчи представляют собой кривые или области поверхности и практически всегда являются четырехугольниками. Это первый случай, когда DirectX использует в качестве примитивов не треугольники, и это является существенным шагом вперед.

Минимальный уровень тесселяции

Максимальный уровень тесселяции

Все описаное выше осуществляется за один проход через конвейер DirectX 11. Исходя из этого, мы видим, что у него есть значительный потенциал стать невообразимо эффективным способом добавления огромного количества деталей в будущие игры.

Преимущества тесселяции

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

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

Shader Model 5.0 (Шейдерная Модель версии 5.0)

Набор библиотек Microsoft DirectX 11 принес с собой расширение языка низкоуровневого программирования - Shader Model 5.0, который использует объектно-ориентированные концепции, с тем, чтобы облегчить разработку шейдеров и внести некоторые вспомогательные возможности.

Детальное рассмотрение новой шейдерной модели

Это обновление для HLSL (High Level Shading Language) дает программисту полный контроль над компилятором HLSL для решения проблемы специализации шейдеров путем использования интерфейсов, объектов и полиморфизма. Благодаря динамическому контролю за шейдерами, разработчики смогут без проблем создавать большие гибкие шейдеры вместо специализированных оптимизированных версий для применения во время определенных моментов визуализации.

Новый подход к написанию многофункциональных шейдеров

Новый механизм Dynamic Shader Linking позволит вместо написания кучи разнородных шейдеров описания материала и источников света, а также их взаимодействия, создавать один универсальный шейдер с достаточно просто читаемым кодом, что  облегчит и ускорит программирование и отладку.

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

Compute Shader (Вычеслительные шейдеры)

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

Процесс работы Compute Shader

Фактически и на графических процессорах предыдущих поколений производители видеокарт реализовывали подобные функции, которые получали фирменное наименование и применение – технологии ATI Stream и NVIDIA CUDA. Компания же Microsoft в DirectX 11 решила унифицировать расширенные вычислительные возможности видеокарт, позволяя создавать программный код, выполняемый на всех новых видеоускорителях, не зависимо от производителя графического процессора. В качестве применения DirectCompute открываются новые горизонты: постобработка кадров и видеопотока, улучшенный искусственный интеллект, более реалистичная физика и т.д.

В качестве демонстрации возможностей применения Compute Shader компания AMD представила две «демки»: AMD Ladybug DirectX 11 Demo и AMD Mecha DirectX 11 Demo.

Демонстрация эффектов постобработки с помощью DirectCompute

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

Ускорение обработки полупрозрачных материалов с помощью DirectCompute

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

Multithreaded rendering (Многопоточная визуализация)

В DirectX 11 внесли изменения, которые позволят разработчикам усовершенствовать управление GPU со стороны многоядерного CPU. DirectX 11 увеличивает масштабирование ресурсов CPU через модификации в моделях API и драйвера. Асинхронный доступ к устройствам становится допустимым при помощи двух ключевых особенностей объекта Direct3D 11 Device.

Процесс последовательной визуализации

Процесс многопоточной визуализации

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

BC6 & BC7 (два новых формата сжатия текстур)

Самый большой объем памяти в играх чаще всего предоставляется текстурам, поэтому становится ясным стремление разработчиков усовершенствовать сжатие текстур, которое необходимо для минимизации объемов применяемой памяти и снижения требований к ее пропускной способности без влияния на необходимое для визуализации время. DirectX 11 дает разработчикам новоиспеченные форматы сжатия (BC6 для HDR-текстур и BC7 для LDR-изображений и карт нормалей), которые призваны помочь им добиться высококачественной визуализации, не жертвуя при этом производительностью.

Слева расположено оригинальное изображение HDR, готовое к обработке, а справа эквивалентное сжатое BC6 изображение, а по центру изображена абсолютная  погрешность.

Результат применения компрессии BC7 в сравнении с BC3 – потери детализации при использовании нового алгоритма практически отсутствуют.

Conservative oDepth (Запись шейдера в буфер глубины)

Зачастую разработчикам приходится отключать Z-структуры и алгоритмы, когда происходит запись шейдера в буфер глубины сквозь регистр oDepth. Функция Conservative oDepth в DirectX 11 позволяет шейдерам совершать запись в буфер глубины в переделах определенной зарезервированной зоны. Это позволит аппаратным средствам избежать значительной потери в производительности, разрешая использование ускорения за пределами указанной зоны.

Также к числу нововведений DirectX 11, призванных упростить, улучшить и ускорить, относится целый ряд менее значимых возможностей (Addressable Stream Out, Draw Indirect, Pull-model attribute eval, Improved Gather4, Min-LOD texture clamps, Geometry shader instance programming model, Read-only depth or stencil views и др.), правда достаточного объема достоверной и понятной информации по ним пока нет.

DirectX 11 в играх

Все что мы выше описывали, является исключительно обзором того, что добавилось в новом API для разработчиков, однако все же интересно взглянуть на то, что принес новый DirectX для компьютерных игроков всего мира. Кроме новых видеокарт и затрат на них, Direct3D11 вносит в игры новый уровень детализации предметов, увеличение количества различных эффектов и улучшенную обработку световых лучей. Графика в играх, которая была и так сильно приближена к фотореалистичности, станет ещё более яркой и правдоподобной.

Но прежде чем рассматривать потрясающие эффекты, появившиеся благодаря тесселяции, давайте взглянем на эволюцию графических API на примере интересного нового демо-бенчмарка Heaven Benchmark от земляков Unigine Corp.

Unigine Heaven Benchmark DirectX 9.0c

Даже при использовании только возможностей DirectX 9 сцене из Heaven Benchmark смотрятся достаточно эффектно, хотя и не так реалистично, как того хотелось бы.

Unigine Heaven Benchmark OpenGL

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

Unigine Heaven Benchmark DirectX 10.0

По сравнению с DirectX 9 в DirectX 10 появляются возможности аналогичные сцене в режиме OpenGL, но тени получаются более мягкими и цельными, а световые эффекты получаются более реалистичными. Очень хорошо видно преимущество DirectX 10 в динамике, особенно при изменении интенсивности и количества источников освещения.

Unigine Heaven Benchmark DirectX 11

А вот в DirectX 11 наконец-то удается показать, что все объекты в сцене имеют свой индивидуальный рельеф, а также еще на порядок увеличить детализацию всего. Наиболее эффектно и визуально действительно объемными кажется черепица на крыше, рельефные элементы дома, а также камни  вдоль дороги – с брусчаткой разработчики даже перестарались.

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

Без тесселяции

Тесселяция включена

Без тесселяции

Тесселяция включена

Без тесселяции

Тесселяция включена

Без тесселяции

Тесселяция включена

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

Авторы: Роман Дода, Александр Черноиван

При подготовке материала использовалась информация из следующих источников:
www.microsoft.com
news.softpedia.com
www.bit-tech.net
ru.wikipedia.org
www.tomshardware.com
en.hardspell.com

Статья прочитана раз(а)
Опубликовано : 10-11-2009
Подписаться на наши каналы
telegram YouTube facebook Instagram