DirectX 12 в 2019 году


DirectX 12 вышел еще 29 июля 2015 года вместе с Windows 10, при этом по заявлениям Microsoft данный API разрабатывался около 5 лет. Новый API сильно отличается от DirectX 11, и позволяет практически равномерно распределять нагрузку процессора по всем ядрам, а не держать почти все дроуколы на одном ядре. Сам по себе API — это программная прослойка между железом компьютера и операционной системой, на которой вы запускаете игры и различные программы. DirectX 12 имеет низкоуровневый доступ, что дает возможность получить полный доступ к аппаратным ресурсам. Что-то похожее уже давно имеется на консолях.


AMD делала похожий API под названием Mantle, но с его API вышло мало игр, и разработка загнулась. Еще есть кроссплатформенный Vulkan, но видно, что ему не хватает поддержки от разработчиков, в отличие от того же DirectX, и как 3 года существует уже его 12-я по-своему революционная версия. Многие игры, которые используют DX12 не показывают чудес в производительности, так как чтобы воспользоваться DX12 по максиму нужно изначально разрабатывать эту игру опираясь на API DirectX 12, а не докручивать его непонятным образом во время разработки или вообще после релиза.


Хотя и нужно отметить, что с каждым годом эти показатели все лучше и лучше. Тот же недавний Battlefield 5 показывает местами прирост производительности до 70 кадров, правда такие отличия вы найдете, если не будет упора в видеокарту. Видно, что спустя время допилили как саму поддержку DX12 так и сам движок Frostbite, и кто чтобы что про него не говорил и не снимал 50-минутные разоблачающие видео, но он показывает до сих пор выдающиеся результаты. Оптимизация идет процессорной нагрузки, что и обещала Microsoft. Похожая ситуация и с другими играми.


Когда только презентовали DX12, а это было в 2014 году, то нам рассказывали просто невероятные вещи, а именно то, что приложения, которые будут использовать DX12, смогут в 2-3 раза быстрее работать, нежели приложения с DX11. С выходом Windows 10 вышел и новый API DX12, который можно было протестировать в бенчмарке 3D Mark и производительность была двукратная, в два раза больше вызовов отрисовки по сравнению с DX11, даже на картах лишь с программной поддержкой. Многие начали думать, что теперь их старенькие 2-х ядерными монстры просто смогут вывозить новенькие игры, даже оптимизацию карты до 30% обещали завести, но что-то не срослось. Уже прошло больше 3-х лет, а игр с поддержкой DX12 довольно-таки мало, ну по сравнению с DX11 это уж точно. С каждым годом эта поддержка увеличивается, но не настолько сильно, как это бы хотелось. Сейчас мы коснемся этой темы, а также затронем и другие.


Если вы помните, то DX11 вышел в 2009 году, а активно данный API начали использовать примерно в 2015 году, когда практически все игры начали выходить с нативной поддержкой DirectX 11, а не с двумя API DX9 и DX11, как это было долгое время. А DirectX 9 до сих пор иногда используется, хотя данному API уже больше 17 лет, но не суть, мы говорим про новые крупные проекты. Чтобы выпускать все игры с поддержкой DX12 нужно, чтобы большинство пользователей перешли на видеокарты с DX12, а на это понадобиться минимум еще года 3, а в лучшем случае лет 5. Хотя и нужно отметить, что старые карты поддерживают DX12, но они его поддерживают лишь программно и лишь некоторые библиотеки, а значит для полноценной поддержки понадобиться видеокарта с полноценной аппаратной поддержкой DX12.


Во-вторых, полностью на DX12 мы перейдем, когда прекратится поддержка также и оригинального Xbox One, который на рынке уже больше 5 лет и оборудование там мягко говоря устарело и также там имеется только программная, т.е. неполноценная поддержка DX12, а значит пока будут разрабатываться игры под оригинальный Xbox One, то ждать DX12 в массы не стоит, а его списывание произойдет примерно через года 2-3, тем более что на его замену уже вышел Xbox One X с аппаратной поддержкой DX12. Поэтому нужно минимум дождаться окончания поддержки оригинального Xbox One, а это наверно произойдет не скоро.


Еще стоит отметить, что API DirectX 12 обновляется каждый год. К примеру, вы знали, что данный API поддерживает унифицированную шейдерную модель 6-й версии? Не знали? Так вот, поддержка есть, но на уровне драйверов их до сих пор нет, хотя она появилось примерно 2 года назад в юбилейном обновлении Windows 10. Также в DirectX интегрирован физический движок Havok, да, Microsoft его довольно давно выкупила и при разработке игр на DX12 разработчики могут бесплатно его использовать. Данный компонент имеет название Direct Physics.


Разработчики жаловались, что очень сложно заставить карты разных производителей работать вместе. И тут же Microsoft выпустила упрощенный инструментарий для внедрения данной поддержки, из-за чего естественно будет теряться производительность, но это так никто и не реализовал, хотя и стоит отметить, что была и серьезная реализация с использованием разных карт, к примеру, в игре Ashes of the Singularity.


И вот совсем недавно вышло обновление для Windows 10 под названием October 2018 Update и помимо обновления системы произошло обновление API DirectX 12, в котором появилась поддержка на уровне API технологии трассировки лучей – DirectX Ray Tracing (DXR). Многие ошибочно полагают, что это технология NVIDIA, но нет. NVIDIA лишь дает аппаратное ускорение для трассировки, вот и все. Microsoft просто стандартизировала Рей Трэйсинг, так как по факту этой технологии уже не один десяток лет. По идее, уже должен был выйти API DirectX 13, но майки просто обновляют имеющийся DirectX, что также не очень хорошо, так как постоянно его стандарт меняется. Кстати, на консолях нового поколения AMD обещает также запилить аналогичные RT-ядра для аппаратного ускорения, но изменения от этой технологии будут не большие, как и сейчас при Рей Трейсинге, но они будут.


Если говорить про 2019 год, то DirectX 12 снова обновится, неожиданно, правда? Привыкайте, что каждый год будет обновляться данный API, при этом некоторые изменения требуются на аппаратном уровне железа. С весенним обновлением 19H1 ожидается, что Microsoft внедрит новый компонент в DirectX под названием DirectML. Данный компонент, думаю понятно из названия, будет отвечать за машинное обучение и искусственный интеллект. Для его работы потребуются тензорные RT-ядра, хотя скорее всего и обычные CUDA-ядра сгодятся, просто вычисления будут гораздо медленнее идти. Но, с другой стороны, в том же 5-й Battlefield если нет поддержки трассировки на аппаратном уровне, то и меню выбора DXR также нет, это нужно учитывать. Ну так вот, благодаря DirectML вы сможете выполнять различные профессиональные задачи, по сути, на дому, если вы занимаетесь изучением нейронных сетей, к примеру. Также немаловажным событием стоить отметить и гейминг.


На закрытой демонстрации показывали многократное повышение разрешения с FullHD до 4K при помощи машинного обучения, при этом от увеличения разрешения нагрузка на карту не росла, по крайней мере разработчики из Microsoft так говорят. Из той презентации единственное что есть, это демонстрация этого масштабирования при помощи того самого машинного обучения. Как видите, отличия есть, но при этом практически никакой дополнительной нагрузки на карту нет, кроме наверно вышеупомянутых тензорных ядер, вот до чего техника дошла.


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


В общем, полноценно DX12 еще появится не скоро, но может быть я ошибаюсь. Уже даже есть неплохие примеры. К примеру, тот же Battlefield 5 при использовании DX12 имеет прирост в 30 кадров в секунду, а в некоторых моментах и 70 кадров, как я и отмечал ранее, правда, при этом настройки графики средне-низкие. Также не нужно забывать и про альтернативу, например API Vulkan, судьба которого еще не известна. У Microsoft есть ресурсы на поддержание DX12, есть игры и монополия в ПК-сегменте. Даже если игры разрабатываются параллельно, то упор идет на DX, если мы говорим платформы Microsoft – Xbox и PC. AMD очень активно занимается продвижением Вулкана, правда с их картами серии RX задача намного усложняется и скорее всего все закончится печально как и с Mantle, но кто знает, может я опять ошибаюсь. Vulkan – очень перспективный API, одна его кроссплатформенность чего стоит, но если посмотреть на игры с поддержкой Vulkan, то как-то все не очень радужно. Многие заявляют, что они будут поддерживать Вулкан, но по факту этого нет, но при этом скромная, но доминация DX12 присутствует, хотя многие разработчики говорят, что разрабатывать игры под DX12 довольно сложная затея.


3D-программист из Ubisoft Тьяго Родригез рассказывал на мероприятии GDC 2017, что пока добиться производительности уровня DX11 с применением API DX12 очень сложно, не говоря уже про увеличение этой самой производительности. Хотя, глядя на текущие игры Ubisoft не особо понимаешь, о какой производительности там идет речь. Но тем не менее, программист похвалил новый API за счет Async Compute, они же асинхронные шейдеры.


Nixxes Software, которые занимаются портированием ПК-игр Square Enix заявляет, что из-за DX12 требуется больше усилий, но оно того стоит.


Разработчики из The Coalition, которые занимаются игровой серией Gears of War заявляют, что благодаря переходу на DX12 в Xbox One удалось освободить некоторые ресурсы, а также появились ресурсы для поддержки HDR и масштабирования до 4K.


Кстати, если кому интересно, то первой игрой с поддержкой API DX12 считается игра Star Wars Battlefront 2015 года для Xbox One. Изменений там видно было не много, так как игра работала в 720p + в основном там была программная поддержка.


Насчет программной и аппаратной поддержки. Понимаете, на уровне железа должна быть поддержка нового API, чтобы игра банально работала. К примеру, если у вас нет видеокарты с аппаратной поддержкой DX12, то выбора данного API и не будет даже в самой игре.


В принципе, можно через эмулятор DirectX попробовать запустить игру на DX11-12 на карте с DX9-10, но многих текстур и эффектов вы не будете наблюдать. Кстати, интересная программа, надо бы как-то про нее написать статью. Поэтому те, кто говорят, что на старых картах нельзя запустить новые игры – в принципе можно, но многих шейдеров, текстур, теней и частиц вы просто не увидите, а может и вообще не запустится. Хоть Microsoft и говорила, что старые карты будут поддерживать DX12, но по факту только Microsoft в своих релизах делает такую поддержку, сторонние разработчики требуют нативную поддержку DX12. Не зря же Microsoft представила 3 варианта поддержки DX12 – с ума сойти.


Если коснуться конкретнее уровней поддержки DirectX 12, то DirectX 12 API – данный уровень поддерживается всеми видеокартами как с нативной поддержкой DX11, так и с DX12. Суть его заключается в основном в равномерном и более продуктивном использовании ядер процессора.


DirectX 12_0 – данную версию API поддерживают все современные видеокарты NVIDIA и AMD. Суть ее заключается в использовании тайловых текстур, которые позволяет хранить текстуру не целиком, а лишь ее часть, после чего, ее можно будет многократно продублировать на экране. Благодаря этому размер самой текстуры уменьшается в разы, но при этом скорость рендеринга очень сильно увеличивается.


DirectX 12_1 – данную версию поддерживает пока что только видеокарты NVIDIA начиная с Maxwell 2-го поколения. Здесь главное новшество – использование консервативной растеризации, которая используется в технологии динамического суперразрешения. Естественно, я здесь все сказал, обобщенно. Но идея заключается в том, что только GPU и их архитектуры, разработанные под DirectX 12 смогут использовать все его возможности по максимуму, думаю теперь это стало ясно.


Те игры, которые поддерживают DX12 они не сказать, что много добавляют FPS, в основном разницу можно увидеть только лишь при пониженном разрешении или при низких настройках. Да, идет оптимизация потоков, но из-за упора в видеокарту все сходит на нет, поэтому многие разработчики пока не видят сильного желания разрабатывать игры под новый API, хотя с каждым годом игр с поддержкой DX12 становится все больше и больше, и когда-то произойдет тоже самое, что и с DX11 – будут разрабатывать игры и приложения только под него, но из-за постоянно меняющихся спецификаций DX12 трудно сказать, когда это действительно произойдет.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
pohozhie-programmy.ru
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: