DirectX 12 был выпущен вместе с Windows 10 в 2015 году. С его выходом DirectX 12 от Microsoft открыл новую эру для геймеров и разработчиков игр. Способный снизить нагрузку на CPU и повысить производительность GPU, DirectX 12 быстро завоевал популярность.
Однако так ли просто повысить производительность, перейдя с DirectX 11 на DirectX 12? Давайте выясним это, рассмотрев различия между DirectX 11 и 12.
Что такое DirectX от Microsoft?
Как уже говорилось в нашем обзоре Microsoft DirectX, DirectX — это набор интерфейсов прикладного программирования (API), используемых для решения задач, связанных с мультимедиа. К ним относится программирование игр на платформах Microsoft, таких как Windows и Xbox. Чтобы пояснить контекст, давайте кратко расскажем об API.
API позволяет двум или нескольким компьютерным программам взаимодействовать друг с другом, о чем мы рассказывали в обзоре API. Подумайте об этом, как о телефоне. Если ваша мама отправит вам смс со списком продуктов, ваш телефон получит эти данные и отобразит их для вас. По сути, это и есть API.
В чем различия между DirectX 11 и DirectX 12?
В чем же заключаются различия между DirectX 11 и DirectX 12? Проще говоря, DirectX 12 — это последняя версия DirectX. Одно из наиболее заметных отличий — это взаимодействие с аппаратным обеспечением. Большинство игр, разработанных с использованием DirectX 11, задействуют от двух до четырех ядер процессора. Одно из этих ядер обычно сообщает графическому процессору, что нужно делать.
Остальные ядра игра использует для обработки различных параметров, требующих большого количества CPU, например, частиц или расстояния прорисовки. С другой стороны, DirectX 12 распределяет нагрузку на CPU между несколькими ядрами и позволяет каждому ядру одновременно общаться с GPU.
DirectX 12 также оснащен некоторыми «причудливыми» возможностями. К ним относятся асинхронные вычисления и объекты состояния конвейера (PSO). Асинхронные вычисления повышают эффективность использования GPU, позволяя нескольким рабочим нагрузкам работать параллельно. Это, по сути, раскрывает весь потенциал GPU.
Помимо рендеринга графики, GPU выполняет множество других задач, например, запуск алгоритмов машинного обучения. В DirectX 11 GPU может выполнять только одну из этих задач одновременно и в определенном порядке. В этом случае производительность падает, поскольку ресурсы GPU используются неэффективно.
Подумайте об этом, как официант в ресторане. Когда официант принимает заказ, он сначала спрашивает, что вы хотите выпить. После того как вы получили напитки, он спрашивает, что вы хотите на основное блюдо. Заказ выполняется поэтапно. Официант не станет спрашивать, что вы хотите на десерт, пока вы не съели основное блюдо. Хотя это и эффективно, но не настолько, как могло бы быть.
В вычислительной технике каждую из задач официанта выполнял бы отдельный ресурс GPU. Пока вы не получите свой напиток, ресурсы GPU, необходимые для выполнения заказа основного блюда, будут простаивать. С асинхронными вычислениями DirectX 12 официант сможет принимать ваш заказ одновременно, как в сети ресторанов быстрого питания. Это позволяет максимально эффективно использовать графический процессор и повысить производительность в играх.
В DirectX 12 также появились объекты состояния конвейера (PSO). В DirectX 11, когда геометрия игры передается на GPU для рендеринга, различные аппаратные настройки отвечают за интерпретацию и рендеринг этих данных. Это называется графическим конвейером и потоком входных и выходных данных, которые происходят при рендеринге кадров на GPU. Однако графический конвейер DirectX 11 не идеален.
Этот конвейер содержит набор различных состояний, включая состояние растеризации, состояние наложения, состояние трафарета глубины и другие компоненты. В DirectX 11 между этими состояниями существуют зависимости. В результате одно состояние не может быть завершено до тех пор, пока не будет определено предыдущее состояние. Это снижает загрузку GPU и увеличивает нагрузку на CPU за счет снижения производительности.
Чтобы обойти эту проблему, в DirectX 12 появились PSO — объекты, описывающие состояние всего графического конвейера. PSOs похожи на бутылку, в которой содержатся различные состояния и компоненты, необходимые для создания изображения. Это позволяет графическому процессору предварительно обрабатывать каждое зависимое состояние вместо того, чтобы постоянно пересчитывать состояния на основе текущего графического конвейера.
Это значительно снижает накладные расходы CPU, характерные для DirectX 11, и повышает производительность. Как же выглядит это различие? По данным Microsoft, DirectX 12 снижает нагрузку на центральный процессор на 50% и повышает производительность GPU на 20%. Хотя это и значительные улучшения, это не означает, что вы увидите те же результаты.
Почему переход с DirectX 11 на DirectX 12 не так прост
Впервые DirectX 11 был выпущен для Windows Vista 27 октября 2009 года. Таким образом, если учесть, что DirectX 12 выйдет в 2015 году, то между DirectX 11 и DirectX 12 пройдет шесть лет. За это время тысячи игр были разработаны с использованием DirectX 11. К сожалению, переход с DirectX 11 на DirectX 12 не так прост.
DirectX 11 — это так называемый API высокого уровня. Проще говоря, разработчикам проще работать с высокоуровневыми API. В результате получаются стабильные, отполированные и играбельные игры. С другой стороны, DirectX 12 — это низкоуровневый API и совсем другой зверь, чем DirectX 11. Хотя он и позволяет разработчикам настраивать оптимизацию на более тонком уровне, его использование требует обширных знаний.
Таким образом, игра, созданная на DirectX 12, может иметь худшую производительность в зависимости от знаний разработчика об этом API. В DirectX 12 есть некоторые улучшения, но все зависит от того, насколько хорошо разработчик сможет их реализовать. По этой причине многие разработчики предпочитают придерживаться высокоуровневых API, таких как DirectX 11.
DX 11 vs. DX 12: что выбрать?
Ответ зависит от нескольких моментов, например, от того, какую игру вы пытаетесь запустить. Например, Guild Wars 2 работает на DirectX 11. Даже если ваша ОС и аппаратное обеспечение могут использовать DirectX 12, в Guild Wars 2 у вас не будет возможности выбрать DirectX 11, поскольку игра его не поддерживает. Это полностью решение разработчика, компании ArenaNet.
Хотите верьте, хотите нет, но ArenaNet потребовалось девять лет, чтобы перейти с DirectX 9 на DirectX 11. Однако некоторые игры поддерживают и DirectX 11, и DirectX 12, в том числе Fortnite (читайте нашу шпаргалку по Fortnite), Battlefield 5, Shadow of the Tomb Raider и другие. Пользователи могут переключаться между DirectX 11 и DirectX 12 в настройках игры.
Тот факт, что некоторые игры поддерживают DirectX 11 и 12, наверняка заставил вас задуматься о производительности в игре. Выбирая DX 11 или DX 12, можно ли добиться лучшей производительности в игре? В следующем видеоролике показаны различия между DirectX 11 и DirectX 12 в ряде игр, а также такие важные характеристики, как средняя частота кадров в секунду, использование CPU, GPU и т.д. на базе AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti и 16 ГБ оперативной памяти DDR4.
Результаты во многом удивительны: визуальная разница между DX 11 и DX 12 практически не ощущается, несмотря на несколько лет разницы между их выходом. Возможно, вы также заметили разницу в нагрузке на GPU и CPU между обеими версиями DirectX: DX 12-версии каждой игры обычно требуют меньше ресурсов, чем старые DX 11.
Помимо поддержки в играх, выбор между DirectX 11 и DirectX 12 также зависит от аппаратного обеспечения. Практически любой современный графический процессор поддерживает DirectX 12, но этого нельзя сказать о старых графических процессорах, таких как Radeon HD 4870. Этот графический процессор, выпущенный в 2008 г., поддерживает только DirectX 10. Это означает, что он не сможет работать с большинством современных игр, которые работают с использованием DirectX 11 и DirectX 12.
Является ли DirectX 12 правильным выбором для вас?
В целом, переход с DirectX 11 на DirectX 12 не так уж черно-бел, как кажется. Это зависит от множества факторов, таких как аппаратное и программное обеспечение, операционная система, а также от того, поддерживает ли игра оба варианта. Все это необходимо учитывать перед принятием решения, и, скорее всего, это будет справедливо и для будущих поколений DirectX.