04 мая 2009
Обновлено 17.05.2023

Ядерный API. Первый взгляд на DirectX 11

Ядерный API. Первый взгляд на DirectX 11 - изображение обложка

До выхода новой — одиннадцатой — версии DirectX осталось не так много времени. Предположительно он появится уже этой осенью в составе Windows 7 и Service Pack 2 для Windows Vista. Сможет ли новый API стать новой общепризнанной платформой для разработчиков игр? Не ждет ли его та же судьба, что и DirectX 10? Именно в этом мы и попытаемся разобраться.

Начнем с небольшой предыстории. Если верить слухам (а они опираются на вполне конкретные факты), самая первая версия DirectX носила кодовое название Manhattan Project. Это прямой намек на ядерную программу США (помимо Америки в исследованиях принимали участие ученые из Канады, Великобритании и Германии), результатом которой стало появление атомной бомбы. Также есть предположение, что первый логотип DirectX был разработан по образу и подобию значка, предупреждающего о радиационной опасности (что и говорить, сходство действительно есть).

Что же касается названия технологии, то, по словам главы проекта DirectX Алекса Джона, DX разрабатывался в паре с приставкой Xbox , которая изначально называлась DirectXbox. Проекты должны были развалить японский рынок видеоигр так же, как некогда сброшенные атомные бомбы стерли с лица земли города Хиросима и Нагасаки. Разумеется, компания Microsoft все отрицает и говорит о том, что дизайн первого логотипа не имеет никакого отношения к роковому желто-черному значку.

Первая версия DirectX появилась в 1995 году. Она вошла в комплект второго пакета обновлений для Windows 95. Под общим названием было собрано сразу несколько компонентов: Direct3D , DirectDraw , DirectMusic , DirectPlay , DirectSound (за что отвечает каждый из них, понятно из названия) и т.д. По сути, программистам предложили набор средств для разработки (так называемый SDK) трехмерной и растровой графики, музыки, коммуникации и других игровых и программных модулей. В состав DirectX входили все необходимые библиотеки, документация и заголовочные файлы.

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

Развитие шло гладко до того момента, как на свет не появился DirectX 10, жестко привязанный к Windows Vista. Популярность этой ОС до сих пор оставляет желать лучшего, а балом продолжает править DirectX 9. Разработчики игр сошлись во мнении, что преимущества десятой версии не столь значимы, чтобы целиком перейти на этот API. С новым DirectX Microsoft не собирается повторять свои старые ошибки. Одиннадцатая версия будет работать и на Windows 7, и на «Висте».

Мы ждем перемен

Нас больше всего интересует графическая составляющая DX. Давайте разберемся, как она работает. Основная задача API — перенос описания трехмерного объекта на двухмерный экран. Интерфейс передает объект драйверу видеокарты и «объясняет» ей, что с ним нужно делать. Финальное изображение формируется в несколько стадий, которые вместе называются графический конвейер.

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

Новая версия API добавит в графический конвейер несколько новых пунктов, главный из которых — обновленный блок тесселяции, который позволит без проблем выводить на экран модели, состоящие из нескольких миллионов полигонов (в современных играх объекты редко состоят больше чем из нескольких десятков тысяч треугольников).

По методике Юлия Цезаря

Еще один очень важный момент. Новые возможности DX11 позволяют с легкостью адаптировать все написанные на нем программы под более ранние версии API, раньше с этим было немало проблем. В первую очередь речь идет об обратной совместимости с DX10 и DX10.1.

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

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

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

Поле битвы: игра

Открытый стандарт OpenGL не смог конкурировать с DirectX на рынке компьютерных игр. Хотя поначалу детище Microsoft не было столь популярно, как сейчас. Первые версии API подвергались критике со стороны разработчиков игр: в плане графики DirectX не предлагал существенных улучшений, но для реализации простейших функций требовался целый ряд ненужных команд. В OpenGL, напротив, все было просто.

Microsoft пыталась задавить SGI (разработчиков OpenGL) при помощи рекламных уловок. Они обещали, что DirectX будет работать быстрее конкурента. Уже тогда было понятно, что низкая скорость работы OpenGL связана не с самим API, а с неудачной его реализацией в среде Windows. С другой стороны, многие игры тогда не использовали DirectX для рендеринга. Вместо этого они обращались напрямую к ресурсам видеокарт через DirectDraw. OpenGL опирался на поддержку со стороны производителей железа, но с появлением новых видеокарт программные недостатки этого API стали видны невооруженным глазом.

Как бы там ни было, но войну выиграла Microsoft. Она выпускала все новые версии API с новыми функциями. Появление DirectX 8 с поддержкой пиксельных шейдеров и шейдерного языка высокого уровня отбросило SGI далеко назад.

На замену процессору

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

Сразу же провели эксперимент. Ученые создали программу Folding@ Home , моделирующую трехмерную структуру протеинов, и оптимизировали ее для работы с графическим чипом. Очень быстро выяснилось, что даже древняя видеокарта AMD Radeon X1900 делает расчеты почти в двадцать раз быстрее самого мощного четырехъядерного процессора. Вдохновленные успехом, производители графических плат начали развивать новое направление, получившее название GPGPU (General-Purpose Graphics Processing Units, GPU общего назначения).

NVIDIA и AMD практически одновременно представили собственные концепции, но в лидеры сразу выбилась технология NVIDIA CUDA. И людей не останавливает даже тот факт, что программы, написанные с ее помощью, могут работать только на видеокартах GeForce (начиная с восьмого поколения и выше).

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

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

Производить общие расчеты сможет любая видеокарта с поддержкой DX11. Технология найдет свое применение не только в играх, но и в других приложениях под Windows. Photoshop CS 4 уже использует возможности видеокарты, но пока на самом примитивном уровне.

3D-словарь

Тесселяция — разбиение модели на полигоны.

Анизотропная фильтрация (AF) — метод снижения искажений картинки. Устраняет эффект размытости, повышает резкость текстур. На данный момент существуют режимы 2x, 4x, 8x и 16x.

Полноэкранное сглаживание (FSAA, AA) — устранение эффекта «лесенки», нечетких краев объектов. На данный момент существуют следующие виды антиалиазинга: суперсэмплинг (SuperSampling), мультисэмплинг (MultiSampling) и CSAA (Coverage Sampling AntiAliasing). По качеству изображения на первом месте стоит суперсэмплинг, но он сильно снижает производительность. Мультисэмплинг обеспечивает хорошее качество сглаживания при меньших затратах. CSAA — относительно новая технология, которая обеспечивает высокий класс сглаживания при разумном расходе ресурсов видеокарты.

Широкий динамический диапазон (HDR) — технология, которая позволяет добиться оптически правильного освещения, а также дает возможность имитировать эффект адаптации человеческого зрения (к примеру, выход из темного помещения на яркий солнечный свет).

Шейдеры — программы, которые определяют вид поверхности объекта. За последние несколько лет шейдерные программы сильно эволюционировали, а кроме пиксельных и вершинных шейдеров появился новый вид — геометрические.

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

Вершинные шейдеры — производят различные операции над вершинами 3D-объектов. Благодаря им в современных играх появились красиво анимированные деревья и трава, волны, развивающаяся одежда.

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

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

* * *

Судя по всему, новый DirectX обеспечит качественный скачок не только в графике, но и в игровой архитектуре в целом. Даже относительно старое железо благодаря распределению нагрузки между ЦП и графическим процессором сможет выдавать очень качественную картинку, да еще рассчитывать физику и, допустим, AI. Но до всего этого нам с вами еще предстоит дожить. Даже если DirectX 11 появится без опозданий, до массового перехода на него разработчикам потребуется еще минимум полтора-два года.

Комментарии
Чтобы оставить комментарий,Войдите или Зарегистрируйтесь