Пошук по сайту

up

Microsoft DirectX 11 – новий крок еволюції ігрової графіки

10-11-2009

Вперше про DirectX 11 світ почув в листопаді 2008 року, тоді компанія Microsoft представила свої початкові розробки API (Application Programming Interface) і нові можливості обробки графіки. Офіційно ж DirectX 11 став доступний 22 жовтня 2009 року, разом з виходом нової операційної системи Windows 7 (хоча доступний у вигляді оновлення і для Windows Vista). Причому перші графічні адаптери для апаратної підтримки DirectX 11 представила компанія AMD ще до офіційної появи фінальної версії API. Графічний процесор під кодовою назвою RV870 офіційно є першим в світі рішенням з повною підтримкою нових технологій, включених до складу Microsoft DirectX 11. Випуск Radeon HD 5870 (RV870) від AMD відбувся 23 вересня 2009 року, а першою грою, в якій можна буде насолодитися всією красою нових технологій, є Colin McRae: DIRT 2 від компанії Codemaster, саме вони перші заявили про використання DirectX 11. У недалекому майбутньому варто чекати відповіді і від NVIDIA для візуалізації нових ігор з підтримкою DirectX 11, яких з часом буде все більше і більше.

Фактично нова версія DirectX 11 є розширеною і кращою версією свого попередника DirectX 10. Найбільш серйозною відмінністю між попередньою і новою версіями API є модуль тесселяції, який присутній в DirectX 11. Проте є і інші абсолютно нові технології, які стають доступні в новому Direct3D11.

Порівняння можливостей візуалізації DirectX 10 і DirectX 11

Порівняння деталізації зображення в DirectX 10 і DirectX 11: СТАЛКЕР - Заклик прип’яті

Головні особливості і новини DirectX 11

  • Tessellator (модуль тесселяції)
  • Shader Model 5.0 (Шейдерна Модель версії 5.0)
  • Compute Shader (Обчислювані шейдери)
  • Multithreaded rendering (Багатопотокова візуалізація)
  • BC6 & BC7 (два нові формати стиснення текстур)
  • Conservative oDepth (Запис шейдера в буфер глибини)

Tessellator (модуль тесселяції)

Тесселяція не є абсолютно новою технологією, вперше її стали використовувати відеопроцесори Xenos, які були розроблені компанією AMD для ігрових консолей Xbox 360 в 2005 році. Проте, модуль тесселяції використаний в DirectX 11 є стійкішим і гнучкішим, ніж модуль, використаний в графічних процесорах Xenos.

Тесселяція - збільшення кількості полігонів

Тесселяція покращує процес створення авторського контенту і дозволить розробникам і художникам створювати реалістичніших і складніших персонажів, уникаючи при цьому величезних витрат продуктивності системи. В основі тесселяції лежить ідея про те, що об'єкт, розташований далеко від точки огляду, буде менш деталізований, через те, що його важко розглянути, але з наближенням кількість трикутників в зображенні об'єкту експоненціально збільшується з метою поліпшення його деталізації для того, щоб він виглядав реалістичніше. Досконалістю цього методу є те, що, при розгляді прорахованого зображення, середнє число оброблених трикутників залишається близько до стійкого значення, так що гравцю значно рідше доведеться зустрічатися з різкими падіннями продуктивності його системи. Подібний виграш в продуктивності найбільше підходить для розробки консольних ігор, тому що там апаратні засоби часто дуже обмежені, але і для платформи ПК тесселяція принесе значну вигоду.

Всі стадії обробляються в графічному процесорі

Процес тесселяції предмету починається в Hull Shader (поверхневий шейдер) - він бере контрольні крапки і обчислює потрібний рівень тесселяції. Після цієї базисної реорганізації контрольні крапки вирушають в Domain Shader (доменний шейдер) - тесселятор абсолютно нічого не знає про контрольні крапки. Замість цього, тесселятору надають деяку кількість параметрів тесселяції, які задають йому необхідний рівень тесселяції на певному патчі (особливі мінімальні шматочки об'єкту). Hull Shader повідомляє тесселятору, в якому порядку він повинен працювати - розробник зможе визначити, яким методом відбудеться процес тесселяції, оскільки модуль тесселяції має в своєму розпорядженні фіксований комплект функцій, у нього є декілька операційних режимів. Тесселятор бере те, що було подане йому з Hull Shader і діє в патчі над формуванням необхідної додаткової геометрії. Як тільки ця стадія буде завершена, він видасть доменні крапки (domain points) і дані топології. Доменні крапки подаються в Domain Shader, який створює на їх основі вершини, доступні іншій частині конвеєра. Одночасно дані топології адресуються прямо на етап збірки примітивів конвеєра - це здійснюється тому, що дані шейдерам не потрібні, вони підготовлені для растеризатора. Тут потрібно відзначити те, що на всіх етапах стадії тесселяції робота ведеться не з трикутниками – замість цього обробляються патчі і крапки. Патчі є кривими або областями поверхні і практично завжди є чотирикутниками. Це перший випадок, коли DirectX використовує у якості примітивів не трикутники, і це є суттєвим кроком вперед.

Мінімальний рівень тесселяції

Максимальний рівень тесселяції

Все, що описане вище, здійснюється за один прохід через конвеєр DirectX 11. Виходячи з цього, ми бачимо, що у нього є значний потенціал стати неймовірно ефективним способом додавання величезної кількості деталей в майбутні ігри.

Переваги тесселяції

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

Геометричні шейдери – створення і знищення вершин на апаратному рівні, використання у якості примітиву не трикутників, новий рівень масштабування продуктивності.

Shader Model 5.0 (Шейдерна Модель версії 5.0)

Набор бібліотек Microsoft DirectX 11 приніс з собою розширення мови низькорівневого програмування - Shader Model 5.0, який використовує об'єктно-орієнтовані концепції, з тим, аби полегшити розробку шейдерів і внести деякі допоміжні можливості.

Детальний розгляд нової шейдерної моделі

Це оновлення для HLSL (High Level Shading Language) дає програмісту повний контроль над компілятором HLSL для вирішення проблеми спеціалізації шейдерів шляхом використання інтерфейсів, об'єктів і поліморфізму. Завдяки динамічному контролю за шейдерами, розробники зможуть без проблем створювати великі гнучкі шейдери замість спеціалізованих оптимізованих версій для вживання під час певних моментів візуалізації.

Новий підхід до написання багатофункціональних шейдерів

Новий механізм Dynamic Shader Linking дозволить замість написання купи різнорідних шейдерів опису матеріалу і джерел світла, а також їх взаємодії, створювати один універсальний шейдер з досить простим для читання кодом, що  полегшить і прискорить програмування і відладку.

Також Shader Model 5.0 доповнена рядом інструкцій для прискорення визначення країв полігонів при виконанні функцій згладжування, прискорення виконання алгоритмів фільтрації тіней, додаткового перетворення даних, прискорення стиснення їх і розпаковування, а також діставання інших можливостей. Всі ці розширення і доповнення покликані спростити роботу програміста, а також дозволити отримати реалістичніші візуальні ефекти без помітного зниження продуктивності.

Compute Shader (Обчислювані шейдери)

DirectCompute - головним чином це комунікація даних між потоками і величезний вибір примітивів для випадкового доступу і потокових операцій вводу/виводу. Ці функції санкціонують простіші і швидші реалізації вже вживаних методик, таких як створення зображень і постобробка, а також розкривають нові методи, які можуть діяти на апаратних засобах Direct3D11.

Процес роботи Compute Shader

Фактично і на графічних процесорах попередніх поколінь виробники відеокарт реалізовували подібні функції, які отримували фірмове найменування і використання – технології ATI Stream і NVIDIA CUDA. Компанія ж Microsoft в DirectX 11 вирішила уніфікувати розширені обчислювальні можливості відеокарт, дозволяючи створювати програмний код, що виконується на всіх нових відеоприскорювачах, не залежно від виробника графічного процесора. Використання DirectCompute відкриває нові горизонти: постобробка кадрів і відеопотоку, кращий штучний інтелект, реалістичніша фізика і т. ін..

В якості демонстрації можливостей вживання Compute Shader компанія AMD представила дві «демки»: AMD Ladybug DirectX 11 Demo і AMD Mecha DirectX 11 Demo.

Демонстрація ефектів постобробки за допомогою DirectCompute

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

Прискорення обробки напівпрозорих матеріалів за допомогою DirectCompute

В «демо версії» Mecha показаний інший варіант вживання нових можливостей – рендерінг об'єктів з напівпрозорих матеріалів без попереднього сортування примітивів. Самі по собі напівпрозорі об'єкти не є новиною, але тепер значною мірою можна спростити роботу з ними і прискорити обробку, що дозволяє створювати складніші і красивіші сцени і ефекти.

Multithreaded rendering (Багатопотокова візуалізація)

У DirectX 11 внесли зміни, які дозволять розробникам вдосконалити управління GPU з боку багатоядерного CPU. DirectX 11 збільшує масштабування ресурсів CPU через модифікації в моделях API і драйвера. Асинхронний доступ до пристроїв стає допустимим за допомогою двох ключових особливостей об'єкту Direct3D 11 Device.

Процес послідовної візуалізації

Процес багатопотокової візуалізації

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

BC6 & BC7 (два нових формати стиснення текстур)

Найбільший об'єм пам'яті в іграх найчастіше надається текстурам, тому стає ясним прагнення розробників вдосконалити стиснення текстур, яке необхідне для мінімізації об'ємів вживаної пам'яті і зниження вимог до її пропускної спроможності без впливу на необхідний для візуалізації час. DirectX 11 дає розробникам новоспечені формати стиснення (BC6 для HDR-текстур і BC7 для LDR-зображень і карт нормалей), які покликані допомогти їм досягти високоякісної візуалізації, не жертвуючи при цьому продуктивністю.

Зліва розташовано оригінальне зображення HDR, готове до обробки, а праворуч еквівалентне стисле зображення BC6, а по центру зображена абсолютною погрішність.

Результат вживання компресії BC7 порівняно з BC3 – втрати деталізації при використанні нового алгоритму практично відсутні.

Conservative oDepth (Запис шейдера в буфер глибини)

Частенько розробникам доводиться відключати Z-структури і алгоритми, коли відбувається запис шейдера в буфер глибини крізь регістр oDepth. Функція Conservative oDepth в DirectX 11 дозволяє шейдерам здійснювати запис в буфер глибини в межах певної зарезервованої зони. Це дозволить апаратним засобам уникнути значної втрати в продуктивності, вирішуючи використання прискорення за межами вказаної зони.

Також до нововведень DirectX 11, покликаних спростити, поліпшити і прискорити, відноситься цілий ряд менш значимих можливостей (Addressable Stream Out, Draw Indirect, Pull-model attribute eval, Improved Gather4, MIN-LOD texture clamps, Geometry shader instance programming model, Read-only depth or stencil views і ін.), щоправда достатнього об'єму достовірної і зрозумілої інформації по ним доки немає.

DirectX 11 в іграх

Все що ми вище описували, є виключно оглядом того, що додалося в новому API для розробників, проте все ж цікаво поглянути на те, що приніс новий DirectX для комп'ютерних гравців всього світу. Окрім нових відеокарт і витрат на них, Direct3D11 вносить до ігор новий рівень деталізації предметів, збільшення кількості різних ефектів і кращу обробку світлових променів. Графіка в іграх, яка була і так сильно наближена до фотореалістичності, стане ще яскравішою і правдоподібнішою.

Але перш ніж розглядати приголомшливі ефекти, що з'явилися завдяки тесселяції, давайте поглянемо на еволюцію графічних API на прикладі цікавого нового демо-бенчмарка Heaven Benchmark від земляків Unigine Corp.

Unigine Heaven Benchmark DirectX 9.0c

Навіть при використанні лише можливостей DirectX 9 сцени з Heaven Benchmark виглядають досить ефектно, хоча і не так реалістично, як те хотілося б.

Unigine Heaven Benchmark OPENGL

Якщо розглянути ту ж сцену, але з розкриттям можливостей API OPENGL, то в першу чергу помітна зміна деталізації дрібних масових об'єктів, таких як трава і голки/листя, що додає реалістичності.

Unigine Heaven Benchmark DirectX 10.0

В порівнянні з DirectX 9 в DirectX 10 з'являються можливості аналогічні сцені в режимі OPENGL, але тінь виходить м'якшою і цілісною, а світлові ефекти виходять реалістичнішими. Дуже добре видно перевагу DirectX 10 в динаміці, особливо при зміні інтенсивності і кількості джерел освітлення.

Unigine Heaven Benchmark DirectX 11

А ось в DirectX 11 нарешті вдається показати, що всі об'єкти в сцені мають свій індивідуальний рельєф, а також ще на порядок збільшити деталізацію всього. Найефектніше і візуально дійсно об'ємною здається черепиця на даху, рельєфні елементи будинку, а також камені  вздовж дороги – з бруківкою розробники навіть перестаралися.

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

Без тесселяції

Тесселяція включена

Без тесселяції

Тесселяція включена

Без тесселяції

Тесселяція включена

Без тесселяції

Тесселяція включена

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

Автори: Роман Дода, Олександр Черноiван
Переклад: Анна Смірнова

При підготовці матеріалу використана інформація з наступних джерел:
www.microsoft.com
news.softpedia.com
www.bit-tech.net
ru.wikipedia.org
www.tomshardware.com
en.hardspell.com

Стаття прочитана раз(и)
Опубліковано : 10-11-2009
Підписатися на наші канали
telegram YouTube facebook Instagram