Железный эксперимент: DirectX 12 против DirectX 11

В 2018 году вышла третья часть возрожденного сериала Tomb Raider. Новые приключения Лары Крофт развернулись на фоне густых джунглей и древних строений Майя. В очередной раз был доработан движок и прямо со старта игра получила поддержку DirectX 12.

Shadow of the Tomb Raider грозила стать и первой игрой с эффектами на базе трассировки лучей, но соответствующее обновление до сих не вышло. Игра постоянно фигурирует в наших последних обзорах видеокарт.

В данном материале мы решили провести комплексное сравнение разных моделей, используя разные версии DirectX.

Железный эксперимент: DirectX 12 против DirectX 11

В основе игры движок Foundation Engine, который традиционно радует отличной детализацией крупных уровней.

Поскольку место действие сместилось в жаркие тропики, теперь больше растительности, она выглядит живее, дрожит на ветру и отбрасывает тени.

Сложная структура ландшафта сочетается с фактурными рельефными поверхностями. Активно используется тесселяция для придания дополнительного объема неровным поверхностям.

Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11

На столь же высоком уровне детализация персонажей. Для воссоздания живых динамических волос Лары используется технология PureHair.

Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11

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

Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11

Shadow of the Tomb Raider работает в среде DirectX 11 или DirectX 12. На данный момент никакой визуальной разницы эти режимы не предлагают, разница только в производительности. Если будут добавлены тени или отражения на базе трассировки, то они будут работать в DirectX 12.

Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11

Участники тестирования

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

Новое поколение NVIDIA представлено рефереренсной видеокартой GeForce RTX 2080 Ti Founders Edition.

Видеокарта ASUS DUAL-RTX2080-O8G заменяет GeForce RTX 2080 Founders Edition.

Присутствует флагман старого поколения — GeForce GTX 1080 Ti.

В тестировании примут участие две версии GeForce RTX 2070. Это частотный аналог версии Founders Edition в лице ASUS DUAL-RTX2070-O8G.

Самые простые GeForce RTX 2070 представлены MSI GeForce RTX 2070 Armor 8G.

Со стороны AMD единственным высокопроизводительным вариантом является Radeon RX Vega 64 референсного дизайна.

Полный список участников приведен ниже:

Все видеоадаптеры приводились к стандартным частотам, чтобы соответствовать референсным вариантам. Участники протестированы в номинале и в разгоне.

Тестовый стенд

Конфигурация тестового стенда следующая:

  • процессор: Intel Core i7-6950X (3.0@4,1 ГГц);
  • кулер: Noctua NH-D15 (два вентилятора NF-A15 PWM, 140 мм, 1300 об/мин);
  • материнская плата: MSI X99S MPower (Intel X99);
  • память: G.Skill F4-3200C14Q-32GTZ (4×8 ГБ, DDR4-3200, CL14-14-14-35);
  • системный диск: Kingston SSDNow KC400 (256 ГБ, SATA 6Gb/s);
  • дополнительный диск: WD Red 3TB WD30EFRX (3 ТБ, SATA 6Gb/s, 5400 об/мин);
  • блок питания: Seasonic SS-750KM (750 Вт);
  • монитор: ASUS PB278Q (2560х1440, 27″);
  • операционная система: Windows 10 Pro x64;
  • драйвер Radeon: AMD Adrenalin Edition 18.10.2 и 18.12.1.1;
  • драйвер GeForce: NVIDIA GeForce 416.34 и 417.71.

Для тестов задействован встроенный бенчмарк, который прогонялся шесть-семь раз.

Начнем с разрешения 1920×1080. Вначале проверим возможности бюджетных видеокарт при настройках высокого качества, потом задействует профиль максимального качества графики.

  • Во всех случаях активно сглаживание TAA, предлагаемое по умолчанию.

Серьезная разница в производительности между DirectX 11 и DirectX 12, которая заметно сказывается на разнице между прямыми конкурентами. GeForce GTX 1060 быстрее в старом API, но в DirectX 12 лидирует Radeon RX 580.

И для решений AMD ускорение при переходе к DirectX 12 наиболее заметно, у GeForce GTX 1060 оно минимально. У GeForce GTX 1050 Ti результаты остаются примерно на одном уровне, а более простые видеокарты только теряют в производительности.

При этом GeForce GTX 960 или Radeon R9 270X не вытягивают высокое качество в любом режиме, но со средними настройками в DirectX 11 они должны справиться.

  1. На фоне низких результатов бюджетных видеокарт далее сравним только более мощные решения при Ultra-графике.

Знакомая ситуация. В DirectX 11 первое место у GeForce GTX 1060, а DirectX 12 видеоадаптер уступает Radeon RX 580, хотя разгон минимизирует разницу между ними. Все участники получают ускорение в новом API, но у AMD оно более значительное. Загрузка видеопамяти при таких настройках может достигать 6 ГБ.

  • Далее сравним решения старшего ценового сегмента в высоких разрешениях 2560×1440 и 3840×2160.

Очень показательные результаты в DirectX 11, когда почти все видеокарты уперлись в одинаковый минимальный fps. По всем признакам производительность тут ограничивается процессором, но этот фактор нивелируется при переходе к DirectX 12.

Во втором режиме Radeon RX Vega 64 немного обгоняет GeForce GTX 1080. Быстрее этих видеоадаптеров GeForce RTX 2070. Старый флагман GeForce GTX 1080 Ti немного уступает GeForce RTX 2080 Founders Edition.

Результаты GeForce RTX 2080 Ti можно смело назвать впечатляющими, отрыв от GeForce RTX 2080 на уровне 22–28%.

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

Комфортный уровень fps при Ultra-настройках показывает только GeForce RTX 2080 Ti. Результаты GeForce RTX 2080 ниже на 27–28%, после небольшой коррекции настроек комфортно играть можно и с этим видеоадаптером.

Переход на DirectX 12 в нашем случае обеспечивает в основном рост минимального fps. Загрузка видеопамяти может достигать 7,5 ГБ.

Поговорим немного о дополнительных настройках. В меню лаунчера при выборе профиля Ultra-качества не все параметры устанавливаются в максимально возможно значение.

Пользователь дополнительно может повысить анизотропную фильтрацию до 16x, выбрать максимальное качество теней, контактных теней и повысить параметр детализации. Доступно и несколько режимов сглаживания: SMAA, TAA, SMAA T2x, SMAA 4x.

Мы проверили влияние этих настроек на GeForce RTX 2080 Ti. Ниже результаты в 4K при выборе максимально возможного качества, в стандартном Ultra-режиме и при разном сглаживании.

Повышение настроек выше обычного режима Ultra съедает 2–4% производительности. Результаты при SMAA и TAA одинаковы, SMAA T2x дается чуть тяжелее, но серьезное падение fps только со сглаживанием SMAA 4x. Субъективно мы бы рекомендовали SMAA, с этим сглаживанием картинка немного четче при аналогичной производительности. Хотя реальные различия минимальны.

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

В качестве дополнительных наглядных материалов приведем два видеоролика. Это сравнение GeForce GTX 1060, Radeon RX 580 и Radeon RX 590 в разрешении 1920×1080:

И демонстрация Shadow of the Tomb Raider в 4K на GeForce RTX 2080 Ti:

Выводы

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

Интересно, что в Battlefield V и Resident Evil 2 на нашей тестовой конфигурации мы получаем более высокий fps именно в DirectX 11, хотя эти игры могут показывать некоторое преимущество DirectX 12 на боле слабых процессорах.

А Shadow of the Tomb Raider явно демонстрирует, что слабым местом в DirectX 11 является процессор Intel Core i7-6950X, это хорошо видно в связке с топовыми видеокартами. И только DirectX 12 обеспечивает максимальную отдачу и лучшую производительность в данной игре.

Нормально играть в Full HD при максимальных настройках можно на Radeon RX 580, GeForce GTX 1060 или с боле новыми решениями этого класса.

Для разрешения 2560×1440 нужны видеокарты уровня Radeon RX Vega 64 и GeForce GTX 1080 или современные аналоги. Требования для 4K очень высокие, тут не обойтись без GeForce RTX 2080 Ti.

Но если не гнаться за максимальными настройками, то и GeForce RTX 2080 позволит играть в максимальном разрешении.

Чем отличается DirectX 9 от 11

Тема в разделе «Техническая поддержка по Dota 2», создана пользователем Vitsir, 13 Mar 2018 в 09:43 .

Оценить пост #

Железный эксперимент: DirectX 12 против DirectX 11

Выбрать вулкан или dx11 на 1080ti и i7 6700 ? И почему?

Железный эксперимент: DirectX 12 против DirectX 11Железный эксперимент: DirectX 12 против DirectX 11

По идеи с твоим железом будет 0 разницы. Это тем у кого просадки надо колдовать над дотой, чтобы выиграть пару фпс.

Железный эксперимент: DirectX 12 против DirectX 11

По идеи с твоим железом будет 0 разницы. Это тем у кого просадки надо колдовать над дотой, чтобы выиграть пару фпс.

Графика не меняется?

Serezhka86

Железный эксперимент: DirectX 12 против DirectX 11

В смысле? В какой именно игре есть выбор dx11 и вулкана? Dx9 cразу отлетает. А там смотри по фпсу

аа, дотка, надо было не в этом разделе создавать тему

Железный эксперимент: DirectX 12 против DirectX 11

Выбрать вулкан или dx11 на 1080ti и i7 6700 ? И почему?

Вулкан тебе не нужен, он для слабых машин, для тебя будет 0 толку

Железный эксперимент: DirectX 12 против DirectX 11

В смысле? В какой именно игре есть выбор dx11 и вулкана? Dx9 cразу отлетает. А там смотри по фпсу

япростотутзашел

Железный эксперимент: DirectX 12 против DirectX 11

Ну вообще вулкан он больше к АМД товарам, но в играх где он есть я использую именно его

Железный эксперимент: DirectX 12 против DirectX 11

Вулкан тебе не нужен, он для слабых машин, для тебя будет 0 толку

Понял,спасибо.Изменений в графике нет?То есть лучше поставить dx11 и не париться?

Понял,спасибо.Изменений в графике нет?То есть лучше поставить dx11 и не париться?

  • Нет не будет никаких изменений в графике.
  • Оставляй всё по дефолту и играй
  • Нет не будет никаких изменений в графике.
  • Оставляй всё по дефолту и играй
  • Спасибо большое.Да я так и оставлял по дефолту,но во вчерашнем обновлении в настройках графики появился выбор API
Читайте также:  5 лучших смартфонов, которые запрещено ввозить в Россию

Понял,спасибо.Изменений в графике нет?То есть лучше поставить dx11 и не париться?

  1. Нормальный такой вопросец,учитывая то,что ты собираешься катать на gtx 1080 ti
  2. А не вбросер ли ты часом?
  3. Нормальный такой вопросец,учитывая то,что ты собираешься катать на gtx 1080 ti
  4. А не вбросер ли ты часом?
  5. В чем вброс?Я имею в виду не разницу ФПС,а разницу по качеству графики (освещение другое,детализация получше)
  6. В чем вброс?Я имею в виду не разницу ФПС,а разницу по качеству графики (освещение другое,детализация получше)
  7. Я давно делал видос со сравнением фпс и графики
  8. Я давно делал видос со сравнением фпс и графики

Chloe Price

  • Я давно делал видос
  • Он уже не актуален)По сабжу — ДХ11, ибо плавнее график кадра = меньше просадок.
  • Он уже не актуален)По сабжу — ДХ11, ибо плавнее график кадра = меньше просадок.
  • Спасибо,я так и сделал)
  • Он уже не актуален)По сабжу — ДХ11, ибо плавнее график кадра = меньше просадок.

а нагрузка на видюху ? сильнее греется при дх11?

Lover Left You Bleeding

Ты хоть пробовал вулкан в дотке или сразу полез темку создавать? Он багнутый шо псц.

Chloe Price

а нагрузка на видюху ? сильнее греется при дх11?

Хмм, не проверял.

Говорю лишь что знаю.

no1lovesme

  1. Хмм, не проверял.
  2. Говорю лишь что знаю.

На dx11 комп сходил с ума после выхода из игры. И после пиков долгая загрузка, иногда вплоть до кика с сервера. Может у меня только. С вулканом та же история. Видимо нагрузка на систему все же у dx11 выше.

Проблема решилась на более чем 50 процентов после постановки dx9.

DX9 vs. DX11: различия в игре

  • Разница совсем невелика, может модельки стали и посглажаней, но из-за низких текстур не заметно, но все равно графика как-то приятна глазу
  • Хорош по графону ценить, цени сюжет и геймплей!
  • Спасибо. Если ФПС побольше и на этом спасибо)
  • DX11, все на максимуме:
  • На DX9 не пробовал.
  • да я на direct 9 играю и мне плевать на direct 11

если все пользователи playground.ru скинуться мне по 1 гривне вот тогда я буду с класной видюхой, с Direct 11 и с новой квартирой, которую заставлю экранами и холодильниками с бухлом. вот это мечта xD. . .

ладно не об этом! не у всех есть возможность поиграть с 50 фпс и насладиться супер качеством!

на счет разницы. . . конечно есть! по скринам не видно! сделай 2 АБСОЛЮТНО одинаковых видео(ролики добавь туда) и слепи что бы была видна разница, на скринах плохо видно =

На DX11 как уже было замечено выше, игра работает ощутимо быстрее, есть возможность выставить улучшенные мягкие тени и DOF на высоко, а так же тесселяция которую кстати очень хорошо видно! На DX9 тени и DOF ограничены в положении «нормально» тессиляция не доступна ну и работает игра заметно медленнее. Других различий пока не заметил.

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

Железный эксперимент: DirectX 12 против DirectX 11

Оглавление

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

А «улучшенная оптимизация» — это рациональное использование системных требований. Цепочка ясная и логичная. По идее, все должны быть в плюсе. Разработчики реализуют свой творческий потенциал и обзаведутся любовью (и денежками) геймеров.

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

30 сентября 2016 года DirectX исполнится 21 год. Но только в 12-й версии Microsoft решила перейти к низкоуровневому программированию.

Я уже высказывал свое мнение относительно DirectX 12. В последнее время среди компьютерных (и консольных тоже) игр присутствует слишком много низкокачественного продукта. Халтурят все, даже так называемые ААА-проекты то и дело щупают дно. Складывается впечатление, что разработчики вообще не утруждают себя тестированием и оптимизацией своей продукции.

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

Купить видеокарту за 650 долларов США, чтобы не получить 60 кадров в секунду в разрешении Full HD — это уж слишком, знаете ли! Выход видеокарт Polaris и Pascal отчасти исправит эту ситуацию, ведь откровенно устаревший 28-нанометровый техпроцесс используется вот уже целых пять лет. Переход на 16-нанометровые «рельсы» даст серьезный толчок в плане быстродействия.

В сложившейся ситуации помочь должен и DirectX 12. Конвейер заработал, в марте поддержкой нового API обзавелись достаточно культовые франшизы про «Агента 47» и расхитительницу гробниц Лару Крофт.

Железный эксперимент: DirectX 12 против DirectX 11

Коротко o DirectX 12

Про основную «фишку» DirectX 12 я написал. Низкоуровневый API снижает уровень абстрагирования оборудования. Подробно про двенадцатую версию детища Microsoft мы уже писали. Не вижу смысла повторяться. Возможности DirectX 12 в «вакууме» наглядно демонстрирует специальный тестовый пакет бенчмарка 3DMark.

Согласно результатам, эффективность низкоуровневых API (не забываем про Mantle и Vulkan) выше минимум на порядок. Все очень просто: DirectX 11 накладывает ограничения на количество команд отрисовки центрального процессора. Но будем честны: 3DMark — это всего лишь 3DMark.

Цифры красивые, однако с реальностью никак не соотносятся.

Сравнение производительности DirectX 11 и DirectX 12 в 3DMark

DirectX 12 поддерживается всеми современными видеокартами, но есть один нюанс. API разделен на три уровня: DirectX 12 API, DirectX 12 _ 0 и DirectX 12 _ 1.

Начальную версию интерфейса поддерживают все графические чипы AMD и NVIDIA, выпущенные по 28-нанометровому техпроцессу, а также линейка адапетров GeForce 400/500 поколения Fermi. А вот дальше начинаются расхождения.

Список поколений 3D-ускорителей занесен в сводную таблицу. Под видеокартами Maxwell 1-го поколения подразумеваются адаптеры GeForce GTX 750/750 Ti.

Directx9 или directx11?

DirectX11 ИнициализацияВсем привет.. Пытаюсь инициализировать ДХ но постоянно ругается. Подскажите плис в чём моя.

Прорисовка куба с использованием DirectX11Начал изучать DirectX. Написал первую программу (вывод куба) и столкнулся с проблемой. Выводимая на.

Обработка нажатия клавиш в Directx11Доброе время суток. Наверняка мой вопрос окажется довольно простым для многих, но я справиться с.

Мерцание при движении DirectX11Двигаю камеру вправо или влево и при этом картинка ниче так мерцает (если что выдает 300 fps). То.

Нужен простой пример скелетной анимации на DirectX11Может у кого есть рабочий пример скелетной анимации (GPU). Желательно с загрузкой анимации из fbx.

Что лучше: Directx 9 или 10?

Завершаю теоретическое и практическое изучение С++, пора потихоньку определяться с АПИ, почитал про OGL и DX, выбрал для себя DX, почему, объяснять здесь не буду, так собс-но сабж: Какой лучше изучать сейчас, 9 или 10?

ИМХО лучше 10. 9 отживает своё потихоньку. Добавление:Если 10, то тогда про XP забудь. Тока 7 или Vista. Про другие оси не знаю.

  1. Почему это имеет значение, думаю, что объяснять не нужно.
  2. Скажите конкретно, пусть даже 11, с чего мне начинать, чтобы потом не переучиваться?
  3. vq# > Скажите конкретно, пусть даже 11, с чего мне начинать, чтобы потом не переучиваться?

Ща начнется. По 10 и 11 книг толком нет. Тока примеры, наверное. Английские доки. Хотя есть какая-то книга по 10 на англ.

ExtremeTech оценили производительность WoW при DirectX 11 и DirectX 12

Железный эксперимент: DirectX 12 против DirectX 11
Железный эксперимент: DirectX 12 против DirectX 11

Авторы сайта extremetech.com, специализирующегося на новостях компьютерных программ, аппаратуры и связанных с ними технологий, провели несколько тестов, оценив производительность World of Warcraft при DirectX 11 и DirectX 12. Поддержка DirectX 12 появилась с выходом препатча Battle for Azeroth, и некоторые игроки озадачились вопросом, стоит ли использовать этот режим или игра с ним чувствует себя хуже, чем со старым. Авторы материала ответили на этот вопрос. Публикуем перевод.

Тестируем поддержку DirectX 12 в World of Warcraft

Пару недель назад Blizzard выпустили обновление, предваряющее выход следующего дополнения для World of Warcraft: Battle for Azeroth. Одним из изменений нового дополнения, касающимся игрового движка, стала поддержка API DirectX 12 и удаление старого DX9.

Это крупное изменение для игры, особенно если учитывать общий возраст движка, поэтому мы решили опробовать в деле и DirectX 11, и DirectX 12, использовав видеокарты AMD Vega 64 и Nvidia GeForce GTX 1080.

Тестовым стендом в нашем случае стала моя собственная система — Ivy Bridge-E Core i7-4960X с установленными в четырехканальной конфигурации DDR3-1600 на 16 ГБ. Для оценки мы провели два отдельных теста. В первом мы просто летали по городу Даларану кругами.

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

Бурлящий берег был добавлен в игру еще в феврале, но это наиболее приближенный к Battle for Azeroth контент, доступный нам для тестирования (основная цель поля боя — сбор азерита, который, кстати, играет важную роль в BfA). Очевидно, что PvP сражения могут проходить совершенно по-разному, поэтому для уравнивания условий мы выбрали относительно длительный период игры.

Читайте также:  Материнская плата ASUS Maximus III Extreme – новый стандарт для оверклокеров?

Железный эксперимент: DirectX 12 против DirectX 11

В нашем первом тесте, полете по Даларану, DirectX 12 явно не является победителем. Минимальная производительность Nvidia (ее 0,1% время кадра) заметно ниже при DX12 в сравнении с DX11, и средняя частота смены кадров тоже ниже. Общая производительность AMD в этих двух тестах почти одинакова, но их минимальная частота смены кадров немного различается.

Железный эксперимент: DirectX 12 против DirectX 11

Переход к PvP на Бурлящем берегу почти никак не повлиял на это распределение. И снова минимальная частота смены кадров как для AMD, так и Nvidia выше при использовании DirectX 11. В целом Nvidia лучше показывает себя в World of Warcraft при использовании обоих API, хотя разрыв невелик — около 9%, что находится на уровне с предыдущими сравнениями Vega 64 и GTX 1080.

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

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

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

Также в определенных случаях мы заметили, что производительность AMD при использовании DirectX 12 была выше, чем у Nvidia, но, как правило, на небольшие значения. В любом случае, по крайней мере для WoW, посыл ясен. Если вы используете более продвинутый процессор и достаточно новую видеокарту, то DirectX 11 является лучшим выбором.

Мы наблюдаем за ситуацией и проведем повторное тестирование или заново изучим вопрос, если Blizzard сообщат о повышении производительности нового API относительно старого.

Сравнение DirectX 9, 10, 11, 12

DirectX обеспечивает стабильную работу аппаратных устройств компьютера, в том числе видеокарты – API компании Microsoft влияет на индустрию геймдева самым прямым образом, во многом задавая стандарты разработки видеоигр.

Программное обеспечение распространяется бесплатно.

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

DirectX 9 vs DirectX 11 ↓ DirectX 11 vs DirectX 12 ↓

Влияние Директ Икс на игры

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

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

Благодаря DirectX игры получают доступ к аппаратным возможностям видеокарт.

Компания Microsoft поставляет API в архиве, установка происходит автоматически – пользователю достаточно запустить инсталлятор и подтвердить принятие лицензионного соглашения.

Большая часть файлов DirectX хранится в папке System32. Библиотеки активируются приложениями без участия пользователя – просто запустите игру и наслаждайтесь красивой графикой!

DirectX 9 VS DirectX 11

В DirectX 11 нагрузка на GPU многоядерных видеокарт распределяется равномерно. Производительность видеоплат класса middle-end и low-end значительно увеличилась, если сравнивать с девятой версией API, при условии запуска игры с аналогичными настройками графики.

В играх появились новые спецэффекты, в целом, качество графики значительно улучшилось, в том числе и за счет поддержки шейдеров 5.0 (В DX9 только 2.0).

Также разработчики позаботились о совместимости мультимедйиного контента, включая видеоигры, с форматом 16:9, который окончательно вытеснил с рынка устаревшие форм-факторы 5:4 и 4:3.

Железный эксперимент: DirectX 12 против DirectX 11

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

Во-вторых, пользователям пришлось переходить на Windows 7 – пакет DirectX 11 несовместим с более ранними версиями ОС. Кроме того, в некоторых играх отмечалось снижение четкости текстур при максимально высоком уровне сглаживания, например, в Dark Souls 2 (на некоторых видеокартах).

Впрочем, на фоне преимуществ DirectX 11 недостатки кажутся несущественными.

DirectX 11 VS DirectX 12

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

В сценах с небольшим количеством объектов и производительность выше с DirectX 11 (если для обработки данных достаточно одного ядра CPU). Выигрыш в производительности при использовании многопоточной технологии больше заметен на процессорах AMD, нежели на Intel – эта особенность обусловлена большим числом ядер.

Из-за сложностей в программировании раскрыть все возможности движка на DirectX 12 не удастся, если изначально разработка велась под DirectX 11.

Технология RTX может значительно снизить производительность системы – пользоваться главной особенностью двенадцатого Директ Икса смогут только обладатели очень мощных видеокарт.

Железный эксперимент: DirectX 12 против DirectX 11

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

DirectX 12 — от Леонардо да Винчи к современному искусству

Компьютерная графика — обширная и быстроразвивающаяся дисциплина.

С каждым годом интерфейсы прикладного программирования становятся более гибкими, что позволяет на их основе реализовывать более сложные алгоритмы формирования и обработки изображений.

Однако возможности интерактивной графики не достигли уровня пакетов 3d-моделирования и визуализации. Все это подталкивает к активным исследованиям в данной области.

Железный эксперимент: DirectX 12 против DirectX 11

DirectX 12 — компонент интерфейса программирования высокопроизводительной графики. Основные цели нового интерфейса — снижение CPU-оверхеда драйвера, понижение уровня абстрагирования оборудования, возможность объединения графических карт на уровне API (до этого существовали только vender-specific решения CrossFireX, NVIDIA SLI). Официально выпущен Microsoft в июле 2015.

Статья рассчитана на тех, кто уже работал с графическими библиотеками (OpenGL, DirectX 11). Однако для людей, которые планирует начать изучение графики именно с 12 версии возможно тоже будет полезной.

В ней мы рассмотрим следующие темы:

  • Окружение
  • Краткое описание графического пайплайна
  • Новые возможности DirectX 12
    1. Состояния
    2. Команды
    3. Синхронизация
    4. Прикрепление ресурсов

Окружение

DirectX 12 является частью Windows SDK в Windows 10. В качестве IDE используем Visual Studio, язык программирования C++. Для работы с DirectX, необходимо подключить хедеры d3d12.h dxgi1_6.h и библиотеки d3d12.lib, dxguid.lib, dxgi.lib, d3dcompiler.lib.

Все это лежит в стандартных каталогах Windows SDK. Так же распространяется «D3D12 Helper Library» в виде одного заголовочного файла d3dx12.h, она позволяет сократить количество boilerplate кода. Его можно просто скачать по адресу d3dx12.h и вложить в проект.

Краткое описание графического пайплайна

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

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

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

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

Преобразование вершин

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

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

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

Каждая вершина обрабатывается параллельно с другими вершинами на доступных ядрах графического ускорителя. Основной результат вершинной программы — преобразовать координаты из модельного пространства в специальное пространство отсечения (clip space).

Построение примитивов и растеризация

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

Над этими примитивами может производиться отсечение плоскостям, определенными в программе. Также на этом этапе могут быть отброшены задние треугольники объектов. Определяются эти треугольники по направлению обхода вершин (по часовой стрелке или против).

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

Текстурирование и окрашивание

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

Читайте также:  Xi3 представляет два новых модульных компьютера X7A и X3A

Пофрагментные операции

На этом этапе проводится ряд пофрагментных тестов, таких как тест отсечения (scissor test), тест трафарета (stencil test) и тест глубины (depth test). Эти тесты определяют конечный вид, цвет и глубину фрагмента перед обновлением экранного буфера.

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

Операция смешивания выполняется на этом этапе, поскольку стадия текстурирования и окрашивания не имеют доступа к экранному буферу.

Более детальное устройство конвейера можно посмотреть в спецификации DirectX 11 (документ по DiretcX 12 затрагивает лишь изменения с предыдущей версией)

Новые возможности DirectX 12

Мы переходим от теоретической части непосредственно к описанию конкретных возможностей DirectX 12.

Состояния

В 11 версии программистам известны различные функции изменения состояний графического ускорителя: RSSetState(), OMSetDepthStencilState(), OMSetBlendState(). Оказалось, что такой подход плохо ложится на оборудование.

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

В новой версии инженеры переосмыслили этот подход и исключили атомарное изменений состояний, теперь они объединены в одно — PSO (Pipeline State Object).

Такое нововведение кажется более удобным со стороны пользователя: теперь не нужно беспокоиться о «висячих состояниях», которые остались с прошлых проходов. Более того, для лучшей эффективности установки, теперь дополнительно требуется передавать информацию о всех прикрепленных ресурсах в шейдер через Root Signature (об этом ниже).

Команды

В ранних версиях пользователи отправляли команды через так называемый immideate context. Под капотом создавались отложенные командные очереди и по мере заполнения отправлялись оборудованию.

Необходимо отметить, что в DirectX 11 существует возможность создания deferred context. В DirectX 12 immideate context был исключен и deferred концепция стала основной.

Теперь программист должен заполнить deferred command list, и в необходимый момент отправить его на исполнение.

Таким образом, реализация двойной и тройной буферизаций теперь выглядит более явно: создаются соответствующее количество command list, как только они заполнены, CPU переходит в режим ожидания свободного листа.

Здесь же стоит упомянуть о ресурсах, которые прикреплены к конкретному командному листу. Теперь удаление ресурса, использующегося на GPU, ведет к непредсказуемым последствиям. Например, раньше легально было выполнить Release() для текстуры которая еще используются — драйвер автоматически отследит, когда ресурс перестанет использоваться и только после этого удалит его.

Синхронизация

Для возможности отслеживания работы GPU, DirectX 12 предоставляет концепцию fence, которая инкапсулирована объектом ID3D12Fence интерфейсом. Fence — это целое число, которое представляет выполненную работу GPU на текущий момент.

Сначала происходит эмитинг следующего «свободного» значения, вызывая ID3D12CommandQueue::Signal() в командной очереди. Затем с помощью ID3D12Fence::SetEventOnCompletion(UINT64 Value, HANDLE hEvent) происходит ассоциирование значения с примитивом winapi event.

Теперь поток с помощью WaitForSingleObject() над подготовленным event-ом может приостановить выполнение до момента выполнения всей работы, предшествующий контрольному значению.

Как только вся работа на GPU выполнится, значение в fence обновится, вызов WaitForSingleObject() разблокируется и поток продолжит выполнение.

Прикрепление ресурсов

Биндинг ресурсов в шейдер — одна из самых запутанных тем современного DirectX.

Обзор

В DirectX 11 использовалась следующая модель биндинга: каждый ресурс устанавливался в шейдер соответствующим вызовом API. Например, для установки двух текстур (если не задумываться о семплерах) в 5 и 6 слоты пиксельного шейдера применялся следующий код:

ID3D11ShaderResourceView* srvs[] = {
texture1->GetShaderResourceView();
texture2->GetShaderResourceView();
};
context->PSSetShaderResources(5, 2, srvs);

Где GetShaderResourceView() возвращает указатель на объект типа ID3D11ShaderResourceView. В шейдере затем текстуры использовались так:

Texture2D texture1 : register(t5);
Texture2D texture2 : register(t6);

Такая система достаточно удобная со стороны программиста, но с точки зрения графического ускорителя нет. Допустим, нам необходимо прикрепить текстуру на чтение в шейдере. Как должна быть передана информация о текстуре? Если мы заглянем в документацию GCN ISA, найдем следующий параграф:

All vector memory operations use an image resource constant (T#) that is a 128- or 256-bit value in SGPRs. This constant is sent to the texture cache when the instruction is executed. This constant defines the address, data format, and characteristics of the surface in memory.

Это означает, что для того чтобы описать текстуру, нам нужен этот небольшой дескриптор (128 или 256-битный), который нужно поместить в любое место памяти. Если мы прочтем остальную часть документации, мы заметим, что этот же шаблон также используется для всех других типов ресурсов.

Фактически, когда дело доходит до доступа к ресурсу, понятие «слот» бессмысленно. Графический адаптер оперирует дескрипторами: текстуры (T#), сэмплера (S#) или константы (V#).

С Direct3D 12 эти дескрипторы, наконец, отображаются непосредственно на дескрипторы оборудования — некоторая память GPU.

Дескрипторы

Сейчас ресурсы не прикрепляются в графический пайплайн прямо через вызовы методов, прикрепление происходит опосредовано через дескрипторы.

Дескриптор — небольшой кусочек памяти, который содержит информацию о ресурсе (GPU виртуальный адрес, и, например, количество мипов, формат).

Множество дескрипторов хранятся в дескрипторной куче — это просто массив дескрипторов фиксированного размера. Дескрипторные кучи могут содержать информацию о разных типах ресурсов:

  • Constant buffer views (CBVs)
  • Unordered access views (UAVs)
  • Shader resource views (SRVs)
  • Samplers

CBVs, UAVs, SRVs могут содержаться в одной дескрипторной куче, а описания семплеров — в отдельной. Это разделение выражает тот факт, что семплеры в ускорителе обрабатываются отдельно.

Выше мы упомянули так называемые shader visible ресурсы. Соответственно, существуют non shader visible ресурсы:

  • Render Target Views (RTVs)
  • Depth Stencil Views (DSVs)
  • Stream Output Views (SOVs)

Такие views ресурсов предназначаются только для прикрепления ресурса в пайплан (но не для использования в шейдере), и поэтому их нужно создавать в отдельной non shader visible дескрипторной куче (это задается флагом D3D12_DESCRIPTOR_HEAP_FLAGS::D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE при создании кучи).

Есть еще одна группа view's, для которых дескрипторы (и, соответственно, дескрипторная куча) не требуются:

  • Index Buffer View (IBV)
  • Vertex Buffer View (VBV)

Представлены типами D3D12_INDEX_BUFFER_VIEW и D3D12_VERTEX_BUFFER_VIEW соответственно. То есть описания индексных и вершинных буферов содержатся в указанных выше структурах и затем передаются напрямую в Pipeline State Object. Вся память в PSO автоматически версионируется драйвером.

Таким образом, теперь вместо создания множества объектов типа ID3D11…View, мы создаем дескрипторы в дескрипторной куче.

Root signature

Root signature — объект DirectX 12 API который задает соответствие лэйаута дескрипторов и данных в слоты шейдера.

Это, в некотором смысле, действительно сигнатура шейдера только с точки зрения использования ресурсов.

Root signature не содержит конкретных дескрипторов и данных, она лишь задает лэйаут (устройство) дескрипторов, которые биндятся уже позднее на этапе рендеринга.

Root signature состоит из массив записей, которые называются root parameter. Действительные данные root parameter устанавливаются в рантайме и называются root arguments. Меняя root argument, меняются данные которые читает шейдер. Root parameter бывают трех типов:

  • Root constants (1 DWORD == 32bit value)
  • Inline descriptors (так как 64-bit GPU virtual addresses, стоит 2 DWORDs каждый)
  • Таблица дескрипторов (1 DWORD)

Максимальный размер root signature — 64 DWORDs. Типы отсортированы по возрастанию уровня косвенности доступа ресурса в шейдере, но по убыванию возможностей.

Root constant это встроенное в root signature 32-битное значение, которое используется в шейдере как constant buffer.

Предназначается для наиболее активно изменяющихся констант (например, MVP матрицы), но имеет жесткие ограничения на максимальный размер (всего поместится 4 матрицы).

Так же такие данные доступны в шейдере с нулевым уровнем косвенности, и имеют более быстрый доступ чем все остальные способы. Полностью версионируются драйвером: их можно «установить и забыть».

Приложение может поместить дескрипторы напрямую в root signature во избежании хранения дескрипторов в куче дескрипторов — это второй способ inline descriptors. Пример таких данных — константа per object. Таким образом, не нужно беспокоиться о свободном месте в куче дескрипторов. Имеет первый уровень косвенности.

Версионируется сам дескриптор (то есть описание ресурса), но ресурс который описывает этот дескриптор должен быть доступен до завершения его использования на GPU.

Установка конкретных данных производится, например, методом ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView, в него передается индекс root parameter нашего inline descriptor и виртуальный адрес буфера.

Мы подошли к третьему, основному и универсальному способу прикрепления ресурсов. Таблица дескрипторов содержит массив descriptor range. Descriptor range — описание непрерывной цепочки дескрипторов определенного типа. Описание одной записи в таблицы дескрипторов проще показать кодом:

typedef enum D3D12_DESCRIPTOR_RANGE_TYPE
{
D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
D3D12_DESCRIPTOR_RANGE_TYPE_UAV = ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) ,
D3D12_DESCRIPTOR_RANGE_TYPE_CBV = ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) ,
D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 )
} D3D12_DESCRIPTOR_RANGE_TYPE;

typedef struct D3D12_DESCRIPTOR_RANGE
{
D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
UINT NumDescriptors;
UINT BaseShaderRegister;
//…
} D3D12_DESCRIPTOR_RANGE;

Видим, что RangeType — указывает тип дескриптора, NumDescriptors — количество, BaseShaderRegister — номер регистра внутри шейдера. Остальные параметры служат для расширенной настройки и пока не будем их рассматривать.

В рантайме дескрипторы устанавливаются методом ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable, в него передается индекс root parameter нашей таблицы дескрипторов и первый дескриптор. Все дескрипторы, указанные в описании таблицы дескрипторов, подхватываются автоматически.

Из этого следует, что они должны располагаться непрерывно друг за другом в descriptor heap.

Заключение

Мы рассмотрели некоторые возможности DirectX 12. Если вам интересная данная тема или любая другая из области компьютерной графики, отписывайтесь в х.

Ссылки: https://docs.microsoft.com/en-us/windows/win32/direct3d12/directx-12-programming-guide https://developer.nvidia.com/dx12-dos-and-donts https://gpuopen.com/performance-root-signature-descriptor-sets/

Ссылка на основную публикацию
Adblock
detector