DirectX10: новое средство для разработки 3D игр.

для раздела Блоги
DirectX10: новое средство для разработки 3D игр.

Введение.

Перед тем как переходить непосредственно к DirectX10 необходимо пояснить, что такое DirectX и немного рассказать о возможностях очень эффективного и популярного в настоящее время пакета DirectX9.0, который используется практически всеми играми в той или иной степени, выпущенными с начала 2004 года. В настоящее время игр, в полной мере использующих возможности DirectX9.0, всё ещё очень мало и весь потенциал этого набора API (Application Programming Interface) функций ещё не раскрыт.

DirectX – это набор низкоуровневых интерфейсов для создания прикладной программы, то есть набор API функций, предназначенный для эффективного и удобного программирования 3D-графики и других мультимедийных приложений, в нашем случае будет рассматриваться только создание трёхмерных сцен в компьютерных играх. В состав DirectX также входит набор функций для работы с устройствами ввода, так называемый Direct Input, набор функций для работы со звуком, Direct Sound и ещё несколько компонентов для работы с сетью и для работы с мультимедийными потоками, т.е. его захват и вывод, которые как уже упоминалось выше необходимы для создания других мультимедийных приложений. Я хочу заострить внимание на графических возможностях DirectX10 и поэтому далее об этих возможностях упоминаться не будет, поэтому остановимся на Direct Graphics. Для тех, кому возможно захочется разобраться в этой теме подробнее, может даже захочется создать что-нибудь своё, то рекомендую для начала изучить язык программирования C++, затем скачать с сайта Microsoft пакет с документацией и примерами программ на DirectX, он называется DX SDK (DirectX Software Developer Kit). Сразу поясню, что для работы с ним вам понадобится среда разработки Microsoft Visual Studio .NET 2003 или более поздняя версия.

Коротко о возможностях DirectX9.0.

Я думаю, что не стоит углубляться в программирование графики, ведь далеко не каждый имеет навыки программирования и поэтому я лишь поясню некоторые возможности DirectX9.0 о которых возможно многие уже знают и нового ничего не услышат. Используя DirectX9.0 можно создавать трёхмерные сцены высокого качества с высокой степенью детализации в реальном времени. Одной из главных возможностей этого набора функций является возможность программировать графику используя шейдеры. Шейдер - это специальная программа, которая использует определенные программируемые регистры видеокарты для создания различных графических эффектов. Как вы все наверное знаете поддержка Shader Model 2.0 начинается именно с DirectX9.0, более ранние версии DirectX не имеют этой поддержки, далее были разработаны компанией ATI более продвинутые виды шейдеров Shader Model 2.0b, в которых была увеличена длина инструкции и добавлены некоторые новые возможности. Для этой модели шейдеров был выпушен обновлённый пакет DirectX9.0b, но к сожалению эта модель шейдеров не получила широкого распространения и использования программистами графики, далее были разработаны Shader Model 3.0, которые в значительной мере расширили возможности программирования графики, с приходом этой модели шейдеров появилась возможность динамического ветвления и была значительно увеличена длина инструкции и конечно же для поддержки этой модели программируемой графики была выпущена новая версия DirectX9.0c. Так же необходимо упомянуть, что шейдеры бывают двух типов, Vertex Shader и Pixel Shader, каждые из которых используются для решения различных задач. В DirectX10 появилась новая модель шейдеров, Geometry Shader, которая значительно расширила возможности для программистов.

Одна из технологий визуализации, наиболее заметная в современных играх называется Bump Mapping, этот эффект создает на плоской поверхности рельефность, в результате чего эта поверхность уже не кажется плоской. Можно вспомнить отличную игру Far Cry от разработчика CryTek, которая как гром среди ясного неба появилась на прилавках магазинов и сразила всех наповал своими графическими возможностями, причём сразила не только всех людей, но и практически все системы, поскольку для комфортной игры требовалась система с конфигурацией Hight End класса. Так вот в этой игре возможности DirectX9.0 были раскрыты по максимуму на тот момент, это было 23 февраля 2004 года. Даже вышедшие позже легендарные DOOM 3 и Half-Life 2 не казались такими уж великолепными, на фоне Far Cry. Я упомянул именно Far Cry поскольку именно в этой игре применили Bump Mapping практически к каждому объекту и каждой поверхности в игре, с разной степенью успеха. Посмотрев на пару скриншотов ниже, можно с уверенностью сказать, что плитка на полу имеет трёхмерную структуру, но на самом деле это просто графический эффект создаёт это изображение. Так же как, например мышцы на теле у главного мутанта в игре тоже выглядят трёхмерными или даже живыми, оставаясь при этом плоскими.

