Створення UMS для цифрового міста: як я розробив універсальний та гнучкий майстер-матеріал для проєкту Veil City
Привіт! Мене звати Віталій Пономаренко, я 3D-художник. В цьому блозі хочу розповісти про створення смарт-матеріалу для проєкту Veil City. Це величезне цифрове місто, що поділено на декілька районів і в якому один з районів буде точною копією Києва.
Про шлях в геймдеві та ідеальний момент для власного проєкту
Та спочатку трошки про себе. Мені завжди хотілось створити щось сильне та унікальне. Щоб те, що я створю вплинуло на людей, щоб їх надихала моя творчість і вони мали мотивацію зростати над собою. Свого часу мене так само надихали різні люди, і я вирішив — якщо вони змогли, то і в мене вийде. Думаю, що саме завдяки творчості ми не опускаємо руки в найскладніші моменти.
Коли я починав займатись 3D у мене були дуже великі амбіції, але зовсім не було досвіду і було не зрозуміло, як чогось взагалі досягти. Як мінімум, знайти роботу. Я намагався покращувати кожну свою роботу, робив гарні рендери, пробував робити невеликі анімації, які монтував в невеличкі «сінематики». Було складно, в ті часи Unreal Engine не був ще у відкритому доступі й уроки на ютубі можна було перерахувати по пальцях.
Згодом я знайшов першу роботу моушн-дизайнера і всмоктував, як губка всю інформацію. Через кілька років, коли я вже трохи зрозумів пайплайн створення ігор, вийшов Unreal Engine 4. Тобто, перші його версії. Тоді я і зрозумів, що можна створювати ігри, хоча це цілий світ нових знань.
Один з моїх улюблених художників — Юрій Шведов. Його стиль і поєднання сюжетів картин в один всесвіт викликали в мене сироти на шкірі. Я хотів так само поєднувати роботи в один стиль, але моя творчість набирала оберти дуже повільно. Я розумів, що мені потрібно щось більше, ніж новий на той час жанр «Everyday 3D Art».
Я почав робити відеоуроки по 3D на ютубі, ділився своїм досвідом і знаннями, щоб набрати аудиторію і звернути її увагу на мою творчість. Ютуб почав зростати і я успішно набирав по 10 тисяч переглядів на кожному відео. Але внаслідок деяких факторів я вирішив повністю піти у комерцію в геймдев і заробити цим на життя, на необхідну техніку і розвиток.
Коли я серйозно зайнявся карʼєрою в геймдеві у мене була слабка англійська, я не ризикував виходити на західний ринок, хоча й добився певних висот на нашому ринку. Тоді я придбав все потрібне обладнання, щоб знову прийти на ютуб і добре стати на ноги. Плоди тяжкої трирічної роботи з’явилися якраз на початку повномасштабної війни. Через рік після її початку наш ринок повністю змінив свій напрямок і знайти роботу з великим досвідом стало просто неможливо. На західному ринку треба було все починати спочатку.
На деякий час мене це вибило. Та оговтавшись я сів шукати вихід і зрозумів, що настав ідеальний момент для власного проєкту. Я вирішив, що маю піти водночас на зустріч одразу двох моїх страхів — випробувати себе на західному ринку і створити свій віртуальний світ, який буде відкликатись у серцях десятків тисяч людей.
Про Veil City — всесвіт, що можна адаптувати для власних інтерпретацій
Проєкт Veil City буде з відкритим вихідним кодом. Це означає, що коли ми представимо його, будь-хто зможе проявити свою творчість і використовувати це в портфоліо або, як візуальний та технічний базис для своїх проєктів. Щось на кшталт всесвіту SCP, тільки набагато більш гнучкий і адаптований для створення власних інтерпретацій.
SCP це всесвіт без авторських прав. Його створили і поширюють люди з інтернета. Ми хочемо також створити всесвіт, щоб будь-які творчі люди могли до нього приєднатися і використовували наші рішення як технічні, так і візуальні. Це наша глобальна місія — дати не рибку аудиторії, а вудочку.




Якщо говорити безпосередньо про сам матеріал, то ми створювали перші асети під UE і постало питання про майстер-матеріал для проєкту. Мені прийшла ідея зробити цей майстер-матеріал зрозумілим для людей і дати їм можливість використовувати щось конкретне з Veil City. Водночас це дозволило б заробити перші гроші для розвитку проєкту.
Майстер-матеріал це шаблон, на основі якого можна швидко робити багато різних простих або складних матеріалів. Він дозволяє легко і зручно змінювати деталі, зберігаючи єдиний стиль і логіку. Наприклад, наші алгоритми дозволяють з одного майстру зробити більше 1000 різних комбінацій, і ми ще довго будемо додавати функціонал і підтримувати цей продукт.
В процесі роботи над цим матеріалом я зрозумів, що у мене вистачає досвіду і креативу, щоб зробити не просто майстер-матеріал, а зробити його буквально універсальним. Тобто, адаптувати його під будь-яку задачу в будь-якому проєкті. Таким чином я витратив пів року, працюючи майже цілодобово, але випустив матеріал на майданчику Fab. Ви можете знайти його за цим посиланням. І дійсно, зараз, готуючи відеоуроки, у мене виходить створювати за









Створення майстер-матеріалу — одного з головних викликів проєкту
Universal Material System — це модульний і гнучкий майстер-матеріал, який пропонує кілька унікальних режимів для вирішення будь-яких задач текстурування та маппінгу. Система була спеціально розроблена для проекту Veil City, що забезпечує її ефективність у реальних сценаріях розробки. Простими словами, це алгоритм, який поєднує в собі декілька текстур і накладає їх на 3д модель. А наш матеріал має розширенні і ефективні рішення, щоб картинка була максимально якісна і при цьому оптимізована.
Якщо говорити безпосередньо про його створення, то загалом, як і у звичайному малюнку, все починається з блокінгу. Тож спочатку я написав базовий майстер-матеріал і паралельно обдумував в яких саме кейсах і як саме було б зручно ним користуватись. У мене вийшов величезний список функцій і технологічних прийомів, які я поділив на категорії та розділив на декілька режимів. В кожному режимі є власна ієрархія, але з єдиною модульною послідовністю і логікою, щоб це нагадувало конструктор.
Майстер-матеріал був одним з головних викликів. На його логіку я витратив декілька днів. Пишаюсь тим, що такого алгоритму більше ні в кого немає. Розкриваю проблематику і вирішення.
Оскільки головна ідея UMS це модульність і інтуїтивний інтерфейс, мені будо потрібно зробити зміну декількох майстер-матеріалів всередині одного головного. Проблема крилась в тому, що мені потрібно було використовувати ноду StaticSwitch — вона єдина, що може вивантажувати та завантажувати функціонал в інстанс. Static Switch Parameter по суті є булевою змінною. У неї є всього два стани: True i False. Відповідно, коли я вибирав, наприклад, Advanced Mode, то всі інші зникали з інтерфейсу. А якщо я обирав Simple Mode, то Advanced світився, оскільки в ієрархії він йде після Simple.
Я довго думав над цим і прийшов до системи, де до кожного режиму присвоюється індекс, і ноди StaticSwitch вже відповідають за зміну майстер-матеріалів зміною індекса. Це дозволило зробити так, щоб всі режими завжди були відображені в інстансі.
Але виникав конфлікт. Якщо включити один матеріал, не виключити його, але включити якийсь інший — всі функції перемішувались. Я це виправив додаванням пустого матеріалу по індексу 0. Відповідно це стало таким собі барʼєром між різними режимами.
На фото нижче — майстер-матеріал простого режиму. Він абсолютно базовий, але зручний і не має зайвого, що могло б нашкодити оптимізації.
Для порівняння наведу такий саме алгоритм, але для Advanced Mode. Зверху і знизу після розподілення однаковий функціонал, але зверху для UV, а знизу Triplanar/Planar накладення. Це один з трьох шарів. Вони також повністю ідентичні, окрім індексу для інстансу.
А ось так працює наш тріпланар. З правої сторони сам алгоритм накладення текстур, а зліва конвертація цих текстур в Parallax Occlusion Mapping Displacement.
До речі, паралакс це кейс яким я пишаюсь найбільше. Я працював над ним близько трьох тижнів. То ж наш кастомний паралакс:
- працює і з UV і з Triplanar/Planar;
- реагує на сонце в сцені та домальовує тінь між видавленням — тіньова сторона при цьому лишається без додаткової тіні, як і має бути за логікою;
- вимірює відстань до камери та зменшує кількість площин для оптимізації.
Щоб паралакс працював коректно з Triplanar i Planar проєкціями я дописав у стандартну функцію тріпланара розділення на вісі конкретно для WA-накладення. До цього була проблема, що паралакс видавлювався тільки по одній осі. Наприклад куб зверху видавлювався назовні, а знизу — всередину. Я не знайшов рішення цієї проблеми в мережі. Була тільки відповідь на Reddit комусь зі схожою проблемою, де просто логічно її розібрали, але вся логіка наша авторська.
Щоб це все працювало і система вижила — потрібен дізеринг. В UE є стандартна функція дізерингу на базі білого шуму, але я прописав дізеринг на базі синього. Таким чином я зменшив його видимість на рендері, коштом того, що він більш рандомізований, ніж білий, тобто візуально стає кратно менше тайлингу. Також він більш ефективний.
А нижче вже майстер Advanced-режиму. Тут змішуються три шари завдяки функції блендингу. Після цього йде посилання до процедурної генерації калюж і в Details Tab функцію. Далі в Effects Tab і на рендер.
Функція блендингу виглядає так. Паралельно відпрацьовує Vertex Blending і ID Map Blending. Користувач може вибрати яким чином змішувати три шари матеріалу — або малювати вертексами, або використати для цього ID текстуру з кольоровими масками. Також міксується Clear Coat Second Normal для виводу в субстрат майстер-матеріал. UMS підтримує і звичайний пайплайн, і новий експериментальний Substrate. Я зробив окремий майстер з відповідними правками.
Далі йде Procedural Details Tab функція. Тут прописано декілька алгоритмів і згодом їх буде ставати більше. У нас є роудмап зі списком майбутніх оновлень. Також там можна зробити запит на додавання якогось функціоналу в матеріал.
Така сама логіка в Procedural Effects Tab, але там набагато більше всього. Тому ця функція збирає кожен окремий ефект до купи та видає в майстер всю групу.
Для наочності покажу окремо DissolveFX. Один і той самий ефект має декілька своїх режимів і свій функціонал.
Про взаємодію з майданчиком Fab та швидкість техпідтримки
Під кінець моєї роботи над нодами почали зʼявлятися перші новини, що Unreal Marketplace, Artstation Marketplace, Sketchfab і Quixel зливаються в одну екосистему. Я був нескінченно радий цьому, бо одразу зрозумів скільки відкривається можливостей. Після доведення алгоритму до чітко працюючого стану я зайнявся картою Overview для презентації матеріалу і для ігрового білда, щоб до покупки людина могла подивитись всі функції матеріалу. Коли у мене було все готово до випуску, я почав гуглити, як створити лістінг продукту на Fab, а там... пусто.
Тож я вже на Fab знайшов кнопку стати паблішером і пройшов по інструкції. Буквально за
В оформлені сторінки магазину немає взагалі нічого складного. Як заповнити профіль в соціальній мережі, тільки про матеріал. Хіба що, треба чітко розписати всі характеристики, щоб всі дані чітко збігалися з проєктом, який відправляєш в Epic. Наприкінці потрібно заповнити квіз:
- як випустити матеріал — як проєкт чи як асет для імпорту?
- коли випускати матеріал — одразу після апрува чи по натисканню кнопки?
Також нічого складного, але саме через цей квіз у мене почались проблеми — я вказав автовихід матеріалу. На другий день мені надіслали правки. Треба було почистити проєкт від зайвих асетів, відключити плагіни та очистити редиректори. Насправді правки були мінімальними, а про очищення редиректорів я навіть не чув. Тому був вдячний підтримці за нові знання.
Був кумедний момент. Я використовував навчальний асет Epic Games під час генерації кімнат для карти Overview. Ревью-агент не впізнав свій власний блюпринт і сказав почистити блюпринт самих Епіків.
Я все зробив за пару годин і пішов по посиланню. У листі на електронній пошті, агент сказав надіслати виправлений проєкт в техпідтримку. Я так і зробив, чекав десь дванадцять годин, а техпідтримка написала, що це інший департамент і вони не можуть мені допомогти. Вони порадили написати в коментар заявки на розгляд, що я залив новий архів і знову відправити заявку. Це трохи збентежило, але буквально через 4 години після оновлення заявки мені прийшов ще один лист, що матеріал вже схвалений і випущений. Епіки подякували за використання їх майданчика.
Якщо порівнювати з Steam або AppStore, то вихід проєкту на Fab це справа
У себе в бібліотеці я також не бачив матеріал, але в пошуку я його міг знайти і відображалось, що він доданий в мою бібліотеку. На наступний день, коли я почав робити перший відеоурок по матеріалу, то захотів додати в чистий проєкт UMS через Fab. І не зміг. Fab направляв мене в лаунчер EGS, але там матеріалу не було. Я написав в техпідтримку про обидві проблеми і вони вирішили все за 40 хвилин. Таким вийшов досвід комунікації з платформою. Однак якщо не враховувати ось цей баг і скинути його на те, що Fab тільки зʼявився, то я неймовірно задоволений тим, як все працює.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів