Информационные технологииStfw.Ru 🔍

Обзор нововведений DirectX 11

🕛 27.08.2008, 17:42
Не так давно на ежегодной конференции Gamefest компания Microsoft анонсировала новую версию самого популярного в мире графического API - DirectX 11. Эта технология, главные особенности и нововведения которой будут обсуждены в этой статье, позволяет разработчикам использовать преимущества новейших разработок в области аппаратного обеспечения (и это касается как CPU, так и GPU), а также упростит их работу.

Итак, вот перечень основных и наиболее интересных нововведений, которые обещает принести DirectX 11:
* Низкоуровневая поддержка аппаратного обеспечения и операционной системы * Улучшенная многопоточная обработка * Новые этапы аппаратной обработки изображения для тесселяции * Улучшенное сжатие текстур * Shader Model 5.0 * Вычислительные шейдеры (Compute shader) * Новые возможности

Давайте пройдемся по порядку и более подробно остановимся на каждом из обещанных нововведений.

Низкоуровневая поддержка аппаратного обеспечения и операционной системы
Windows Vista и DirectX 10 были спроектированы с целью улучшения базовой модели Windows Display Driver Model (WDDM) и создания широких возможностей повышения производительности драйвера. Кроме того, API DirectX 10 был разработан более "чистым" и простым, максимально лишенным ненужных возможностей, делая тем самым клиентский код более простым для чтения и избавляя разработчиков от лишней головной боли. DirectX 11 содержит в себя достаточно много новых возможностей, чтобы считаться полновесным обновлением, однако он строится на основе DirectX 10 и расширяет его возможности. Любой, кто знаком с DirectX 10 и 10.1, будет также уверенно себя чувствовать и в работе с DirectX 11. С DirectX 11 разработчики смогут использовать аппаратные возможности уровней 10, 10.1 и 11, работая с одним и тем же набором функций.

Время релиза финальной версии DirectX 11 будет соотнесено с релизом новой версии Windows, но этот API будет доступен и для Windows Vista. Таким образом, к моменту выхода нового API все аппаратные средства уровня 10 и 10.1 смогут работать с ним.

Улучшенная многопоточная обработка

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

Во-первых, усовершенствованный процесс синхронизации между объектом Direct3D Device и драйвером позволяет делать асинхронные вызовы API, включая распределение ресурсов. Direct3D 11 предоставляет разработчикам больше свободы при реализации параллелизма, разрешая при этом делать вызовы посредством множества потоков.

Во-вторых, интерфейс Direct3D Device теперь поддерживает несколько контекстов визуализации. 1) главный прямой контекст (Immediate Context), который руководит передачей команд на исполнение в GPU и 2) дополнительные отложенные контексты (Deferred Contexts), создаваемые разработчиком приложения по мере необходимости. Работа, сопоставленная с каждым отложенным контекстом, может выполняться в отдельном потоке/ядре. Это позволяет командам GPU накапливаться параллельно основным процессам визуализации, и после это поступать на выполнение в GPU, когда основной контекст уже готов предоставить на выполнение GPU новую задачу.

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

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

Новые стадии аппаратной обработки изображения для тесселяции
DirectX 11 вносит три новых стадии (hull shader, tessellator и domain shader) в конвейер визуализации. Эти стадии обуславливают функционирование гибкой, программируемой аппаратной поддержки тесселяции. Hull shaders и domain shaders - это программируемые части; Tessellator - это фиксированная функция, но поддержка большого количества настроек обеспечивает контроль над сгенерированными данными позиции.
* Hull Shader Этот программируемый модуль позволяет производить преобразования во входных данных таким образом, что их обработка идет на исходной частоте управляемой ячейки. Обсуждая приложения конвейера, мы часто говорим о том, что внесли кардинальные изменения в этот шейдер, перешли от поверхности одного типа к другому, например, от квадратных ячеек Кэтмула-Кларка (Catmull-Clark) к патчам Безье (Bezier patch).
* Tessellator Этот модуль с фиксированными функциями является по сути расширителем (или экспандером) данных, в котором можно безопасно запараллелить алгоритмы, определяемые пользователями. Он берет на входе параметры тесселяции и вставляет вершины в поверхность в пространстве U, V согласно выбранной схеме разбиения.
* Domain Shader Это модуль выполняется один раз для каждой вершины, а также является местом, где оценивается представление поверхности. Входные данные на этой стадии представлены в U, V-доменах поверхности, готовых к параметрической оценке поверхности.

Конвейер поддерживает несколько типов входных данных (квадратные элементы, треугольные элементы и даже ломаные линии (polylyne)), что позволяет разработчикам работать практически с любым представлением поверхности. Единственным условием, которое должно быть обязательно соблюдено, является поддержка иерархических поверхностей (subdivision surfaces) для визуализации символов.

Аппроксимационные схемы иерархических поверхностей
Чарльз Луп (Charles Loop)и Скотт Шафер (Scott Schaefer) из Microsoft Research работали над несколькими вариантами подходов к аппроксимации иерархических поверхностей (или поверхностей с разбиением), которые могут быть применены в конвейере DirectX 11. Один из таких подходов, представленный как сэмплы DirectX 10 в DirectX SDK, изменяет основную сетку квадратных элементов на поверхности Безье путем фиксированной тесселяции. В применении к конвейеру DirectX 11 эта и другие схемы могут использоваться для визуализации в реальном времени сетки иерархических поверхностей.

Улучшенное сжатие текстур
Наибольший объем памяти в играх зачастую отводится текстурам, поэтому становится понятным стремление разработчиков улучшить сжатие текстур, которое необходимо для сохранения объемов используемой памяти и требований к ее пропускной способности на уровне, необходимом для визуализации в реальном времени. DirectX 11 дает на вооружение разработчикам новые форматы сжатия (BC6 и BC7), которые призваны помочь им достичь высококачественной визуализации, не жертвуя при этом производительностью. Здесь мы сосредоточимся на двух определяющих примерах того, как технология DirectX 11 улучшает качество визуализации. Некоторые из вас, возможно, более знакомы со старым DXT-наименованиям, которые были заменены на "block compressed"-терминологию (BC) в DirectX 10. Здесь используются новые наименования.
* Сжатие текстур изображений High Dynamic Range (HDR) Сегодня изображения с использованием HDR-текстур очень распространены в играх. В сочетании с интеллектуальными операторами карт тонов, использование HDR часто делает изображение более фотореалистичным. Новая схема сжатия блоками, BC6, была разработана для обеспечения высококачественного сжатия 6:1 данных HDR-изображения с последующей декомпрессией посредством аппаратного обеспечения.
Выше вы можете увидеть сравнительное изображение для формата HDR. Слева расположено оригинальное изображение HDR, готовое к обработке, а справа - эквивалентное изображение BC6. На центральном изображении показана абсолютная погрешность. Обратите внимание, что на изображении Abs отсутствую очевидные ошибки, возникающие при разбиении на блоки; в большинстве своем видимые ошибки представляют собой шумы. Визуально они гораздо менее заметны человеческому глазу, нежели края блок, обычно остающиеся после декомпрессии.
* Low Dynamic Range (LDR) / сжатие посредством использования карт нормалей (Normal Map)
Новая схема BC7 обеспечивает поддержку сжатия 8-битных (LDR) данных в соотношении 3:1. Ниже вы можете увидеть сравнение результатов нового формата с текущим подходом сжатия блоков, BC3.
Здесь вы можете отчетливо видеть артефакты, возникшие после разбиения на блоки в изображении BC3, которых стало существенно меньше в изображении BC7. Благодаря этой функции, разработчики и художники могут больше выжимать из их линейных текстур и карт нормалей, при этом размер занимаемой памяти будет таким же или меньшим.

Shader Model 5.0
Технология DirectX 10 дала нам Shader Model 4.0, которая помимо всего прочего включает в себя полную поддержку целочисленных инструкций и битовых операций. Direct3D 10.1 принес с собой Shader Model 4.1 вместе с поддержкой прямого доступа к выборкам MSAA. DirectX 11 включает в себя Shader Model 5.0, которая использует объектно-ориентированные концепции, чтобы облегчить разработку шейдеров и внести дополнительную поддержку для двойной точности. Это обновление для HLSL (High Level Shading Language) отдает вам полный контроль над компилятором HLSL для решения проблемы специализации шейдеров путем использования интерфейсов, объектов и полиморфизма. Благодаря динамическому контролю за шейдерами, разработчики могут легко создавать большие, гибкие шейдеры и предоставлять специализированные, оптимизированные версии для использования во время определенных моментов визуализации.

Вычислительные шейдеры (Compute Shader)
Любому, кто уже знаком с использования GPU для выполнения задач общего назначения, будет интересно услышать о новом вычислительном шейдере, который дает аппаратному обеспечению от различных производителей поддержку для программирования GPU на выполнение задач общего назначения (GPGPU или General Purpose GPU). Многое уже было сделано в направлении использования больших вычислительных мощностей GPU для решения крупных вычислительных задач на узкоспециализированных рынках. Вместе с вычислительным шейдером из DirectX 11 компания Microsoft делает возможным использование этих алгоритмов обычными клиентами на широком спектре аппаратных средств. Давайте посмотрим, какие новые возможности открывает перед разработчиками игр и других приложений использование GPU в задачах, отличных от рендеринга.

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

Дополнительные возможности
DirectX 11 содержит в себя гораздо больше интересных нововведений, чем мы можем рассмотреть в этом обзоре, но не хочется заканчивать статью, не упомянув еще о двух функциях нового API.
* Conservative oDepth Обычно разработчикам приходится отключать Z-структуры и алгоритмы, когда происходит запись шейдера в буфер глубины через регистр oDepth. Функция Conservative oDepth в DirectX 11 позволяет шейдерам производить запись в буфер глубины в переделах указанной зарезервированной области. Это позволяет аппаратным средствам избежать существенной потери в производительности, разрешая использование ускорения за пределами указанной области.
* Ограничение для текстур в 16K и привязка текстур DirectX 11 поднимает ограничение на максимальный размер текстур с 4K до 16K, а также предоставляет контрольные привязки MIP-LOD для ограничения числа mipmap-уровней, загруженных в GPU

Заключение

Собственно, мы очень рады представить вам новую версию DirectX первыми. Эта версия будет работать как в Windows Vista, так и в будущих версиях Windows. Что наиболее важно, DX11 будет совместим с картами DX10 и DX10.1, добавляя новые функции картам DirectX 11. Многие из описанных выше функций предназначены облегчить жизнь разработчикам, обеспечивая ряд новых функциональных возможностей и прирост в производительности. Остается с нетерпением ждать технического превью DirectX SDK, которое выйдет в ноябре 2008 года.

Для получения дополнительной информации об аппроксимации иерархических поверхностей, смотрите пример Sub-Division Surface в DirectX SDK. Также следует обратить внимание на презентации с Gamefest 2008 "Multithreaded Rendering for Games" и "DirectX 11 Tessellation", которые скоро появятся на MSDN-портале DirectX.

Новые программы   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