Новые возможности DirectX 11: новый конвейер

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

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

DirectX 10 привнесет в процесс разработки игр. Было это всего лишь два года назад, когда мы обсуждали новый вид конвейера визуализации, и с тех пор вышло уже несколько поколений аппаратных средств и от AMD, и от Nvidia.

Вместе с релизом Windows Vista Service Pack 1, Microsoft представила DirectX 10.1 — мы рассказали о нем в нашем анализе архитектуры RV670, но на сегодняшний день лишь AMD приняла обновленный API. Nvidia утверждает, что разработчикам более важно было появление других функций, таких как ускорение обработки игровой физики средствами GPU, так что именно на этих особенностях она предпочла сосредоточится при разработке архитектуры GT200.

Кто-то говорил, что такое решение тормозило развитие графики, в то время как другие считали, что это было первым серьезным шагом в сторону от пути, на котором графика становилась главным аспектом при создании новых игр. Вне зависимости от того, как вы оцениваете такой подход, он привел к слегка спорным результатам в Assassin’s Creed.

И таким вот образом мы добрались до DirectX 11, следующего главного обновления самого популярного графического API от Microsoft. Архитекторы DirectX не стали почивать на лаврах после релиза DirectX 10 — фактически, еще до выхода DirectX 10.1 в составе Vista SP1 компания уже начала работу над тем, что сегодня известно нам как DirectX 11. Но это, конечно же, еще не конец этой работы, поскольку разработчики, с которыми мы общались, уже говорят о том, что они хотели бы видеть в DirectX 12!

Microsoft анонсировала новый API на конференции GameFest 2008 в Сиэтле, однако работа над ним все еще продолжается. После этого нам представился шанс послушать выступления Кэвина Гии (Kevin Gee) из Microsoft на Nvision 2008, после которого мы смогли пообщаться с многими разработчиками и расспросить их о новом API и его предназначении. В дополнение к этому мы также смогли послушать обсуждения различных вопросов с GameFest, так как Microsoft предоставила в общий доступ презентации, дополненные аудиоматериалами.

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

Что мы имеем на сегодняшний день?
Когда DirectX 10 был выпущен, Microsoft решила покончить со своим прошлым и начать все заново. Вместе с этим решением пришла абсолютно новая модель драйверов, что означало отсутствие обратной совместимости со старыми версиями ОС Windows, например, с невероятно популярной Windows XP.

Последнее детище команды DirectX предназначается исключительно для Vista. Это, несомненно, было смелым решением, но это было необходимо для того, чтобы наконец-то избавиться от проблем, которые сопровождали DirectX, начиная с его первого релиза в 1995 году.

Справедливости ради стоит отметить, что до выхода DirectX 10 этот API Microsoft становился все более и более сложным для написания кодов из-за дополнительных возможностей — вместо этого, им нужно было сделать доступным использование возможностей самого API.

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

DirectX 10 не был лишен недостатков, хотя DirectX 10.1 помог решить некоторые его проблемы — фактически, его можно было бы назвать «финальной версией D3D10″ от Microsoft. Я знаю, что выше я уже говорил, что DirectX 10 не привнес никаких дополнительных функций, однако это не совсем так — фильтрация FP32 и 4xMSAA уже сейчас являются востребованными особенностями DirectX 10.1, хотя после того, как большинство DirectX 10-совместимых аппаратных средств стали поддерживать обе эти функции, главной отличительной чертой версии 10.1 стало другое.

Наиболее привлекательной возможностью D3D10.1, по словам разработчиков, с которыми мы общались, является способностью использовать MSAA вместе с отложенным рендерингом (что используется в любой игре, построенной на основе Unreal Engine 3, и в некоторых других) без необходимости просчитывать глубину текстуры. Вместо этого, благодаря DirectX 10.1, вы можете производить чтения из мультисэмплового буфера глубины, когда есть множество целей вывода (от англ. multiple render targets, MRT) — это может значительно улучшить производительность, поскольку эта операция может быть закончена всего за один проход.

Что мне кажется интересным, так то, что Nvidia, несмотря на очевидное нежелание прямо заявлять о том, какие технологии из DirectX 10.1 она поддерживает, открыто говорит, что они с разработчиками работали над тем, чтобы использовать чтение из мультисэмплового буфера глубины на их текущем поколении аппаратных средств DirectX 10.0. Очевидно, что здесь речь идет об одной из функций D3D10.1, которую Nvidia, пусть и неофициально, но поддерживает, поскольку сегодня поддержка Direct3D просто необходима.

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

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

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

Новый API, как ожидается, появится вместе с Windows 7 (который ожидают в конце 2009/начале 2010), но хорошие новости в том, что DirectX 11 будет работать и на Windows Vista. И в этом случае мы надеемся, что релиз DirectX 11 будет отличаться от появления DX10, поскольку нам хотелось бы видеть обратную совместимость и, как будет написано ниже, есть некоторые особенности, которые могли бы оказаться полезными даже для текущего аппаратного обеспечения DirectX 9 и 10/10.1.

Конвейер DirectX 11
Итак, перейдем непосредственно к новым функциям DX11. Особое значение в разработке нового API уделяется авторингу контента, предоставлению разработчикам возможности создавать более сложные и реалистичные персонажи. Это согласуется с стремлением Microsoft по увеличению масштабируемости и эффективности, потому что сегодня в среде разработчиков четко прослеживается тенденция к построению персонажей с все более и более сложными сетками из многоугольников и последующему сокращению количества многоугольников в зависимости от возможностей данной конкретной системы.

В частности для решения этой проблемы Microsoft вводит в графический конвейер DirectX 11 три новых стадии: Hull Shader, тесселятор и Domain Shader (первый и последний в основном служат для облегчения работы тесселятора). Если вы уберете эти три стадии, то получится нечто, очень похожее на конвейер DirectX 10, хотя и есть нем некоторые небольшие изменения, которые вносят технические отличия между этими двумя контейнерами.

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

Если вы будете думать о вычислительном шейдере как о неком подобии OpenCL, вы будете не так далеки от истины — он позволит DirectX стать стандартом в индустрии для широко распараллеленных вычислительных задач общего назначения, при этом предоставляя разработчикам игр свободный доступ к богатым вычислительным ресурсам, доступным для других, неигровых задач. Сегодня и у AMD, и у Nvidia есть их собственные соответствующие GPU или разработки в области потоковых вычислений, которые доступны для разработчиков для решения неграфических проблем, но (и это важно) они не совместимы друг с другом. Intel уже говорит о своем ответе на этим проблемы программирования, который представлен в том числе широко распараллеленными вычислениями на Larrabee, и вряд ли это решение будет совместимо с Stream SDK от AMD или платформой CUDA от Nvidia.

Такая ситуация создает проблемы для разработчиков, потому что им приходится решать, собираются ли они сосредотачиваться на межплатформенной совместимости, что потенциально означает необходимость написания трех «различных» приложений для различных аппаратных средств, или же они решат сделать ставку на максимальную производительность на одной конкретной платформе. Мы уже обсуждали некоторые потенциальные проблемы, которые могут встать перед разработчиками, выбравшими один из двух API ускорения физики в играх средствами GPU — в итоге все заканчивается тем, что игрок получает более комфортные условия для игры в зависимости от того, у кого они купили свою видеокарту.

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

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

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

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

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

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