6 прикладів використання Houdini для Unreal Engine
Вітаю! Мене звати В’ячеслав Тітенко, я лід відділу TechArt і VFX у геймдев-компанії Kevuru Games. Ми у команді часто використовуємо засоби, які допомагають нам реалізовувати проєкти максимальної складності. Наприклад, поєднання UE (Unreal Engine) з програмним пакетом для роботи з тривимірною графікою Houdini дозволяє суттєво спростити розробку ігор.
У цій статті разом з Houdini Artist Павлом Філевським ми проаналізуємо декілька практичних кейсів застосування UE з Houdini. Приклади, які ми наведемо, доречні і в Unity, а також у поєднанні з іншими процедурними застосунками на кшталт Blender.
Матеріал буде корисним Tech- і VFX-спеціалістам, левел-артистам та дизайнерам, розробникам у геймдеві. Наші кейси допоможуть краще зрозуміти техніки, які використовуються в сучасних іграх, поліпшити пайплайн для вирішення складних завдань та вибрати шлях подальшого розвитку.
Ретопологія — створення спрощеної моделі об’єкта
Одне з найпростіших застосувань UE та Houdini — це ретопологія, тобто перетворення 3D-моделей з великою кількістю полігонів на те, що можна використовувати в анімації. За необхідністю можна також робити LOD (Levels Of Detail) — кілька варіантів одного об’єкта з різними ступенями деталізації, що перемикаються залежно від відстані об’єкта до віртуальної камери.
Розглянемо приклад. Для одного з проєктів наші спеціалісти зробили кастомні інструменти для плюща та інших рослинних насаджень. Якщо брати кожен елемент плюща окремо, то він має розумну кількість полігонів. Проте загалом їх виходить занадто багато — для відділу моделлерів завдання буде необґрунтовано великим. У таких випадках ми завжди намагаємося спростити роботу для наших колег й оптимізувати 3D-модель.
Сам UE робить ретопологію не так, як би хотілося. Тому нам потрібно було зібрати інструменти, які б швидко і з мінімальними маніпуляціями зменшували кількість полігонів — причому, тільки тих об’єктів, які будуть чітко обумовлені з боку візуалу і полігонажу.
Топологiя до спрощення
Почнемо з аналізу площ кожного окремого об’єкту — фіксуємо мінімум і максимум. Потім перераховуємо різницю в діапазоні від 0 до 1 та видаляємо найменші об’єкти.
Аналiз топологiї
Наступний крок — зменшити кількість полігонів на стеблах, які мають однакові імена та матеріал. Зазвичай, коли матеріали різні, вони легко розділяються за атрибутом полігонів, але в нашому випадку це не працює. Втім, ми маємо різницю в розташуванні вертексів на UV розгортці. І цього достатньо, щоб розрахувати їх координати та відокремити за U позицією.
Роздiлення топологiї за UV атрибутами
Маленькі стебла можна виокремити окремо — за параметром масштабу.
Роздiлення топологiї за масштабом
Застосовуємо Polyreduce для кожної частини зі своїми налаштуваннями, збираємо все разом, вичищаємо зайві атрибути — завдання виконане. У такий спосіб полігонаж цього плюща зменшився з 560 тис. до 110 тис. полігонів.
Видалення полігонів
Результат ретопологiї
UE не зміг би зробити таку оптимізацію за допомогою внутрішнього інструменту, адже він би різав полігони рівномірно на листочках, а це було б неправильно. Проте для LOD його автоінструмент спрацював добре, і здалека кількість трикутників склала лише 14 тис. В іншому випадку LOD також можна робити в Houdini.
Руйнування складних об’єктів
Наступний кейс — модель з текстурами фортеці, з якою ми працювали під час розробки стратегічної гри. Нам необхідно було створити історичну подію руйнування споруди.
Для комплексних симуляцій руйнувань UE робить нововведення у фізиці, але все працює не так просто, як би хотілося. Водночас для реалістичної анімації можна використовувати в Houdini записану поведінку частин об’єкта, який руйнується. Цей інструмент часто буває нам у пригоді, коли потрібно змоделювати руйнування складних об’єктів.
Фортеця в проєктi
Сетап в Houdini доволі складний. Ми розберемо основні етапи, а детальніші приклади можна знайти в офіційних джерелах.
Спочатку потрібно визначити складові частини і задати їм правильний характер зламу. Наприклад, щоб дерево руйнувалося за структурою колоди, а кам’яні частини мали пряміші злами. Також слід враховувати, що на окремих частинах з’явилися бічні грані, яким потрібно зробити UV розгортку і призначити нові матеріали.
Сегментацiя фортецi
Потім задається фізика і логіка. Наступний крок — симуляція руйнування. У нашому прикладі спочатку руйнується верхня частина споруди. Причому сама верхівка спочатку падає цілою і тільки потім розлітається вщент. Після цього складається навпіл кам’яна частина, захоплюючи з собою дерев’яні боковини.
Перший етап руйнування
Другий етап руйнування
Останній крок — експортувати все в UE. Для цього треба записати інформацію анімації про кожний шматок (їх тут майже 3 тис.) в FBX-файл. Це виглядає подібно кістковій структурі, де кожен об’єкт — одна кістка. Для цього використовуємо спеціальну Labs ноду RBDtoFBX.
Експорт руйнування
Недолік експорту в цьому форматі — важка анімація. Адже якщо 3 тис. кісток помножити на 500 кадрів на всю анімацію, це займає великий обсяг пам’яті. Тому для експорту ми застосували інший спосіб — VAT (Vertex Animation Texture). Про нього і поговоримо у наступному кейсі.
Вертексна анімація за допомогою текстур
Наступний інструмент — VAT, який дозволяє записувати анімацію вертексів в текстури. Це порівняно новий метод, але наш досвід показує, що не варто боятися використовувати інноваційні технології, адже за ними майбутнє. Отже, за допомогою VAT передавати складні анімації можна не через запис інформації у файл, як це робить, наприклад, Alembic, а використовуючи растрові текстури, де RGB інформація заміщує XYZ координати. У такий спосіб нам вдається суттєво, а іноді кардинально, економити ресурси.
Подивимося, як це працює. У нашому кейсі ми мали завдання — імплементувати до проєкту анімовану медузу, яку купили зі стоків.
Проблема полягала в тому, що для плавних рухів великої кількості щупальців анімація була зроблена різними модифікаторами у таких застосунках, як-от 3D Max чи Maya. Тож зі стоку ми взяли важкий Alembic-файл.
Експорт анiмацiї медузи в VAT
За допомогою інструментів SideFX Labs для експорту анімації до VAT створюємо текстуру. На перший погляд, вона схожа на кашу з кольорових пікселів. Але в ній записана вся інформація, необхідна для анімації позицій точок і полігонів моделі. Так само там містяться дані для рушія, як-от UV координати чи кастомні атрибути, створені в Houdini.
VAT текстура
Для імпорту в UE5 також використовували набір інструментів від SideFX Labs. Його можна зручно додати до файлів проєкту прямо з тієї ноди, що відповідає за експорт текстур.
Налаштована медуза в UE-проєктi
В результаті ми отримуємо плавну, складну анімацію без використання кісток і з мінімальними витратами продуктивності.
Створення симуляцій візуальних ефектів
Наступне, про що варто згадати, — це створення різних симуляцій для VFX, як-от вогонь, вибухи, дим тощо, а також їхній рендер та збирання у Flipbook-текстури. За допомогою Houdini ми в команді робимо це максимально швидко, не поступаючись якістю візуальних ефектів.
Розглянемо принцип створення вогню. Для цього можна зібрати свій сетап або ж використати готові пресети з вкладки PyroFX. Обираємо будь-який об’єкт, наприклад, раніше створену сферу з шумом поверхні, і тиснемо на Bonfire. Далі адаптуємо нашу модель під необхідні параметри горіння.
Симуляцiя вогню в Houdini
Щоб зациклити початок горіння полум’я з кінцем, змістимо timeshift2 на 40 кадрів, а timeshift1 — на 40 + 64.
Створення циклу горiння
Потім виставляємо камеру і параметри рендера у квадрат на 64 кадри. Підлаштовуємо матеріал і рендеремо секвенцію.
Рендер вогню
Тепер залишилось зібрати всі рендери в Flipbook. Йдемо в контекст Composition, завантажуємо секвенцію і використовуємо ноду Mosaic з кількістю 64 кадри. Не забуваємо перемістити повзунок часу на один кадр.
Створення flipbook текстури горiння
Зміна заданих параметрів за допомогою Houdini Engine
Ще один корисний інструмент від розробників SideFX — плагін Houdini Engine. Він дозволяє отримати доступ до процедурного інструментарію Houdini всередині інших 3D-редакторів, а також ігрових рушіїв. Завдяки цьому наші художники значною мірою економлять час на роботу.
Принцип його роботи доволі простий. У Houdini за допомогою нодів створюється асет з будь-якими необхідними параметрами. Потім він імпортується в ігровий рушій за допомогою Houdini Engine. І безпосередньо в рушії можливо змінювати задані параметри.
На сайті розробника можно детально ознайомитися з цією технологією та подивитися приклади використання: www.sidefx.com/products/houdini-engine.
Робота з великими ландшафтами
Коли мова йде про різноманітні ландшафти, ми застосовуємо Terrain/Hieghfields інструментарій Houdini. Він надає всі переваги процедурного підходу для створення великих реалістичних просторів в 3D-пакеті.
Розробник може передати всю необхідну інформацію в ігровий рушій за допомогою карти висот і текстур з масками — для подальшого налаштування всередині рушія. Завдяки цьому ми в команді ефективно працюємо з ландшафтами великих відкритих світів.
Тут наведений приклад з детальним поясненням створення пустелi i як працює ця технологія: www.sidefx.com/...orials/procedural-desert
Підсумок
Технологія Houdini швидко розвивається, і прикладів роботи інструменту для поліпшення життя гейм-девелоперів стає дедалі більше. Тож я, як технічний артист, запрошую розробників ігор зануритися у світ процедурного підходу до моделювання, анімації, програмування — у такий спосіб ви можете працювати максимально продуктивно.
12 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів