Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Интерфейсы программирования приложений DirectX 11, DirectX 12.

Интерфейсы программирования приложений DirectX 11, DirectX 12.

DirectX 11.

Сравнительно недавно компания Microsoft объявила о создании интерфейса программирования приложений DirectX 11, а первый видеоакселератор с его поддержкой выпустила компания AMD/ATI.  DirectX 11 отличает программная поддержка всех предыдущих уровней аппаратного обеспечения, начиная с DirectX 10. Хотя старые видеочипы с поддержкой DX10 способны лишь на часть возможностей DirectX 11, некоторые особенности нового API смогут облегчить жизнь разработчикам игр. Чтобы полностью раскрыть возможности этой версии API, требуется аппаратная поддержка со стороны полноценных DirectX 11 GPU, таких как Cypress. Только такие чипы могут обеспечить поддержку DirectCompute11 и улучшенного многопоточного рендеринга. Хотя многопоточность будет работать и на старых чипах при поддержке новых драйверов, но производительность в таком случае может быть ниже, чем на DX11 видеочипах. На увеличение скорости направлена возможность многопоточного рендеринга, а также новые возможности DirectCompute. Улучшить качество изображения в играх призваны: тесселяция, рендеринг прозрачных полигонов без необходимости сортировки (order-independent), сложная постобработка, новые возможности по фильтрации теней. С точки зрения игр весьма интересно выполнение физических расчётов и алгоритмов AI на видеочипах через DirectCompute.

В шейдерной модели Shader Model 5 предложен новый набор инструкций, с более гибким доступом к данным и большим удобством для разработчика. Набор команд унифицированный, один для шейдеров всех типов: Vertex, Hull, Domain, Geometry, Pixel и Compute. Применена объектно-ориентированная программная модель, функции и подпрограммы в шейдерном коде облегчают разработку графических приложений.

 Новые инструкции Shader Model 5.0:

  - SV_Coverage — даёт информацию о sample coverage для пиксельных шейдеров, применяется при определении краев полигонов в специфических алгоритмах сглаживания.

  - Gather — выборка сразу четырех значений одной инструкцией, применяется в алгоритмах фильтрации теней и ambient occlusion (глобальная модель затенения).

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

  - битовые операции, помогающие ускорить сжатие и распаковку данных.

Одной из важнейших особенностей нового графического API является DirectCompute, которая предоставляет доступ к технологии вычислений общего назначения на GPU (ATI Stream Technology для AMD). Эта возможность особенно важна потому, что DirectX API является индустриальным стандартом, который будет использоваться в любом случае. Поддерживаются несколько уровней аппаратной поддержки: DirectCompute10 — для DirectX 10.0 видеочипов, DirectCompute10.1 и DirectCompute11, соответственно. Игровые применения DirectCompute может найти в обработке и фильтрации изображений, рендеринге полупрозрачных поверхностей без предварительной сортировки (Order Independent Transparency), рендеринге теней, физических эффектах, алгоритмах искусственного интеллекта, трассировке лучей.

Версия DirectCompute11, которая поддерживается Cypress, даёт несколько больше возможностей, по сравнению с DirectCompute10, вот некоторые из них:
  - 3D Thread Dispatch — возможность заменить несколько двумерных массивов потоков одним трёхмерным;

  - максимальное количество потоков в DirectCompute11 увеличено с 768 до 1024, это даёт возможность исполнять одновременно на 33% потоков больше;
  - объём памяти на группу потоков увеличен с 16 Кб до 32 Кб, данная память используется для передачи данных между потоками;
  - доступ к общей памяти улучшен, вместо возможности записи в 256 байтную область возможны полноценные чтение и запись в область 32 Кб данных;
  - атомарные операции, позволяющие каждому потоку использовать защищенные области памяти, что значительно упрощает перенос алгоритмов с CPU на GPU;
  - вычисления с двойной точностью, необходимые для некоторых алгоритмов вычислений общего назначения;
  - Gather4 — выборка из видеопамяти со скоростью до четырёх раз большей (при определённых условиях);
и др.

Для более удобного применения тесселяции в DirectX 11 были введены новые типы шейдеров: Hull и Domain Shaders. Аппаратно ускоренная тесселяция в DX11 позволяет использовать широкий набор алгоритмов и методов: Catmull-Clark Subdivison, патчи Bezier и N-патчи, Displacement Mapping, адаптивная тесселяция (динамически изменяемый уровень детализации — Level of Detail). Тесселяции даёт возможность получить более детализированные модели при небольших затратах производительности. В основном, тесселяция (разбиение модели на большее количество треугольников, если совсем грубо) применяется для поверхностей земли, воды, но иногда и для персонажей (гладкие и округлые поверхности персонажа, как и не самые качественные текстуры, хорошо видны).

Order Independent Transparency (OIT) - это возможность отрисовки полупрозрачных полигонов без их предварительной сортировки, которая делает рендеринг перекрывающихся полупрозрачных объектов: дыма, огня, воды, стекла и т.п. более эффективным. Нельзя сказать, чтобы это была совсем уж новая возможность. Рендеринг полупрозрачных поверхностей требует предварительной сортировки, чтобы они корректно отображались, ведь их смешивание (blending) требует определённого порядка отрисовки. Возможности DirectCompute11 лишь упрощают такой рендеринг при помощи сортировки пикселей, позволяя сделать это всего лишь за один проход. При этом используются атомарные операции и append buffers.

При помощи DirectCompute может быть ускорена и усложнена постобработка изображения. Видов постфильтрации очень много: имитация глубины резкости (depth of field), размытие в движении (motion blur), поиск краёв полигонов (edge detection), сглаживание, повышение резкости (sharpening) и т.д. Для постобработки требуются данные о соседних с обрабатываемым пикселем. Возможности DirectCompute значительно упрощают применение сложных постфильтров, увеличивая производительность и улучшая качество изображения. Например, фильтр constant time filter spreading, который имитирует эффект оптики — глубины резкости, эта новая техника была разработана компанией AMD совместно с Калифорнийским университетом в Беркли. В ней не требуется использование альфа буфера, а в коде используются возможности доступа к общей памяти. В итоге получается меньше артефактов вроде видимых гало и резких силуэтов, а также повышенная скорость обработки, по сравнению с обычными методами с применением пиксельного шейдера.

Постобработка при помощи DirectCompute способна улучшить и алгоритмы отрисовки теней, включая ambient occlusion. AMD называет свой метод HDAO — High Definition Ambient Occlusion. Об этом алгоритме мы уже писали, это модель глобального освещения (затенения), используемая в 3D графике, которая увеличивает реалистичность изображения, вычисляя интенсивность света, доходящего до поверхности. DirectCompute11 даёт дополнительные возможности получения более реалистичных теней, когда тень становится более размытой по краям по мере удаления (то есть, полутень более реалистична).

В DirectX 11 появилась возможность сжатия 16-битных HDR текстур, степень сжатия которых достигает 6:1. Это будет весьма кстати в условиях частого применения таких форматов в современных игровых приложениях. Также в этой версии графического API было улучшено качество текстурного сжатия (что подтверждается лучшим параметром SNR — signal-to-noise), и снижены артефакты блочности текстур.

Многопоточный рендеринг - это одно из долгожданных улучшений в DirectX API, на игровых консолях доступное довольно давно. Теперь не только приложение, DirectX рантайм-код, и драйвер исполняются каждый в своём отдельном потоке, но и такие задачи, как загрузка текстур или компиляция шейдера могут быть запущены в параллельном основному коду потоке. Данное нововведение поможет исключить упор в производительность CPU в условиях большого количества вызовов функций отрисовки — их часть наконец-то можно будет переложить в другой поток, который будет исполняться на другом ядре центрального процессора, отличном от того, которое исполняет основной поток рендеринга (но не надо путать многопоточный рендеринг с многопоточностью игрового кода).

