DirectX впервые появился в 1996 году, и именно благодаря ему Windows доминирует в играх. Когда эта функция была впервые развернута в Windows 95, она давала разработчикам игр доступ к низкоуровневым аппаратным функциям, что позволяло им настраивать игры.
DirectX — это очень важно, потому что без него у игр не было бы доступа к оборудованию в Windows. В отличие от консоли, такой как Xbox One, где есть одна видеокарта, Windows предоставляет вам множество вариантов конфигурации оборудования. Варианты варьируются от бюджетной GeForce GTX 1660 до GeForce RTX 2080 Ti за 1430 долларов, а также сотни материнских плат и наборов микросхем, поэтому при сборке нового ПК у вас есть безграничный выбор.
Это усложняет задачу разработчикам компьютерных игр, поскольку им приходится настраивать параметры и текстуры для самых разных конфигураций. Вот где DirectX пригодится. Эта функция позволяет играм «общаться» с оборудованием напрямую, что облегчает разработчикам игр создание оптимизированных настроек для каждой конфигурации.
DirectX – это набор интерфейсов прикладного программирования (API), обеспечивающих низкоуровневый доступ к таким аппаратным компонентам, как видеокарты, звуковая карта и память. Если это звучит слишком сложно, давайте разберемся. На базовом уровне DirectX позволяет играм «разговаривать» с видеокартами. Во времена DOS игры имели прямой доступ к видеокартам и материнской плате, и вы могли напрямую редактировать файл конфигурации, чтобы внести изменения.
Но в Windows 95 Microsoft ограничила доступ к низкоуровневому оборудованию в качестве меры безопасности. Это означало, что игры больше не могли взаимодействовать с низкоуровневыми аппаратными функциями, и это было проблемой. Поэтому, чтобы облегчить этот доступ, Microsoft представила DirectX — думайте о DirectX как о посреднике, облегчающем связь между игрой и видеокартой.
DirectX – не единственный протокол API, доступный на сегодняшний день, но он встроен в Windows — в отличие от стандарта OpenGL — и в этом его преимущество. А с помощью DirectX 12 Ultimate Microsoft стирает грань между ПК и Xbox Series X, облегчая разработчикам игр адаптацию игр для каждой платформы.
VIDEODirectX 12 Ultimate использует основу DirectX 12 и включает несколько новых функций, появившихся за последние два года. В первую очередь это DirectX Raytracing 1.1; Поскольку все больше и больше игр используют трассировку лучей, DirectX 12 Ultimate изначально интегрирует эту функцию в Windows, а также в грядущую консоль Microsoft Xbox Series X.
DirectX 12 Ultimate сделает игры нового поколения невероятными.
DirectX 12 Ultimate также поддерживает затенение с переменной скоростью, что позволяет графическому процессору более эффективно использовать свои ресурсы для рендеринга объектов в фокусе, что приводит к более высокой частоте кадров и большей точности. Вы также получаете такие функции, как Sampler Feedback, которые улучшают качество текстур при меньшем использовании ресурсов, и в целом вы получаете набор изменений, которые должны сделать игры следующего поколения более плавными.
По сути, DirectX 12 Ultimate помогает разработчикам игр создавать более захватывающие игры с более качественными текстурами и реалистичным освещением, а благодаря этим функциям, встроенным в Windows, вы сразу же заметите разницу, если у вас есть видеокарта, которая работает с последней версией DirectX.
Приятно видеть дебют DirectX 12 Ultimate на Xbox Series X, но сначала он появится на ПК с Windows. Он уже распространяется на видеокарты NVIDIA серии GeForce RTX, и Microsoft заявляет, что технология будет на «миллионах» видеокарт, прежде чем ее консоль появится в конце этого года. Обязательно ознакомьтесь с нашим руководством по лучшим видеокартам, чтобы узнать о возможностях обновления и получить дополнительную информацию.
Совершенство RTX
MSI RTX 2060 Gaming Z 6G
Лучшее соотношение цены и качества для игр
RTX 2060 поддерживает трассировку лучей и NVIDIA DLSS и идеально подходит для игры в Death Stranding. Вы сможете без проблем играть в новейшие компьютерные игры в разрешении 1440p, а предлагаемая здесь ценность очень велика.
Мы можем получать комиссию за покупки по нашим ссылкам. Узнать больше.
Обнаружено древнее пасхальное яйцо Windows 1.0 с участием Гейба Ньюэлла
Как раз в тот момент, когда вы думали, что хранилища знаний старой Windows 1.0 исчерпаны, появляется новая запись. И это становится еще более захватывающим: этот конкретный самородок знаний содержит отсылку ни к кому иному, как к самому Гейбу Ньюэллу из Valve.
Присоединяйтесь к нам в прямом эфире для Windows Central Video Podcast сегодня в 13:30 по восточному времени
Сегодня в 13:30 по восточному времени мы в прямом эфире с подкастом Windows Central Video, обязательно будьте там!
Обзор: «Незнакомец из рая» не совсем правильно понял
Stranger of Paradise: Final Fantasy Origin – это игра, набитая возмутительными персонажами и потрясающими мемами, но этого недостаточно, чтобы передать общее впечатление.
Откройте для себя лучший ПК стоимостью менее 1000 долларов для геймеров и домашнего офиса
Сборка настольного компьютера может оказаться непростой задачей для новичков, так почему бы не пропустить весь процесс с уже готовым ПК? Мы выбрали лучшие настольные компьютеры стоимостью менее 1000 долларов США для геймеров и домашнего офиса.
DirectX 12 представляет следующую версию Direct3D — API трехмерной графики, лежащий в основе DirectX. Direct3D 12 быстрее и эффективнее любой предыдущей версии. Direct3D 12 обеспечивает более насыщенные сцены, больше объектов, более сложные эффекты и полное использование современного аппаратного обеспечения графического процессора.
Как Direct3D 12 может быть намного быстрее и эффективнее?
Direct3D 12 уникален тем, что обеспечивает более низкий уровень аппаратной абстракции по сравнению с предыдущими версиями, что позволяет значительно улучшить масштабирование многоядерного процессора для вашей игры (или другого приложения). Во-первых, с Direct3D 12 ваша игра сама отвечает за управление памятью. Кроме того, при использовании Direct3D 12 ваши заголовки и приложения выигрывают от снижения нагрузки на GPU благодаря таким функциям, как очереди и списки команд, таблицы дескрипторов и краткие объекты состояния конвейера.
Direct3D 12 и Direct3D 11.3 представляют набор новых функций конвейера рендеринга.
чтобы обеспечить надежное обнаружение попаданий. чтобы потоковые трехмерные ресурсы можно было обрабатывать так, как будто все они находятся в видеопамяти. чтобы обеспечить надежную визуализацию прозрачности.
Установка ссылки на трафарет в шейдере для включения специального затенения и других эффектов.
Улучшено отображение текстур и загрузка типизированного представления неупорядоченного доступа (UAV).
Насколько мне следует инвестировать в Direct3D 12?
Direct3D 12 предоставляет разработчикам графики четыре основных преимущества (по сравнению с Direct3D 11).
Значительно снижена нагрузка на ЦП.
Значительно снижено энергопотребление.
Повышение эффективности графического процессора примерно на 20 %.
Кроссплатформенная разработка для устройства с Windows 10 (ПК, планшет, консоль, мобильное устройство).
Direct3D 12 предназначен для опытных программистов, работающих с графикой. Это требует значительного опыта работы с графикой и высокого уровня точной настройки. Direct3D 12 позволяет в полной мере использовать многопоточность, тщательную синхронизацию CPU/GPU, а также переход и повторное использование ресурсов от одной цели к другой. Эти методы требуют значительных навыков программирования на уровне памяти.
Еще одним преимуществом Direct3D 12 является небольшой размер API. Есть около 200 функций; и около трети из них выполняют всю тяжелую работу. Это означает, что вы, как разработчик графики, должны иметь возможность изучить и освоить полный набор API без необходимости запоминать слишком много названий API.
Direct3D 11 по-прежнему является приемлемым вариантом наряду с Direct3D 12. Многие из новых функций рендеринга Direct3D 12 доступны в Direct3D 11.3. Direct3D 11.3 — это низкоуровневый API графического движка; а Direct3D 12 еще глубже.
Существует по крайней мере два способа, с помощью которых ваша команда разработчиков может подойти к игре Direct3D 12.
Использовать только Direct3D 12
Для проекта, в котором максимально используются все преимущества Direct3D 12, вам следует с нуля разработать настраиваемый движок Direct3D 12.
Если вы как разработчик графики понимаете, как использовать и повторно использовать ресурсы в своих играх, и можете извлечь из этого пользу, сводя к минимуму загрузку и копирование, вы можете разработать и настроить высокоэффективный движок для этих игр. . Улучшения производительности могут быть очень значительными, высвобождая процессорное время для увеличения количества вызовов отрисовки и, таким образом, добавляя блеска вашей графике.
Вложения в программирование значительны, и вам следует подумать об отладке и инструментарии проекта с самого начала. Многопоточность, синхронизация и другие ошибки синхронизации могут вызывать проблемы.
Используйте Direct3D 12 совместно с Direct3D 11
Краткосрочный подход заключается в устранении известных узких мест в вашей игре Direct3D 11. Вы можете устранить их, используя методы взаимодействия Direct3D 12 и/или D3D11On12, которые позволяют двум версиям API работать вместе. Такой подход сводит к минимуму изменения, необходимые для существующего графического движка Direct3D 11. Однако прирост производительности будет ограничен устранением узкого места, которое устраняет код Direct3D 12.
Видео о Microsoft DirectX 12 (и графическом обучении)
Расширенное обучение разработчиков графики. Эти видеоролики охватывают такие темы, как режимы презентации, перенос на DirectX 12, консервативную растеризацию, графические инструменты, Angle, Win2D и такие события, как GDC, Build и другие. Технический контент DirectX 12 начинается с DirectX 12 . Приходите сюда, чтобы узнать советы и рекомендации непосредственно от команды разработчиков Direct3D 12. Мы хотим помочь вам использовать наши последние выпуски и инструменты, чтобы сделать вашу игру лучше!
Заключение
Direct3D 12 — это потрясающая производительность графического движка. Простота разработки, конструкции высокого уровня и поддержка компилятора были сокращены, чтобы сделать это возможным. Поддержка драйверов и простота отладки остаются на уровне Direct3D 11.
Direct3D 12 — это новая территория. Территория, которая ждет, когда любознательный эксперт придет и исследует ее.
DirectX 12 дебютировал два года назад, обещая значительное повышение производительности и эффективности по всем направлениям. Это включает в себя более эффективное использование ЦП, более близкий доступ к металлу, а также множество новых функций, в первую очередь трассировку лучей или DXR (DirectX Ray-tracing). Но что такое DirectX 12 и чем он отличается от DirectX 11. Давайте посмотрим.
Что такое DirectX: это API
Подобно Vulkan и OpenGL, DirectX — это API, позволяющий запускать видеоигры на компьютере. Однако, в отличие от своих аналогов, DX является проприетарной платформой Microsoft и изначально работает только в Windows. С другой стороны, OpenGL и Vulkan работают как на Mac, так и на Linux.
Что делает графический API, такой как DirectX? Он действует как промежуточное звено между игровым движком и графическими драйверами, которые, в свою очередь, взаимодействуют с ядром ОС. Графический API — это платформа, на которой разрабатываются реальный дизайн и механика игры. Думайте об этом как о MS Paint, где игра — это рисование, а приложение для рисования — это API. Однако, в отличие от Paint, программа вывода графического API доступна для чтения только API, используемому для ее разработки. Как правило, API предназначен для конкретной ОС. Вот почему игры для PS4 не работают на Xbox One и наоборот.
DirectX 12 Ultimate — первый графический API, нарушающий это правило. Он будет использоваться как на Windows, так и на Xbox Series X следующего поколения. С помощью DX12 Ultimate MS фактически интегрирует две платформы.
DirectX 11 и DirectX 12: что это значит для геймеров на ПК
Есть три основных преимущества API DirectX 12 для геймеров на ПК:
Лучшее масштабирование с многоядерными процессорами
Одним из основных преимуществ низкоуровневых API, таких как DirectX 12 и Vulkan, является более эффективное использование ЦП. Традиционно с играми на основе DirectX 9 и 11 большинство игр использовали только 2-4 ядра для различных механик: физики, ИИ, вызовов отрисовки и т. д. Некоторые игры даже ограничивались одним. С DirectX 12 все изменилось. Нагрузка более равномерно распределяется между всеми ядрами, что делает многоядерные процессоры более актуальными для геймеров.
Максимальное использование оборудования
Многие из вас могли заметить, что вначале графические процессоры AMD отдавали предпочтение играм с DirectX 12 больше, чем конкурирующим компонентам NVIDIA. Почему это?
Причина в лучшем использовании. Традиционно у NVIDIA была гораздо лучшая поддержка драйверов, в то время как аппаратное обеспечение AMD всегда страдало от ее отсутствия.DirectX 12 добавляет множество технологий для улучшения использования, таких как асинхронные вычисления, которые позволяют одновременно выполнять несколько этапов конвейера (читай: вычисления и графика). Это делает плохую поддержку водителей менее актуальной проблемой.
Ближе к металлической поддержке
Еще одно важное преимущество DirectX 12 заключается в том, что разработчики имеют больший контроль над тем, как их игра использует аппаратное обеспечение. Раньше это было более абстрактно и в основном заботилось о драйверах и API (хотя некоторые движки, такие как Frostbyte и Unreal, также предоставляли низкоуровневые инструменты).
Теперь задача ложится на разработчиков. Они имеют более близкий доступ к металлу, а это означает, что большая часть обязанностей по рендерингу и распределению ресурсов выполняется игровыми движками с некоторой помощью графических драйверов.
Это палка о двух концах, так как в дикой природе существует несколько архитектур графических процессоров, и независимые разработчики не могут оптимизировать свою игру для всех них. К счастью, сторонние движки, такие как Unreal, CryEngine и Unity, делают это за них, и им нужно сосредоточиться только на дизайне.
Как DirectX 12 повышает производительность за счет оптимизации использования оборудования
Опять же, есть несколько основных усовершенствований API, которые способствуют этому:
Контекст API для каждого вызова
Как и любое приложение, графические API, такие как DirectX, также имеют основной поток, который отслеживает внутреннее состояние API (ресурсы, их распределение и доступность). В DirectX 9 и 11 есть глобальное состояние (или контекст). Игры, которые вы запускаете на своем ПК, изменяют это состояние с помощью вызовов отрисовки в API, после чего оно передается графическому процессору для выполнения. Поскольку существует одно глобальное состояние/контекст (и один основной поток, в котором он выполняется), это затрудняет многопоточность, поскольку несколько одновременных вызовов отрисовки могут вызвать ошибки. Кроме того, изменение глобального состояния с помощью вызовов состояния является относительно более медленным процессом, что еще больше усложняет весь процесс.
В DirectX 12 вызовы отрисовки стали более гибкими. Вместо единого глобального состояния (контекста) каждый вызов отрисовки из приложения имеет собственное меньшее состояние (дополнительные сведения см. в PSO ниже). Эти вызовы отрисовки содержат необходимые данные и связанные с ними указатели внутри и не зависят от других вызовов и их состояний. Это позволяет использовать несколько потоков для разных вызовов отрисовки.
Объекты состояния конвейера
В DirectX 11 объекты в конвейере графического процессора существуют в широком диапазоне состояний, таких как вершинный шейдер, шейдер корпуса, шейдер геометрии и т. д. Эти состояния часто взаимозависимы друг от друга, и следующее за ним состояние не может быть изменено. если предыдущая стадия не определена. Когда геометрия из сцены отправляется на графический процессор для рендеринга, требуемые ресурсы и оборудование могут различаться в зависимости от состояния растеризатора, состояния наложения, состояния трафарета глубины, отбраковки и т. д.
Каждый из объектов в DirectX 11 должен быть определен отдельно (во время выполнения), а следующее состояние не может быть выполнено до тех пор, пока не будет завершено предыдущее, поскольку для них требуются разные аппаратные устройства (шейдеры и ROP, TMU и т. д.) . Это приводит к недостаточному использованию оборудования, что приводит к увеличению накладных расходов и сокращению числа вызовов отрисовки.
В приведенном выше сравнении аппаратное состояние 1 представляет код шейдера, а 2 — комбинацию растеризатора и потока управления, связывающего растеризатор с шейдерами. Состояние 3 — это связь между наложением и пиксельным шейдером. Вершинный шейдер влияет на состояния аппаратного обеспечения 1 и 2, состояние растеризатора 2, состояния пиксельного шейдера 1-3 и так далее. Как уже объяснялось в предыдущем разделе, это приводит к дополнительной нагрузке на ЦП, поскольку драйвер обычно предпочитает дождаться разрешения зависимостей.
DirectX 12 заменяет различные состояния объектами состояния конвейера (PSO), которые завершаются при самом создании. Простыми словами PSO — это объект, описывающий состояние вызова отрисовки, который он представляет. Приложение может создавать столько PSO, сколько требуется, и может переключаться между ними по мере необходимости. Эти PSO включают байт-код для всех шейдеров, включая вершинный, пиксельный, доменный, корпусный и геометрический шейдеры, и могут быть преобразованы в любое состояние в соответствии с требованиями, независимо от какого-либо другого объекта или состояния.
В новейших графических процессорах NVIDIA и AMD с помощью DirectX 12 представлены шейдеры задач и шейдеры сетки. Эти два новых шейдера заменяют различные громоздкие этапы шейдеров, используемые в конвейере DX11, для более гибкого подхода.
Шейдер сетки выполняет ту же задачу, что и шейдеры предметной области и геометрии, но внутри он использует многопоточную модель вместо однопоточной. Шейдер задач работает аналогично. Основное отличие здесь состоит в том, что в то время как входные данные шейдера корпуса представляют собой патчи, а выходные данные мозаичного объекта, входные и выходные данные шейдера задач определяются пользователем.
В приведенной ниже сцене есть тысячи объекты, которые необходимо отобразить. В традиционной модели для каждого из них потребовался бы уникальный вызов отрисовки от ЦП. Однако с помощью шейдера задач список объектов отправляется с помощью одного вызова отрисовки. Затем шейдер задач обрабатывает этот список параллельно и назначает работу шейдеру сетки (который также работает синхронно), после чего сцена отправляется в растеризатор для преобразования 3D в 2D.
Этот подход помогает сократить количество вызовов отрисовки ЦП на сцену значительно, тем самым повышая уровень детализации.
Сетчатые шейдеры также облегчают отбраковку неиспользуемых треугольников. Это делается с помощью шейдера усиления. Он запускается перед шейдером сетки и определяет количество необходимых групп потоков шейдера сетки. Они проверяют различные сетки на предмет возможных пересечений и видимости на экране, а затем выполняют требуемую отбраковку. Отбор геометрии на этом раннем этапе рендеринга значительно повышает производительность. Вы можете прочитать больше здесь…
Шейдеры Mesh и Hull от NVIDIA также используют DX12
Очередь команд
В DirectX 11 к графическому процессору направляется только одна очередь. Это приводит к неравномерному распределению нагрузки между различными ядрами ЦП, что существенно снижает эффективность многопоточных ЦП.
От команды, которая вот уже почти 25 лет приносит геймерам на ПК и консолях новейшие графические инновации, мы очень рады представить геймерам DirectX 12 Ultimate, кульминацию лучшей графической технологии, которую мы когда-либо представляли, в беспрецедентном сочетании. между ПК и Xbox Series X.
Когда геймеры приобретают графическое оборудование для ПК с логотипом DX12 Ultimate или Xbox Series X, они могут быть уверены, что их оборудование гарантированно поддерживает ВСЕ функции графического оборудования следующего поколения, включая DirectX Raytracing, Variable Rate Shading, Mesh. Шейдеры и отзывы о сэмплере. Этот знак качества гарантирует непревзойденную поддержку функций будущего для игр нового поколения!
Абсолютная инновация в графике
Microsoft Game Stack предоставляет разработчикам инструменты, необходимые им для создания смелых, захватывающих игр, а DX12 Ultimate — идеальный инструмент для усиления игровой графики. DX12 Ultimate — это результат постоянных инвестиций в платформу DirectX 12, сделанных за последние пять лет, чтобы гарантировать, что Xbox и Windows 10 останутся на вершине графических технологий. Чтобы дать разработчикам игр возможность создавать игры с потрясающими визуальными эффектами, мы улучшили функции, которые уже начинают преобразовывать игры, такие как DirectX Raytracing и Variable Rate Shading, а также добавили новые важные функции, такие как Mesh Shaders и Sampler Feedback.
В совокупности эти функции представляют собой результат многолетних инноваций Microsoft и наших партнеров в индустрии аппаратного обеспечения. DX12 Ultimate объединяет их все в один общий пакет, предоставляя разработчикам единый ключ для разблокировки графики следующего поколения на ПК и Xbox Series X.
Конечно, даже самые мощные функции имеют ограниченное применение без инструментов, необходимых для их полноценного использования, поэтому мы рады сообщить, что наш ведущий в отрасли инструмент оптимизации графики PIX и компилятор HLSL с открытым исходным кодом предоставят разработчикам игр с возможностью выжать все до последней капли производительности из целой экосистемы оборудования DX12 Ultimate.
Дополнительное преимущество
DirectX12 Ultimate — это, по сути, аддитивная инициатива, которая дает геймерам уверенность в том, что их аппаратное обеспечение соответствует самым высоким стандартам поддержки функций в играх следующего поколения.
Очень важно отметить, что DX12 Ultimate не повлияет на совместимость игры с существующим оборудованием, которое не поддерживает все функции DX12 Ultimate.Фактически, игры следующего поколения, использующие функции DX12 Ultimate, будут продолжать работать на оборудовании, отличном от DX12 Ultimate. Хотя такое оборудование не будет обеспечивать визуальные преимущества новых функций, оно все же может обеспечить очень привлекательный игровой процесс в играх следующего поколения, в зависимости от специфики оборудования.
Экосистема ПК охватывает широкий спектр аппаратного обеспечения, и DX12 Ultimate значительно улучшает эту экосистему, не оказывая отрицательного влияния на оборудование, которое не поддерживает DX12 Ultimate!
Усиление благотворного цикла
Как подтвердит любой геймер, мало что может быть выше достоинства, чем умение оценить хорошо сделанную и красивую игру. DX12 Ultimate открывает беспрецедентные возможности для всей игровой экосистемы, создавая самоподдерживающийся эффективный цикл, который приводит к лучшему игровому процессу!
Цикл ниже описывает общий процесс улучшения графики в играх, который происходил на протяжении многих лет. По мере того, как новое оборудование (или новое поколение консолей) медленно достигает насыщения рынка, количество адресуемых сокетов с графическими функциями следующего поколения увеличивается. По мере увеличения количества сокетов с этими функциями число игровых студий, желающих внедрить новые функции, также увеличивается, пока, наконец, не произойдет насыщение рынка аппаратным обеспечением, и большинство игровых студий не перейдут на эти функции.
До DX12 Ultimate эти два цикла частично пересекались. Даже когда аппаратное обеспечение было похожим, программные интерфейсы были весьма непохожими, что препятствовало согласованному принятию разработчиками.
Объединяя графическую платформу для ПК и Xbox Series X, DX12 Ultimate служит множителем силы для всей игровой экосистемы. Циклы больше не работают независимо! Вместо этого они теперь объединяются синергетически: когда Xbox Series X выйдет, в мире уже будет много миллионов графических карт DX12 Ultimate для ПК с тем же набором функций, что станет катализатором быстрого внедрения новых функций, а когда Xbox Series X принесет волну новых консольных игроков, ПК также выиграют от этого огромного количества нового оборудования с поддержкой DX12 Ultimate!
Результат? Выброс адреналина для внедрения новых функций, новаторская графика в руках геймеров быстрее, чем когда-либо прежде!
Дополнительную информацию о том, как наши партнеры по оборудованию поддерживают DX12 Ultimate, см. в следующих статьях AMD и NVIDIA:
Полное погружение в DirectX 12
Присоединяйтесь к нам, чтобы глубже заглянуть под капот DirectX 12 Ultimate и узнать, как работают эти функции. Часть этой информации носит технический характер, поэтому, если у вас есть дополнительные вопросы, мы приглашаем вас присоединиться к нашему раздору, чтобы задать вопросы!
Трассировка лучей DirectX 1.1
DirectX Raytracing (DXR) обеспечивает новый уровень графического реализма в видеоиграх, ранее достижимый только в киноиндустрии. Эффекты, достижимые с помощью DXR, кажутся более реальными, потому что в некотором смысле они более реальны: DXR прослеживает пути света с реалистичными физическими расчетами, что является гораздо более точным моделированием, чем расчеты на основе эвристики, использовавшиеся ранее.
Мы уже видели беспрецедентный уровень визуального качества в играх, использующих DXR 1.0, с тех пор, как мы представили его, и создали DXR 1.1 в ответ на отзывы разработчиков, предоставив им еще больше инструментов для использования DXR.
DXR 1.1 — это постепенное дополнение к DXR 1.0, добавляющее три основные новые возможности:
GPU Work Creation теперь поддерживает трассировку лучей. Это позволяет шейдерам на графическом процессоре вызывать трассировку лучей без промежуточного обращения к центральному процессору. Эта возможность полезна для сценариев адаптивной трассировки лучей, таких как отбраковка/сортировка/классификация/уточнение на основе шейдеров. По сути, сценарии, которые подготавливают трассировку лучей, работают на графическом процессоре, а затем сразу же запускают его.
Системы потоковой передачи могут более эффективно загружать новые шейдеры трассировки лучей по мере необходимости, когда игрок перемещается по миру и становятся видны новые объекты.
Встроенная трассировка лучей — это альтернативная форма трассировки лучей, которая дает разработчикам возможность управлять большей частью процесса трассировки лучей, а не полностью обрабатывать планирование работы системой (динамическое затенение). Он доступен на любом этапе шейдера, включая вычислительные шейдеры, пиксельные шейдеры и т. д. И динамические, и встроенные формы трассировки лучей используют одни и те же непрозрачные структуры ускорения.
Когда использовать встроенную трассировку лучей
Встроенная трассировка лучей может быть полезна по многим причинам:
Возможно, разработчик знает, что его сценарий достаточно прост, и накладные расходы на динамическое планирование шейдеров не окупаются. Например, хорошо ограниченный способ вычисления теней.
Было бы удобно/эффективно запрашивать структуру ускорения из шейдера, который не поддерживает лучи на основе динамических шейдеров. Например, вычислительный шейдер или пиксельный шейдер.
Может быть полезно сочетать трассировку лучей на основе динамических шейдеров со встроенной формой. Некоторые этапы шейдера трассировки лучей, такие как шейдеры пересечения и любые шейдеры попадания, даже не поддерживают трассировку лучей с помощью трассировки лучей на основе динамических шейдеров. Но встроенная форма доступна везде.
Еще одна комбинация — переключение на встроенную форму для простых рекурсивных лучей. Это позволяет приложению объявить об отсутствии рекурсии для базового конвейера трассировки лучей, учитывая, что встроенная трассировка лучей обрабатывает рекурсивные лучи. Более простая динамическая нагрузка на систему может повысить эффективность.
Сценарии с большим количеством сложных шейдеров будут работать лучше с трассировкой лучей на основе динамических шейдеров, а не с массивными встроенными шейдерами трассировки лучей. Между тем, сценарии с минимальной сложностью шейдинга и/или очень небольшим количеством шейдеров будут лучше работать со встроенной трассировкой лучей.
Если все вышеперечисленное кажется вам довольно сложным, так оно и есть! Вывод высокого уровня заключается в том, что как новая встроенная трассировка лучей, так и исходная трассировка лучей на основе динамических шейдеров полезны для разных целей. Начиная с DXR 1.1, разработчики могут не только выбирать любой из подходов, но и комбинировать их оба в одном средстве визуализации. Гибридным подходам способствует тот факт, что обе разновидности трассировки лучей DXR используют один и тот же формат структуры ускорения и управляются одним и тем же базовым конечным автоматом обхода.
Лучше всего то, что геймеры с оборудованием DX12 Ultimate могут быть уверены, что независимо от того, какое решение трассировки лучей выберет разработчик, они получат отличный опыт.
Затенение с переменной скоростью
Затенение с переменной скоростью (VRS) позволяет разработчикам выборочно изменять скорость затенения в игре. Это позволяет им «набирать» мощность графического процессора в более важных частях игры для улучшения визуальных эффектов и «уменьшать» мощность графического процессора в менее важных областях игры для повышения скорости. Затенение с переменной скоростью также имеет то преимущество, что его реализация относительно недорога для разработчиков. Более подробную информацию о затенении с переменной скоростью можно найти в нашем предыдущем сообщении в блоге.
Сетчатые шейдеры
Сетчатые шейдеры предоставляют разработчикам больше возможностей для программирования, чем когда-либо прежде. Привнося всю мощь обобщенных вычислений графического процессора в конвейер геометрии, сетчатые шейдеры позволяют разработчикам создавать более детализированные и динамичные миры, чем когда-либо прежде.
До появления сетчатого шейдера конвейер геометрии графического процессора скрывал параллельный характер аппаратного исполнения графического процессора за упрощенной программной абстракцией, которая давала разработчикам доступ только к, казалось бы, линейным функциям шейдера. Например, разработчик пишет функцию вершинного шейдера, которая вызывается один раз для каждой вершины в модели, что подразумевает последовательное выполнение. Однако за кулисами аппаратное обеспечение упаковывает смежные вершины для заполнения волны SIMD, а затем выполняет 32 или 64 функции вершинного шейдера параллельно на одном шейдерном ядре. Эта модель очень хорошо работала в течение многих лет, но она оставляет без внимания производительность и гибкость, скрывая от разработчиков детали того, что на самом деле делает аппаратное обеспечение.
Сетчатые шейдеры изменяют это, делая обработку геометрии более похожей на вычислительные шейдеры. Вместо одной функции, которая затеняет одну вершину или один примитив, сеточные шейдеры работают во всей группе вычислительных потоков, имея доступ к общей памяти группы и расширенным вычислительным функциям, таким как встроенные функции кросс-полосной волны, которые обеспечивают еще более точный контроль над реальным оборудованием. исполнение. Все эти потоки работают вместе, чтобы заштриховать небольшой индексированный список треугольников, называемый «сеткой». Обычно будет фаза шейдера сетки, где каждый поток работает с отдельной вершиной, а затем другая фаза, где каждый поток работает с отдельным примитивом, но эта модель полностью гибкая, позволяя обмениваться данными между потоками, новыми вершинами или примитивами. создаются по мере необходимости, существующие примитивы обрезаются или удаляются и т. д.
Наряду с этой новой гибкостью распределения потоков появляется гибкость форматов входных данных. Сетчатый шейдер больше не использует блок Input Assembler, который ранее отвечал за выборку данных индексов и вершин из памяти. Вместо этого код шейдера может свободно считывать любые необходимые данные из любого формата, который ему нравится. Это позволяет использовать новые новые методы, такие как сжатие индексного буфера или использование нескольких разных индексных буферов для разных каналов данных вершин. Такие подходы могут сократить использование памяти, а также снизить пропускную способность памяти, используемую во время рендеринга, что повысит производительность.
Хотя модель шейдера сетки более гибкая, чем предыдущий геометрический конвейер, она также намного проще:
Наряду с сетевым шейдером появляется необязательный новый этап шейдера, который называется Amplification Shader.Это запускается перед шейдером сетки, выполняет некоторые вычисления, определяет, сколько групп потоков шейдера сетки необходимо, а затем запускает это количество шейдеров сетки:
Шейдеры усиления особенно полезны для отбраковки, так как они могут определить, какие мешлеты видимы, проверяя каждый набор из 32–256 треугольников на геометрическом ограничивающем объеме, конусе нормалей или более сложных методах, таких как плоскости видимости портала, прежде чем принять решение. следует ли запускать группу потоков шейдера сетки для этого мешлета. Ранее отсечение обычно выполнялось на более грубом уровне для каждой сетки, чтобы решить, следует ли вообще рисовать объект, а также на более точном уровне для каждого треугольника в конце конвейера геометрии. Этот новый промежуточный уровень отбраковки повышает производительность при рисовании моделей, которые закрыты лишь частично. Например, если часть персонажа находится на экране, а одной руки нет, шейдер усиления может отсеять всю руку, выполнив гораздо меньше вычислений, чем потребовалось бы для затенения всех треугольников внутри нее.
Отзывы о семплере
Sampler Feedback обеспечивает лучшее визуальное качество, более короткое время загрузки и меньше зависаний благодаря предоставлению подробной информации, позволяющей разработчикам загружать текстуры только при необходимости.
Предположим, вы разработчик игры и затеняете сложную трехмерную сцену. Камера быстро перемещается по сцене, в результате чего некоторые объекты перемещаются на разные уровни детализации. Поскольку вам необходимо агрессивно оптимизировать память, вы связываете ресурсы, чтобы справиться со спросом на различные уровни детализации. Возможно, вы используете систему потоковой передачи текстур; возможно, он использует мозаичные ресурсы, чтобы держать эти гигантские 4K mip 0 нерезидентными, если они вам не нужны. В любом случае, у вас есть шейдер, который сэмплирует мип-текстуру, используя очень сложный шаблон сэмплирования. Выберите свой любимый, скажем, анизотропный.
Выборка в этом шейдере вызывает у вас некоторые вопросы.
Какой мип-уровень он в итоге сэмплировал? Кажется, очень простой вопрос. В мире до Sampler Feedback нет простого способа узнать. Вы могли бы собрать эвристику. Вы можете подумать о шаблоне выборки и сделать несколько обоснованных предположений. Но 1) у вас нет на это времени и 2) это не может быть на 100 % надежным.
Где именно в ресурсе была сделана выборка? Точнее, что вам действительно нужно знать, так это — какие тайлы? Может быть в верхнем левом углу или прямо посередине текстуры. Ваша система потоковой передачи действительно выиграет от этого, так как вы будете знать, какие MIP-файлы загружать следующими.c
Обратная связь с сэмплером решает эту проблему, позволяя шейдеру эффективно запрашивать, какая часть текстуры потребовалась для удовлетворения запроса на сэмплирование, без фактического выполнения операции сэмпла. Затем эта информация может быть возвращена в систему потоковой передачи ресурсов игры, что позволяет ей принимать более разумные и точные решения о том, какие данные следует передавать дальше. В сочетании с функцией мозаичных ресурсов D3D12 это позволяет играм отображать более крупные и детализированные текстуры, используя меньше видеопамяти.
Отклик сэмплера также позволяет использовать затенение в пространстве текстуры (TSS) — метод рендеринга, который отделяет затенение объекта в мировом пространстве от растеризации формы этого объекта до конечной цели.
TSS – это метод, который позволяет разработчикам игр выполнять дорогостоящие вычисления освещения в пространстве объектов и записывать их в текстуру, например что-то похожее на разворачивание объекта в UVW. Поскольку ничего не растеризуется, затенение может быть выполнено с использованием вычислений вообще без графического конвейера. Затем, на отдельном шаге, привяжите текстуру и растрируйте ее к экранному пространству, выполнив очень простой образец. Такой подход уменьшает алиасинг и позволяет реже вычислять освещение, чем растеризация. Разделение этих двух частот позволяет использовать более сложные методы освещения при более высокой частоте кадров.
Настройка сцены с использованием затенения в пространстве текстуры
Одним из препятствий на пути к правильной работе TSS является выяснение того, что в объектном пространстве нужно затенить для каждого объекта. Все? Вряд ли это было бы эффективно. Что делать, если видна только левая сторона объекта? Благодаря обратной связи сэмплера на этапе растеризации можно просто записать, какие текселы запрашиваются, и выполнить дорогостоящие вычисления освещения только для них.
Теперь, когда мы коснулись поверхности…
Если вы ознакомились с нашим кратким чтением и хотите знать, когда мы перейдем к техническим вопросам, мы написали подробные сообщения в блоге для разработчиков о DirectX Raytracing 1.1, шейдинге с переменной скоростью, меш-шейдерах и семплере. Обратная связь — четыре функции DX12 Ultimate.
Читайте также: