Переклад: Анатомія ігрового движка Total War, Частина 1



Добрий день, шановні читачі. Вашій увазі пропонується переклад захоплюючій серії статей по архітектурі ігрового движка Total War.

Кому цікаво, ласкаво просимо під кат!

Дозвольте мені почати з поверхневого розбору закінченого фонового Total War: Attila. У наступних статтях я розповім вам про серйозні зміни і оптимізацію, які були зроблені під час розробки Total War: Warhammer.

Тіні
Кожен новий кадр починається з відтворення тіней від основного направленого джерела світла. Використовуються каскадні карти тіней: 2 — 4 каскаду в залежності від налаштування графіки. Ландшафт не отрісовиваємих в карту тіней, але для стратегії реального часу, як ви могли вже уявити, ми промальовуємо величезна кількість маленьких об'єктів порівняно з шутерами від першої або третьої особи, які малюють менше, але більш детально. На скріншоті нижче зображено фінальний кадр движка Total War: Attila.



Ландшафт
Ландшафт — одна з найважливіших частин в нашій грі. Будучи стратегією в реальному часі, ландшафт в нашій грі дещо відрізняється від ландшафту в іграх від першої особи. Ми орієнтуємося на середні-дальні дистанції, а не на ближні. Ландшафт повинен бути розбитий на повторювані патерни – тайли, і мати плавний перехід між різними видами ландшафту. Також має підтримуватися миттєве переміщення при клацанні гравця на мінікарте, що створює додаткові труднощі з потоковими техніками. Також на карті знаходиться безліч мешей (частина скелі, наприклад), які повинні змішуватися з текстурами ландшафту, які, в свою чергу, самі є комбінацією декількох шарів.

Кожне поле бою містить безліч тайлів, шматків, на які розділена карта. В іграх серії Total War глобальна карта величезна, тому неможливо змусити художників і моделеров створити її цілком вручну. Для того, щоб впоратися з цим, вони використовують тайли. Сам тайл можна представити у вигляді окремої карти. Однак коли ви починаєте битву на карті компанії, поле бою збирається з навколишніх тайлів які можуть бути різні – як за розміром, так і за формою. У результаті виходить, що кожне поле бою зібрано з декількох тайлів, де кожен тайл використовує свій власний набір текстур. Щоб сховати артефакти при сшитии тайлів, ми змішуємо їх текстури.

Приміром, уявіть Т-образний перетин тайлів ліси, пустелі і болота. Кожен тайл містить 8 шарів текстур, і в деяких точках необхідно змішати текстури всіх трьох тайлів, що означає потенційне змішування 24 шарів на кожен піксель. Кожен шар містить текстури –нормалі і відображає/блискучу, що означає 24×3 = 72 текстур на піксель. У нас немає обмежень, як багато тайлів/шарів можуть змішуватися.

Що б задовольнити всі потреби, спочатку ми промальовуємо тільки карту глибини (включаючи згенерований ландшафт і меші, створені художниками). Після ми пробігаємо screen-space алгоритмами по кожному тайлу, кожен з яких має власну мапу змішування і проектує шари на геометрію, яку ви можете представляти велику спроецированную декаль.

GBuffer
У GBuffer зберігається 3 текстури в наступному вигляді:



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

Ви також могли помітити, що ми використовуємо розсіює/відображає матеріал, а не кольоровий/металевий. Це якась традиція, і ми в процесі зміни.

Освітлення
Велика частина освітлення надходить від основного направленого джерела світла. Існує статистично прорахована BRDF модель, яка фізично правильна і дає розподіл микрофасетов, засноване на гаусовому розподілу. Вперше ця модель була представлена в Total War: Rome II. Це дає ідеальні (невытянутые) дзеркальні відображення сфери і дозволяє працювати з розміром сонячного диска.

Total War: Attila має свою реалізацію системи глобального затінення (ambient occlusion).

Частинки
Частинки створюються на CPU, але симулюються і обробляються на GPU. Підтримуються три типи GPU частинок: квад (quad), спроектовані декалі і ненаправлений джерело світла. Поверх всього цього знаходиться CPU пайплайн з обмеженою функціональністю для частинок, що складаються з мешей.

Tonemapping
Ми використовуємо tonemapping оператор, заснований на кривій з автоматичними рівнями, які, в свою чергу, засновані на середній/мінімальної/максимальної яскравості на екрані.

Пайплайн Total War: Attila (спрощений)


У наступній статті ми розглянемо, як заміриться продуктивність в Total War і поглянемо на основні шейдерні оптимізації, що дозволяють отримати потрібну продуктивність.

Від перекладача PS:
Про деяких темах («Tonemapping» і «дзеркальні відображення сфери») у мене є тільки теоретичні поверхневі знання, тому був би дуже вдячний за конструктивну критику та коментарі до перекладу.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.