У чому відмінності та які варто використовувати?

У 2015 році, разом із виходом Windows 10, з’явився і DirectX 12. Цей випуск став початком нової епохи для геймерів та розробників ігор. DirectX 12 від Microsoft швидко здобув популярність завдяки здатності зменшувати навантаження на центральний процесор (ЦП) та підвищувати продуктивність графічного процесора (GPU).

Але чи дійсно підвищення продуктивності є таким простим, як перехід з DirectX 11 на DirectX 12? Давайте дослідимо відмінності між цими двома версіями.

Що таке Microsoft DirectX?

Як вже зазначалося в огляді Microsoft DirectX, ця технологія являє собою набір програмних інтерфейсів (API), які застосовуються для реалізації мультимедійних завдань, включаючи програмування ігор на платформах Microsoft, таких як Windows та Xbox. Щоб зрозуміти суть, коротко розглянемо поняття API.

API дозволяє двом або більше комп’ютерним програмам взаємодіяти між собою. Уявіть собі телефон. Коли ваша мама надсилає вам текстове повідомлення зі списком покупок, ваш телефон отримує ці дані та відображає їх. По суті, це і є робота API.

Які відмінності між DirectX 11 та DirectX 12?

Отже, яка ж різниця між DirectX 11 та DirectX 12? Простіше кажучи, DirectX 12 – це новіша версія. Однією з ключових відмінностей є спосіб їх взаємодії з апаратним забезпеченням. Більшість ігор, розроблених на DirectX 11, використовують лише від двох до чотирьох ядер ЦП. Одне з цих ядер зазвичай відповідає за відправлення інструкцій до графічного процесора.

Решта ядер використовуються для обробки різних ресурсомістких операцій, таких як ігрові ефекти або промальовування дальніх об’єктів. Натомість, DirectX 12 розподіляє навантаження ЦП між багатьма ядрами, дозволяючи кожному з них одночасно спілкуватися з графічним процесором.

DirectX 12 також має в своєму арсеналі кілька цікавих нововведень, зокрема асинхронні обчислення та об’єкти стану конвеєра (PSO). Асинхронні обчислення підвищують ефективність використання GPU, дозволяючи обробляти кілька завдань паралельно, розкриваючи повний потенціал вашого графічного процесора.

Крім рендерингу графіки, графічний процесор виконує безліч інших операцій, наприклад, алгоритми машинного навчання. У DirectX 11 графічний процесор може виконувати лише одне завдання за раз і в чіткій послідовності. Це призводить до зниження продуктивності, оскільки ресурси GPU використовуються неоптимально.

Уявіть собі офіціанта в ресторані. Коли він приймає замовлення, він спершу запитує про напої. Після подачі напоїв, він запитує про основну страву. Ваше замовлення виконується поетапно. Офіціант не запитає вас про десерт, поки ви не отримаєте основну страву. Хоча такий підхід є ефективним, він не є максимально продуктивним.

В обчисленнях, кожне завдання офіціанта виконував би окремий ресурс GPU. Поки ви не отримаєте напій, ресурси графічного процесора, необхідні для замовлення основної страви, залишатимуться неактивними. Завдяки асинхронним обчисленням DirectX 12, офіціант може приймати все ваше замовлення одразу, подібно до мережі швидкого харчування. Це максимізує використання GPU та покращує ігрову продуктивність.

DirectX 12 також впровадив об’єкти стану конвеєра (PSO). У DirectX 11, коли ігрова геометрія передається графічному процесору для рендерингу, різні апаратні параметри відповідають за інтерпретацію та візуалізацію цих даних. Це називається графічним конвеєром – потоком вхідних та вихідних даних, що відбувається під час рендерингу кадрів. Однак графічний конвеєр DirectX 11 не є ідеальним.

Цей конвеєр має ряд станів, включаючи стан растеризації, змішування та трафарету глибини. У DirectX 11 існують залежності між цими станами. Отже, один стан не може бути завершено до визначення попереднього. Це знижує ефективність використання GPU та збільшує навантаження на ЦП, що впливає на продуктивність.

Щоб вирішити цю проблему, DirectX 12 ввів PSO – об’єкти, що описують стан всього графічного конвеєра. PSO можна уявити як контейнер, що містить усі необхідні стани та компоненти для створення зображення. Це дозволяє графічному процесору попередньо обробляти кожен залежний стан, замість постійного перерахунку, базуючись на поточному графічному конвеєрі.

Це значно зменшує навантаження на ЦП, характерне для DirectX 11, та покращує продуктивність. Який вигляд мають ці відмінності на практиці? Згідно з даними Microsoft, DirectX 12 зменшує навантаження на ЦП на 50% та збільшує продуктивність GPU на 20%. Однак, слід зазначити, що ці покращення можуть відрізнятися в залежності від конкретного випадку.

Чому перехід з DirectX 11 на DirectX 12 не є простим?

DirectX 11 вперше з’явився 27 жовтня 2009 року для Windows Vista. DirectX 12, що вийшов у 2015 році, з’явився через шість років після DirectX 11. За цей період тисячі ігор були розроблені з використанням 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 проти DX 12: що обрати?

Вибір залежить від багатьох факторів, зокрема від конкретної гри. Наприклад, Guild Wars 2 використовує DirectX 11. Навіть якщо ваша операційна система та апаратне забезпечення підтримують DirectX 12, ви не зможете обрати його в Guild Wars 2, оскільки гра його не підтримує. Це повністю залежить від рішення розробників ArenaNet.

Автор зображення: Мартін Керштайн/Guild Wars 2

Цікаво, що ArenaNet знадобилося дев’ять років, щоб перейти з DirectX 9 на DirectX 11. Проте деякі ігри підтримують як DirectX 11, так і DirectX 12, зокрема Fortnite, Battlefield 5 та Shadow of the Tomb Raider. Користувачі можуть перемикатися між DirectX 11 та DirectX 12 у налаштуваннях гри.

Наявність ігор, що підтримують обидві версії, напевно викликає запитання про продуктивність. Чи вибір DX 11 або DX 12 дійсно впливає на продуктивність? Наступне відео демонструє відмінності між DirectX 11 та DirectX 12 в різних іграх, показуючи важливі показники, такі як середня частота кадрів за секунду, використання ЦП та 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.