Методи реалізації дзеркал в іграх. Розбираємося в тонкощах та проблемах з розробниками

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

Простий приклад — Alan Wake 2. За версією Digital Foundry, гра зайняла друге місце у рейтингу ігор 2023 року з найсучаснішою графікою. Горор від Remedy Entertainment назвали справжнім некстгеном. І картинка в проєкті дійсно вражає, проте в дзеркалах замість персонажа та оточення демонструється мутна каша.

Ми вирішили розібратися, які методи реалізації дзеркал в іграх існують, розглянути переваги та недоліки кожного з них та спробувати з’ясувати, чи існує один оптимальний варіант. У цьому нам допомогли українські фахівці з 4A Games, Bloober Team, ZibraAI та інших команд. Отож, починаємо.

Чому важко створювати дзеркала в іграх

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

«Все сильно залежить від жанру та стилістики гри. Немає універсальної відповіді для кожного проєкту. Складніший або простіший — це теж дуже умовне поняття, яке залежить від обраного рушія, додаткових технологій рендерингу, доступних обчислювальних потужностей, обмежень, дистанції камери до гравця, проміжних програмних застосувань, якості що береться за еталон тощо», — Віталій Привалов, CI Specialist/Senior Technical Designer у Bloober Team.

Для коректного та правдивого відображення у дзеркалі повинен демонструватися персонаж, оточення та об’єкти позаду. При цьому картинка має змінюватися в залежності від кута, під яким знаходиться камера або персонаж, і показувати рухи. Тобто дзеркала повинні реагувати на зміни в просторі в реальному часі.

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

За словами Дмитра Байдачного, Lead Technical Artist у 4A Games, при створенні дзеркал роль грають складність сцени, платформи, для яких створюється проєкт, кількість об’єктів та шейдерів тощо. Окремо йдуть різноманітні жанрові та концептуальні особливості.

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

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

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

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

Screen Space Reflection (SSR)

Почнемо з методу, який доволі часто використовується для реалізації дзеркал у сучасних іграх. Screen Space Reflection працює з інформацією, вже закладеною в сцену. Рушій робить знімок поточного кадру та аналізує його, щоб визначити об’єкти для відображення. Далі створюється спрощена версія сцени з низькою роздільною здатністю, відома як буфер відображення або G-буфер. Він містить лише об’єкти та поверхні, які будуть показуватися у віддзеркаленні.

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


Плюси

  • Висока швидкість реалізації.
  • Простота налаштування.
  • Можливість відобразити сцену.
  • Застосовується до будь-якої поверхні.

Мінуси

  • Залежить від кута огляду і не може відображати об’єкти, які не видно в кадрі, наприклад, якщо один перекриває інший.
  • Відображення великих шорстких поверхонь негативно впливає на продуктивність.
  • Через обмежену інформацію в буфері на екрані можуть з’явитися візуальні артефакти.

Planar Reflections

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

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

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


Плюси

  • Швидкість реалізації відображень.
  • Простота в налаштуванні.
  • Відображає об’єкти, які можуть бути закриті при певному положенні камери.

Мінуси

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

Cubemaps

Вперше Cubemaps представила NVDIA в 1999 році для реалізації відображень в дзеркалах машин в перегонових іграх на PlayStation 1. Тобто технологія доволі стара, проте вона не втратила свою актуальність.

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

Кожна з шести граней куба представляє напрямок у тривимірному просторі — плюсові та від’ємні X, Y, Z. Сцена рендериться з центру геометричної фігури, охоплюючи оточення у всіх напрямках. Шість отриманих зображень об’єднуються в одну текстуру, яка називається кубічною мапою. Вона може застосовуватися до поверхонь як віддзеркалення.


Плюси

  • Метод забезпечує реалістичні відображення.
  • Віддзеркалення фіксують зміни в навколишньому середовищі в реальному часі, тому Cubemaps підходить для динамічних сцен з рухомими об’єктами.

Мінуси

  • Зберігання шестигранної текстури вимагає великого обсягу пам’яті, особливо при високій роздільній здатності.
  • В певних випадках на краях граней куба можуть з’явитися помітні шви або візуальні артефакти.

Ray-Tracing

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

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

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

«При використанні трасування променів, по суті, не треба нічого робити, окрім як поставити дзеркальний матеріал. Якщо кожен пристрій буде підтримувати трасування, буде достатньо ресурсів на прорахунок, то так, це все спростить. Але поки цього не сталося, будуть й надалі імітувати дзеркала різними способами», — Дмитро Вусатий, Senior Technical Artist у 4A Games.

Однак чимало розробників вказують на головний недолік трасування променів — складність обчислення. Це дорогий метод, який доступний тільки на відеокартах з тензорними ядрами.

«Трасування променів спрощує реалізацію дзеркал, але наразі це не вписується у технічні стандарти та бюджети оптимізації тих чи інших аспектів. Все це потребує відповідного заліза, яке зараз ще не так поширено. Наразі також є більш свіжі технології, як, наприклад, Lumen, у якого дійсно є потенціал на розвиток та оптимізацію у майбутньому», — Ілля Зеленюк, Level Designer у Frogwares.

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

«Гадаю, може виникнути проблема зменшення інтенсивності освітлення у відображенні дзеркала. Тобто вона й так має зменшуватися через те, що дзеркала не ідеальні й поглинають частину світла, що падає на них, проте я маю на увазі ефекти, які не залежать від поглинальної спроможності дзеркала. Тобто зображення буде тоскнішим навіть для ідеального дзеркала. Та це лише мої припущення», — Дмитро Ясєнєв, Lead Programmer у GSC Game World.


Плюси

  • Простота у реалізації та використанні технології.
  • Забезпечує дуже реалістичні відображення.

Мінуси

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

Path-Tracing

Трасування шляхів — це вдосконалене трасування променів з важливою відмінністю. На практиці один промінь Path-Tracing розглядається як сукупність декількох Ray-Tracing, які починаються там, де закінчується перший.

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

У Path-Tracing кожен промінь, який відбивається від поверхні, діє незалежно і виступає вторинним джерелом світла. Такого ж статусу набувають поверхні, що віддзеркалюють промені. В результаті освітленість сцени значно збільшується.

Кількість променів у Path-Tracing зростає в три або чотири рази у порівнянні з Ray-Tracing, а кожне джерело світла отримує власну тінь. Якість освітлення зростає й напряму влипає на деталізацію сцени, рослинність та реалістичність відображень. Саме тому розробники бачать великий потенціал у цій технології.

«З приводу Ray-Tracing, вважаю що за технологією майбутнє, тому що є як підтримка на апаратному рівні, так і програмні рішення, наприклад, від Epic Games і Crytek. А взагалі сподіваюсь на Path-Tracing, бо він гарантує все: як гарні дзеркала, так і коректне світло», — В’ячеслав Рижков, Level Designer у 4A Games.


Плюси

  • Простота у реалізації завдяки програмній та апаратній підтримці.
  • Найреалістичніші віддзеркалення з усіх можливих.

Мінуси

  • Ще складніший для обчислення метод, з яким поки що ледве справляється флагманське залізо.

Інші методи реалізації віддзеркалень

Lumen. Технологія Unreal Engine 5, яка дозволяє реалізовувати апаратне та програмне трасування променів. Перший варіант класичний і про нього ми вже згадували. А от другий використовує Mesh Distance Fields, завдяки чому може працювати на більшій кількості платформ з менш потужним «залізом». Проте програмне трасування має низку обмежень і може застосовуватися не з усіма варіантами геометрії, матеріалів та робочих процесів.

Environment Mapping. Це найдешевший і найпростіший метод, при якому віддзеркалення навіть не відбувається. На поверхні відображається окрема заготовлена картинка з навколишнім середовищем. А якщо додати в сцену об’єкти, то вони не будуть відбиватися на поверхні.

Voxel Cone Lighting. Метод, який спрощує сцену до воксельної сітки та генерує відображення за допомогою неї. Для плоских чітких дзеркал технологія не дуже підходить, бо замість об’єктів буде демонструватися набір вокселів. Проте для певних шорстких поверхонь вона може застосовуватися.

Probe Lighting. За своєю суттю метод схожий до Environment Mapping, проте реалізовується інакше. В сцені розміщують декілька Capture-зондів, які фіксують навколишнє середовище і проєктують на поверхні. Перевага технології — це оновлення в режимі реального часу. Тобто за допомогою Probe Lighting можна передати динаміку, проте метод не здатен забезпечити високу деталізацію, тому не підходить для плоских дзеркальних поверхонь.

Дублювання кімнати. Найстаріший метод реалізації дзеркал, при якому за прозорою поверхнею розміщується точна копія приміщення і головного героя. Останній стоїть обличчям до справжньої кімнати та повторює всі рухи гравця зі своєї позиції. Один з яскравих прикладів застосування дублювання можна побачити в Duke Nukem 3D 1996 року випуску.

Проте і в сучасних проєктах метод застосовується. В Cyberpunk 2077 дзеркала в окремих заставках реалізували саме за допомогою копії приміщення. А персонажів за потреби переміщували між кімнатами по різні сторони прозорої перетинки, щоб створити ефект віддзеркалення. Гравець цього бачити не міг, бо не контролював Ві у заставці.

Клон головного героя теж помістили в дубльоване приміщення, а при погляді у «дзеркало», йому буквально передавалася зовнішність, налаштована користувачем. Це помітно в режимі вільної камери. Якщо поглянути збоку, то виявиться, що у Ві в справжній кімнаті зникала голова. ЇЇ підставляли моделі на іншій стороні відображення.

Думки розробників щодо вибору методів реалізації дзеркал

Дмитро Байдачний, Lead Technical Artist у 4A Games

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

Данило Андрєєв, Middle 3D/Rendering Engineer у ZibraAI

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

Віталій Привалов, CI Specialist/Senior Technical Designer у Bloober Team

На останньому з проєктів, тобто The Medium, я безпосередньо займався технічним прототипуванням, рівнів які використовували дзеркала як ігроладний елемент. Через специфіку проєкту як такого в більшості місць були використані стандартні render-target’и, на поверхню яких проєктувалося зображення з віддзеркаленого потойбічного світу гри для ситуацій, коли гравець знаходився в реальному світі, й навпаки. Для більш класичних ситуацій використовувалися різні технології, в тому числі трасування променів, в залежності від цільової платформи.

Кожен проєкт є унікальним з точки зору підходу до дизайну, художнього стилю й технологій, що використовуються. Також дуже багато залежить від render-програмістів, фірм-розробників ігрових рушіїв, бо саме вони пропонують технічні рішення «з коробки», які пізніше використовує більшість індустрії як готовий інструмент.

Ілля Зеленюк, Level Designer у Frogwares

Оптимальним методом реалізації дзеркал є поєднання Screen Space Reflections та технології Capture, які дозволяють створювати дзеркала у просторах зі статичним освітленням, навіть якщо ми говоримо про динамічне відображення в реальному часі. Наприклад, гравець може побачити себе та власні рухи у дзеркалі. Загалом в індустрії вже давно є проблема з відображенням дзеркал. Це не секрет, що такий елемент доволі важко оптимізувати, але є проєкти, які розв’язують цю проблему, наприклад крайня трилогія в серії Hitman.

В’ячеслав Рижков, Level Designer у 4A Games

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


А ви працювали над дзеркалами в іграх? Якщо так, то які методи застосовували? Можливо, у вас є власна думка щодо оптимальних варіантів створення відображень? Діліться в коментарях.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини

👍ПодобаєтьсяСподобалось10
До обраногоВ обраному5
LinkedIn


Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я здогадувався, що це важко, але не здогадувався, що настільки. Цікаво.

Дякую за цікаву статтю.

Дякую вам, що прочитали!

Підписатись на коментарі