Все перечисленные выше улучшения полезны, если они используются в играх (BattleForge от EA Phenomic; S.T.A.L.K.E.R.: Call of Pripyat от GSC Gameworld; DiRT 2 от Codemasters; Lord of the Rings Online от Turbine; Aliens vs Predator от Rebellion).

Готовы к поддержке DX11 и движки Frostbite 2 Engine от EA DICE и Vision Engine от Trinigy. В общем, даже из этого оптимистичного списка понятно, что реально аппаратная поддержка DirectX 11 видна, т.е. компания AMD активизировала работу с разработчиками игр.

DirectX 12.

Но совсем недавно компания Microsoft представила интерфейс программирования приложений DirectX 12. DX12 – это новейшая версия графического API от Microsoft, который является доминирующим стандартом в продолжающей расти 25-миллиардной (USD) индустрии ПК-игр.

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

Истоки DX12 можно увидеть в тенденциях развития технологий. В то время как производительность GPU стремительно росла, потенциал развития одноядерных CPU был ограничен энергопотреблением. Многоядерные CPU обеспечили движение вперед, однако их пиковая производительность все еще не дотягивала до пиковой производительности GPU. Одновременно приложения стали использовать параллелизм на уровне задач, используя сложные планировщики для масштабирования производительности при увеличении количества ядер CPU. Это вызвало необходимость в создании API, который бы масштабировался соответственно изменению числа ядер.

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

DX12 позволяет приложениям напрямую управлять ресурсами и состоянием и выполнять необходимую синхронизацию. В результате, разработчики передовых приложений смогут эффективно управлять GPU, используя знания о внутренней работе своей собственной игры. Помимо описанной новой модели работы драйверов/приложений, в будущих версиях Direct3D появятся новые возможности рендеринга. Представленный на GDC проект – это только часть работы, проделанной в процессе подготовки к будущим релизам. NVIDIA и Microsoft продолжат и дальше серьезно инвестировать в будущее PC-игр.

?Благодаря новому программному интерфейсу DirectX® 12 от Microsoft® производительность будет на высоте, частота кадров увеличится, а задержка будет минимальной — даже оборудование менять не придется.?

Что дает DirectX 12? В DirectX 12 эффективно используются все ядра многоядерного центрального процессора одновременно, DirectX 12 значительно повышает объем работы, который может быть выполнен видеокартой, причем времени затрачивается меньше. Кроме того, с помощью DirectX 12 графический процессор выполняет несколько задач одновременно, так что рендеринг проходит быстрее, задержка сокращается, а частота кадров повышается. За этими инновациями стоят две принципиально новые особенности DirectX 12: многопоточная запись в буфер команд и асинхронные шейдеры.

Многопоточная запись в буфер команд открывает широкий канал связи между процессором AMD или гибридным процессором и графическим процессором AMD Radeon™, позволяя сразу нескольким ядрам ЦП взаимодействовать с графическим процессором.

На данный момент DirectX 11 пока остается основным API для компьютерных игр. Но, несмотря на это, эра DirectX 12 уже на подходе. Постепенно выходят игры под эту платформу, в том числе и благодаря стараниям Microsoft по продвижению своей операционной системы Windows 10 и др.. Компания решила подыграть игровой аудитории и дала добро на выпуск компьютерных версий некоторых игр, которые ранее значились в эксклюзивах Xbox One. Мы увидели переиздание Gears of War: Ultimate Edition, отличный экшен Quantum Break от авторов Alan Wake и файтинг Killer Instinct. Также поддержку DirectX 12 получили и некоторые игры от сторонних студий, в том числе новый Hitman. Этот список пополнил Total War: Warhammer, Deus Ex: Mankind Divided, игровые блокбастеры, многие из которых используют поддержку DirectX 12.

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

 

 


Лицензия