Рис. 1. Плитка с эффектом Bump Mapping.
Рис. 2. Мышцы с эффектом Bump Mapping.

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



У этого эффекта есть один главный недостаток, дело в том что на углах поверхности эффекта трёх мерности добиться невозможно и поэтому это главное место, где можно увидеть, что применён именно эффект Bump Mapping. Вообще этот эффект во многом облегчил работу моделерам, ведь им теперь не надо уделять особое внимание мелким деталям на модели, потому что реализовать это стало возможно простым применением этого эффекта, но простым это только в сухой теории, ведь реально применить эффект Bump Mapping не такая уж простая задача.

Одним из более эффективных в плане визуализации эффектов является Parallax Occlusion Mapping, его смысл такой же как и у Bump Mapping, т.е. создать детальную поверхность с множеством мелких деталей на молополигональной модели. Главное отличие этого эффекта от Bump Mapping заключается в присутствии эффекта параллакса. Параллакс – видимое смещение объекта из-за изменения угла наблюдателя, именно этого нет у Bump Mapping`а. Обратите внимание на пару скриншотов ниже, на которых демонстрируется преимущество эффекта Parallax Occlusion Mapping над эффектом Bump Mapping. Эти снимки сняты с демонстрационного демо-ролика от ATI под названием Toy Shop, его можно скачать с этой страницы либо как приложение (114Mb), в таком случае для запуска демки вам понадобится видеокарта ATI серии X1800 или выше, либо можно скачать отснятое видео (91Mb), что более удобно для пользователей, не имеющих данную видеокарту.

Рис. 3. Parallax Occlusion Mapping.
Рис. 4. Bump Mapping.

Для создания такого эффекта необходимы три текстуры, нормальная карта, карта нормалей и карта высот. Последняя и создаёт более реальную трёхмерную поверхность. Для эффективного использования этого эффекта необходимо комбинировать Bump Mapping и Parallax Occlusion Mapping, т.к. последний очень серьёзно «кушает» системные ресурсы видеокарты и, применяя только его для всей сцены это просто «повесит» систему. Лично я на сегодня ни в одной игре не видел применения этого эффекта, несмотря на то, что он реализуется на DirectX9.0c, которому на смену в скором времени прейдет DirectX10, это к теме о нераскрытом потенциале.

Рис. 5. Текстуры для эффекта Parallax Occlusion Mapping.

Ещё есть множество графических эффектов, которые можно реализовать средствами DirectX9.0c, например реализация мягких теней, мягких частиц, которые до сих пор не получили реального воплощения в играх. Так же не так давно компания ATI стала демонстрировать новую возможность, так называемый «Render to Vertex Buffer», часто пишут коротко «R2VB», необходимо отметить, что эта технология находится на экспериментальной стадии, в полной мере эта возможность будет реализована на DirectX10. Эта технология позволяет осуществлять множество решений средствами видеокарты, например анимация большого количества объектов, отрисовка теней от чётырёх источников света одновременно, далее обработка до 1.000.000 частиц (на X1900 получаем 45 FPS), генерация океанских волн (обеспечивает десяти кратное увеличение производительности, по сравнению с CPU), реальное моделирование снега. Предлагаю посмотреть на скриншоты и убедиться на сколько широки возможности DirectX9.0c.

Например на этом скриншоте это чудо носиться по снегу, создавая в нём углубления, т.е. протаптывая снег, при этом снег постепенно восстанавливает свою форму, поскольку с неба падают снежинки, разве не круто было бы это увидеть в игре?

Рис. 6. Динамика снега (R2VB).

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

Рис. 7. Динамика океанских волн (R2VB).

Тут, как я упомянул выше, происходит отрисовка теней от одного анимированного объекта и чётырёх источников света. Для игр это очень важно, это создаёт эффект реалистичности. Помню ещё в 2005 году, разработчики игры S.T.A.L.K.E.R Shadow of Chernobyl в интервью говорили, что они реализовали отрисовку теней от множества источников света, но пока об этом знают только сами разработчики.

Рис. 8. Тени от четырёх источноков света (R2VB).

Думаю хватит о DirectX9.0, пара уже переходить на разъяснение возможностей DirectX10, я хочу сказать что я упомянул лишь пару эффектов из пакета DirectX9.0, поскольку рассказывать о всех эффектах в рамках одной статьи очень тяжело, да и как вы должно были заметили, это не легко воспринять за один раз. И ещё, рассказывая обо всех эффектах можно очень и очень долго, поэтому я остановлюсь на этом.

Возможности DirectX10.

В начале этого пункта стоит напомнить, что DirectX10 будет поддерживаться только операционной системой Windows Vista, т.е. для игр под DirectX10 вам обязательно потребуется установить эту операционную систему. Но не стоит сразу огорчаться, поскольку практически все проекты будут разрабатываться как для DirectX10 так и для DirectX9.0c, так что тем, у кого нет возможности для перехода на новую платформу, по-прежнему смогут играть в новые игры. Далее пойдет практически только техническая сторона DirectX10, поэтому стоит читать внимательно, если конечно это вас интересует.

В DirectX10 появился новый конвейер (pipeline), который включает в себя:

- ортогональный фрейм буфер (Orthogonalized Frame Bufer)
- геометрический шейдер (Geometry Shader)
- поточный вывод (Stream out)

К возможностям ортогонального фрейм буфера относится следующее. Разнообразные виды позволяют подключать ресурсы к различным частям конвейера. Возможность по-разному интерпретировать ресурсы. Позволяет рециркулировать данные. Осуществляет доступ к текстурам VS, GS и PS. Буфер констант позволяет хранить большее количество данных, осуществляет более быстрое обновление констант, появилась возможность группировки констант в различные буфера для более эффективного обслуживания, таким образом исчезают ограничения DirectX9.0. Новые возможности включают в себя более эффективную многопроходную отрисовку, например расчёт анимации производится один раз, а отрисовка по этим данным производится необходимое количество раз, что позволяет сильно уменьшить нагрузку на графический и центральный процессор, поскольку вычисления произвели всего один раз, а не как например это происходит в DirectX9.0c, где вычисления производятся при каждой отрисовке. Так же появилась так называемая возможность: карты смещения (Displacement mapping), позволяет создавать в игре не повторяющиеся объекты, например лес, ещё эта возможность позволяет создавать огромные ландшафты и реализовывать некоторые другие решения. Ещё одной интересной особенностью является альтернативная интерпретация данных. И наконец добавлена возможность создания эффектов на основе GPGPU методов, позволяет производит простые расчёты физики, например соударение частиц с поверхностью земли, таким образом можно освободить от некоторой работы CPU.

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

Следующее относится к поточному выводу. Позволяет сохранять результаты вывода GS (геометрический шейдер), работает с переменным количеством примитивов. При выводе все топологии конвертируются в списки примитивов, в так называемый «triangle list» и другие списки. Альтернативный способ вывода помимо отрисовки в текстуру/VB. К новым интересным возможностям в этой области относится расчёт значений для примитивов, например нормали треугольников. Экструзия объёмов теней позволяет производить анимацию на GPU с поточным выводом (невозможно в DirectX9), экструзия производится в GS – генерация боков объема теней, экструзия на DirectX10 работает на 20% быстрее, чем на DirectX9.0.

Анимация в DirectX10.

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

Обзор некоторых достижений.

Перед тем, как переходить к демонстрации некоторых, уже достигнутых реализаций DirectX10, хочу заметить, что «железо» всё ещё не готово, но есть возможность реализовать некоторые эффекты из набора средств пакета DirectX10 на видеокарте DirectX9.0, работает всё это дело вроде бы неплохо и разработчики уже сегодня могут проанализировать на глазок производительность DirectX10.

Для начала предлагаю посмотреть на эту замечательную рыбку, отрисованную на разных версиях DirectX. На первом изображении (рисунок 9) отчётливо виден недостаток детализации, рыбка просто ужасна. На втором изображении (рисунок 10) увеличено количество треугольников с 1480 до 23680, т.е. в шестнадцать раз и соответственно заметно увеличилась детализация изображения, но как вы должны были заметить, на модели присутствует противный блеск, который многих раздражал в игре Far Cry. На третьем изображении (рисунок 11) снова возвращаемся к 1480 треугольников, но применяем эффект карты смещения (Displacement mapping), доступный только в DirectX10, о котором было упомянуто выше и в результате получаем детальную модель с малым числом треугольников и с отсутствием противного блеска.

Рис. 9. Модель содержит 1480 треугольников.
Рис. 10. Модель содержит 23680 треугольников.
Рис. 11. Модель содержит 1480 треугольников, но применён эффект карты смещения.

А вот отличный пример использования геометрических шейдеров, о которых говорилось ранее. Значит в динамике эти ветви динамически растут из земли, обволакивая забор и склеп, не пересекая поверхностей. Это именно та возможность, о которой я писал выше, т.е. замена примитивов, а точнее удаление старых и создание новых. Это должно сильно улучшить атмосферу в играх, ведь теперь будет больше динамики. Эта небольшая демка входит в состав того же DX SDK, который можно скачать с сайта Microsoft (506.5Mb), но для её запуска понадобится операционная система Windows Vista (3.2Gb (x86)) и DirectX10.

Рис. 12. Демонстрация работы геометрических шейдеров.

В DirectX10 появилась возможность применять эффект Motion Blur для определённого объекта, а не для всей сцены, как это было в DirectX9.0. Вот пример, этот чудила разминается и подпрыгивает с вращением, демонстрируя эффект размытия, скриншот снят с видео, поэтому он мало несёт информации.

Рис. 13. Эффект размытия.

Какие проекты уже готовятся под DirectX10.

На данный момент заявлено уже несколько проектов, о некотрых из них стало известно совсем недавно: Flight Simulator X, Shadowrun, Halo 2, LEGO Star Wars II, Zoo Tycoon 2: Marine Mania и Crysis. Я хочу уделить внимание проекту Crysis, о котором наверняка все знают, ну или почти все. Этот проект Crysis, о котором говорят, что он сразит всех на повал не только своими техническими возможностями в области графики, но и революционным игровым режимом, т.е. геймплейем, который будет демонстрировать эффект присутствия в игре. Так же в игре будет многопользовательский режим игры, который тоже будет необычным, а точнее он будет реализован впервые. Это всё заявляют менеджеры проекта и главный представитель компании, её президент Цеват Йерли. Разработкой проекта занимается студия CryTek, а обязанность издателя взяла на себя компания EA, которая не пожалела денег на Crysis в итоге бюджет игры составил 16 миллионов евро. Об этом проекте стало известно ещё в начале весны 2005 года, но официальное подтверждение было получено только в начале 2006 года. Игра разрабатывается преимущественно под DirectX9.0c, но разработчики заявляют, что они добавят графические эффекты из DirectX10, таким образом игра будет красивее под управлением DirectX10, нежели под управлением DirectX9.0c. А учитывая более быструю работу DirectX10 игра будет работать с одинаковой скоростью под управлением обоих API наборов функций, но на DirectX10 как я уже сказал, будет красивее.

Вы только посмотрите на эти несколько скриншотов, демонстрирующих достижения компании CryTek и мы сможем увидеть эти достижения уже совсем скоро на своём персональном компьютере. Вы всмотритесь в эти лица, представленные на рисунке 14, они как живые и это всё благодаря правильному применению продвинутых шейдеров.

Рис. 14. Демонстрация детализации лиц.
Рис. 15. Пошаговая обработка лица.

Далее демонстрируется на сколько реализованная картинка в игре похожа на реальный мир, на третьем изображении (рисунок 18) даже можно на пару секунд задуматься, где игра, а где реальный мир. Вот что значит возможности новой платформы для разработки, хотя всё это реализовано на видеокарте DirectX9.0c, работает оно под управлением DirectX10. Но точного подтверждения, но какой платформе были отрендерены изображения нет, поэтому это не стоит воспринимать буквально!

Рис. 16. Демонстрация применения объёмных теней.
Рис. 17. Просто сравнение двух изображений.
Рис. 18. Просто сравнение двух изображений.

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

Что в итоге?

В итоге разработчики игр и другого программного обеспечения получат в свои руки новое, очень эффективное средство для разработки, которое должно позволит решать те или иные задачи немного проще, а главное добавит уйму новых возможностей. Главное нововведение в Windows Vista, по отношению к Windows XP, является то, что это платформа заявлена компанией разработчиком Microsoft, как игровая платформа, а не как просто операционная система. Дело в том, что Windows XP на самом деле не является игровой платформой, в ней эта возможность как бы дополнительная, что сильно затрудняет работу для разработчиков. Надеюсь с приходом (в хорошем смысле этого слова) Windows Vista игры станут значительно качественнее и интереснее и по настоящему интересные проекты станут выходить чаще, чем это происходит сегодня.

Спасибо всем за внимание, с вами был Чекмарёв Алексей. Статья написана лично мною с начала и до конца, при копировании статьи на другие ресурсы, просьба указывать имя автора. Если в статье были замеченны неточности или вовсе неверные утверждения, то прошу связаться со мной: alex-666_87@mail.ru
Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают