Ремейк моєї старої гри по Зоряним Війнам у Unreal Engine 5
Всім привіт, мене звати Дмитро Куценко, і я інді-розробник ігор. У далекому 2018 році я створив фанатську гру про Зоряні Війни для мобільних пристроїв, яку назвав «STAR WARS: The Death Star Assault». Гра відтворювала момент з фільму, де Люк Скайвокер повинен був знищити Зірку смерті, пролітаючи через технологічний канал.
Поки я працював над своєю основною грою на власному IP, вийшла нова версія рушія UE5.3, і мені стало цікаво, чи варто переносити мій основний проект або зачекати на версію UE5.4. Тому я вирішив трохи повернутися до початку свого шляху у геймдеві та обрав для цього свій старий проект, щоб протестувати UE5.3 та деякий інший софт на реальному, невеликому проекті.
Перед собою я поставив ціль: створити цей проект протягом 7 днів, використовуючи свій вільний від основного проекту час і мінімізуючи роботу над ассетами. Це означало використання готових ассетів, якщо такі були доступні. Проте, як це зазвичай буває з розрахунком часу виконання, не все так просто ніж здавалося. Тому проект зайняв близько 2 тижнів.
Оскільки гра вже була розроблена раніше, я не створював прототип для перевірки механік і одразу почав шукати готові ассети. Я знайшов відмінні та практично аутентичні Greeble для технологічного каналу Зірки Смерті на одному з сайтів для 3D друку.
Ці Greebles були у форматі STL. Як відомо, цей формат має деякі проблеми з точністю сітки, що може призводити до геометричних помилок у моделі. І ця проблема виникла у мене.
Оскільки проблеми з сіткою мали потенційно вплинути на розгортання моделі для подальшого текстурування, було вирішено виправити ці проблеми. Також мені дуже не хотілося використовувати інші моделі, оскільки ці Greebles виглядали надзвичайно аутентично та, що ще важливіше, були повністю безкоштовними. Добре що я вже мав спеціальні аддони для Blender, які допомагали швидко вирішувати проблеми з топологією. Якщо вам цікаво, ці аддони були Hard Ops, Machin3Tools і Meshmachine.
Я давно хотів спробувати програму RizomUV Virtual Spaces для розгортання моделей, і нарешті настав час для цього. Практично 80% швів було створено автоматично, що суттєво скоротило час, і результат розгортання моделей мене дуже вразив. Тепер я обов’язково додам цю програму до свого пайплайну.
Гра була від третьої особи, тому було вирішено тримати texel density приблизно на рівні 5,12 px/cm. при розширенні текстури 2K. Оскільки у мене було одинадцять панелей для полегшення управління текстурами, я використовував UDIM з розмірами 4×4.
Для створення текстур було використано програму Adobe Substance 3D Painter, яка на сьогоднішній день є стандартом для професійних та інді-проектів. Я використовував смарт-матеріали, і цей вибір був зумовлений моїм бажанням ефективно та швидко виконати роботу. Базовим шаром був метал, покритий фарбою. Додатково, я додав ефекти пошкодження фарби та нашарування бруду. Щоб додати реалізму, було використано Emissive матеріал для імітації вікон.
Для свого основного проекту я створив простий Blueprint, заснований на інстансах, щоб здійснювати рандомізацію та швидке розташування об’єктів на рівні.
www.youtube.com/watch?v=HZHL46aSSpE
У цьому проекті я також використовував цей інструмент для створення великих панелей на рівні, і завдяки його функціоналу я зміг згенерувати вісім різних варіацій. Для полегшення управління об’єктами я конвертував Blueprint в статичний меш, ця функція доступна у вкладці «Actor».
Маючи готові панелі, я приступив до створення технологічного каналу. Цей канал повинен був бути модульним, щоб я міг генерувати його довжину відповідно до потреб. В фільмі непередбачено точних вимірів ширини каналу, і я не зміг знайти точні дані в Інтернеті. Тому для визначення ширини я вирішив виміряти ширину за допомогою моделі
Я не бажав, щоб технологічний канал Зірки Смерті мав очевидну візуальну однотипність, тому я реалізував простий процес рандомізації. Він полягав у випадковому виборі однієї з восьми панелей для кожної з трьох сторін каналу. Оскільки кожна панель мала квадратну форму, а pivot point знаходився в центрі моделі, я вирішив розширити різноманітність, обертаючи модель навколо її власної осі кожні 90 градусів. Це надало мені ще по три варіації для кожної панелі.
Якщо ваша гра подібна до простого раннера і не включає різких поворотів, оптимальним рішенням може бути не переміщати головного персонажа в світі, а замість цього переміщувати світ відносно персонажа та видаляти об’єкти, які виходять за межі зони видимості. Це саме той підхід, який я використовував у цій грі. Для реалізації цього підходу я розділив гру на компоненти. Наприклад, спавнер, створював технологічний канал і приєднував кожен модуль каналу один до одного, створюючи свого роду ланцюг.
Це було зроблено з метою уникнення проблем з синхронізацією руху кожного модуля окремо та оптимізації роботи коду. Доцільніше було переміщувати один модуль, який тягнув інші, ніж переміщувати всі одночасно. Коли головний модуль виходить із зони видимості, він видаляється, і наступний модуль стає новим головним, одночасно з цим створюється новий модуль та прикріплюється в кінці послідовності.
Важливо відзначити, що для здійснення переміщень обов’язково потрібно використовувати Get World Delta Seconds, оскільки без цього переміщення може залежати від частоти оновлення кадрів гри і можуть бути або надто швидкими, або надто повільними.
В грі також зустрічаються перешкоди, відомі як ’турболазерні пушки’, які автоматично націлюються на гравця. Якщо гравець опиняється в їх зоні впливу, ці пушки починають відстрілювати по два постріли кожні 1,2 секунди.
Положення турболазерних пушок, так само як і панелей, генерується випадковим чином при створенні та вибирається на основі одного із трьох можливих положень. Потім ці пушки приєднуються до модулю технологічного каналу.
Сам лазер працює майже так само, як і функція переміщення, за винятком того, що при створенні лазера він автоматично націлюється на
Для створення візуальних ефектів я використовував EmberGen та Niagara.
EmberGen — інструмент від JangaFX, призначений для симуляції вогню та диму, який дозволяє створити реалістичні ефекти для ігор та відеороликів. Для гри я створив невеличку симуляцію вибуху саме в цій програмі.
www.youtube.com/watch?v=mqHoQLylZ6s
У UE5.3 була додана експериментальна підтримка VDB, що означає, що тепер не потрібно запікати симуляцію у фліпбук, а можна використовувати її безпосередньо у рушії. Мені вдалося імпортувати та запустити симуляцію, і вона виглядала вражаюче. На жаль, проблеми виникли під час упаковки проекту, в момент запуску анімації гра закривалася з помилкою. Сподіваюсь, що в майбутніх версіях рушія компанія Epic Games оптимізує та доведе підтримку до рівня готового для продакшену, оскільки у неї є великий потенціал.
Унаслідок того, що VDB, на жаль, не працювали, мені довелося відступитися від цього підходу та перейти до більш традиційного методу. На щастя, створення фліпбуку в EmberGen виявилося досить простою задачею.
У фліпбука є невеликі проблеми. Перш за все, це 2D зображення, яке не має об’єму. Крім того, чим ближче ви знаходитесь до нього, тим більше розширення потрібно для одного кадру. Якщо з першим якось можна вирішити проблему то з останнім все трішки складніше.
Проблему об’єму мені вдалося вирішити, накладаючи фліпбуки один на одного з невеликим відступом між ними. Я також додав «Dither Fade та Depth Fade» щоб уникнути різкого переходу між шарами.
Щодо проблеми розширення одного кадру, я вирішив її просто ігнорувати та імпортував фліпбук у розширенні 16K. Можливо, було б краще розділити анімацію на частини і послідовно запускати їх у Niagara, але я вирішив обрати найпростіший шлях, оскільки не хотів витрачати багато часу на це.
www.youtube.com/watch?v=FIQBLkcfWko
Коли я розробляв цю гру вперше, ще у далекому 2018 році, я зв’язувався з Disney, і на той момент вони казали, що ви можете створювати гру, якщо це не комерційний фан-проект. Проте зараз все змінилося, і я б не рекомендував вам розробляти гру в всесвіті Зоряних Війн, оскільки вони забороняють такий тип контенту.
Працюючи над цим проектом, я все ж вирішив, що поки не буду переносити свій основний проект на нову версію рушія. Причина полягає в тому, що під час роботи виникали неприємні помилки, які ставали перешкодою у роботі. Наприклад, в редакторі матеріалів без видимої причини під час перетягування ліній зв’язків функцій зліва направо рушій просто вимикався з помилкою. Проте, коли це робиться зправа наліво, все працює належним чином. Тому, поки що я буду чекати на версію UE5.4
Кінцевий результат моєї роботи ви можете подивитися на відео або спробувати самому за посиланням: STAR WARS: The Death Star Assault
www.youtube.com/watch?v=cjNwNNaqLcY
Величезне спасибі за вашу увагу до моєї короткої статті про ремейк моєї гри на Unreal Engine 5. Ваша підтримка та час, який ви відвели для читання, надзвичайно важливі для мене. Якщо вам цікаво над чим я зараз працюю, підписуйтесь в X (Twitter) та Instagram
Дякую вам ще раз і сподіваюся, що ви будете слідкувати за подальшими новинами!
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів