Коротко: Ми будуємо систему води для Unreal Engine з двома обіцянками: вода, що виглядає правильно, бо світло, колір і піна обчислюються фізично, а не підстроюються вручну під сцену, і вода, що поводиться правильно: киньте будь-який меш на поверхню, і він плаває, кренить чи тоне коректно, без жодного налаштування. Вона в активній розробці. Цей пост пояснює, що вона охоплює, як ми тримаємо себе у вузді референсними фотографіями, чому плавучість, та трудна частина, яку всі пропускають, і де вона стає поряд із рештою набору інструментів.
Планка, яку треба взяти. Зауважте, що робить це реальним: піна, народжена з хвиль, що розбиваються, серпанок, що поїдає скелі, статистика баранців по всьому зибу: нічого не розставлено вручну, усе фізика. Ось планка, що ми поставили.
Навіщо ще одна система води?
Більшість ігрової води виглядає чудово рівно в одній умові освітлення, тій, що на скріншоті в магазині. Зсуньте сонце, перемкніться на похмуро, опустіть камеру наполовину під лінію води, і вона розвалюється.
Є другий, тихий провал, що важить не менше: майже кожна система води ставиться до плавучих об'єктів як до запізнілої думки. Ви отримуєте шаблон човна, сторінку інструкцій із такелажу понтонів і негласне припущення, що ніхто ніколи не кине випадковий ящик у море. Гравці кидають ящики в море постійно.
Ми хотіли двох речей, що зараз не співіснують в одному пакеті: вигляд кінематографічної якості, що переживає будь-яке освітлення, і фізичну поведінку, що не потребує жодного налаштування. Жодного з них не досягти, підкручуючи параметри, доки скріншот не стане гарним, бо скріншот це один кадр під одним сонцем, і щойно щось змінюється, вода, підстроєна під смак, показує свої шви. Тож фундамент проєкту — не список фіч. Це приймальний тест, з яким людина не може сперечатися: фотографія.
Оцінюється за фото, а не за смаком
Розробку гейтять референсні фотографії з фіксованими контрактами камери та освітлення, фізичні одиниці світла, зафіксований тонемапер і перцептивна метрика різниці, що вирішує «пройшло/не пройшло», а не настрій арт-директора того дня.
Дві референсні фотографії канонічні, і їх обрали як протилежності:
- Прозоре озеро, камера в лінії води. Наполовину повітря, наполовину вода, хвиляста межа без смуги артефактів; зеленувата прибережна вода, чий колір поглиблюється з відстанню; каустики на камінні, що збігаються з поверхнею над ними; затоплені колоди, що коректно заломлюються на межі. Ця перевіряє заломлення, перетин лінії води й підводне поглинання кольору. Усе разом.
- Штормовий берег під повною хмарністю. Ні сонця, ні блискучої смуги, море має читатися через м'яке відбиття неба, знебарвлену сіро-зелень, статистику баранців і серпанок над скелями. Буй гойдається на зибу з правдоподібним періодом і нахилом; поведінка, частина приймання, а не лише нерухомий кадр.
Похмура референсна фотографія навмисне одна з двох. Освітлена сонцем вода лестить кожному рендереру на Землі, спекулярний блиск ховає безліч гріхів. Заберіть сонце, і вода мусить нести кадр самою шорсткістю відбить, кольором і рухом. Це чесний тест, і саме його більшість систем тихо уникають. Океан, що добрий лише на сонці, не виходить.
Бік камери специфіковано так само суворо, як і бік води, бо фото-порівняння чесне лише тоді, коли камера не може шахраювати. Це означає справжні фізичні інтенсивності світла (полуденне сонце близько 100 000 люкс, а не довільний повзунок яскравості), фіксовану експозицію та фіксовану конфігурацію тонемапінгу й bloom для кожної референсної фотографії. Змініть тонемапер, і будь-яку воду можна підігнати під будь-яке фото. Саме тому тонемапер прибивають першим.
Drop-a-Mesh: плавати без домашки
Перетягніть будь-який меш на водойму Numivo, і він одразу поводиться коректно, система автоматично будує фіз-проксі, рахує витіснений об'єм за кадр із реальної висоти хвилі та виводить «плаває-чи-тоне» з реальної щільності.
Під водою — це місце, а не пост-процес. Колір поглинається з глибиною, світло фільтрується вниз стовпами, а межа над головою має перетинатися чисто: озерна референсна фотографія існує, щоб тримати всі три чесними разом.
Колода плаває й перекочується на довгий бік. Ящик погойдується. Кам'яна статуя тоне. Жодного такелажу, жодного розставляння понтонів, жодних скриптів. Під капотом:
- форма колізії автоматично вокселізується, асинхронно та кешується по асету, тож стається лише раз, щоб виміряти реальний об'єм об'єкта;
- плавучість рахується фізично щокадру з витісненого об'єму проти щільності води, і прісна й солона вода реально різняться (солона щільніша, тож той самий ящик сидить у морі вище, ніж в озері);
- «плаває-чи-тоне» йде зі щільності, маса поділена на об'єм проксі, немає галочки «чи має це плавати?» за замовчуванням, бо за замовчуванням це й є фізика;
- стійкість виникає з того, як розподілений об'єм проксі: ящики з важким верхом перекидаються, корпуси з баластом у кілі самі випрямляються, дошка лежить плазом;
- плавучі об'єкти зчіплюються назад із поверхнею, брижі, кільватер, кільце піни на лінії води та ефекти сплеску при ударі.
На акторі є маленька панель для override'ів, змусити плавати, змусити тонути, повзунок демпфування, перемикачі кільватера й сплеску, але override масштабує фізику, а не замінює її. Змусьте валун плавати, і він усе одно погойдується з правильним періодом і лишає правильний кільватер; він просто поводиться, ніби легший. Ця відмінність важлива: примусові результати, що ігнорують солвер, виглядають як пропи, приклеєні до площини, і гравці помічають це миттєво.
Мета дизайну прямолінійна, і це демо, яке ми хочемо вміти показувати наживо: хтось перетягує двадцять випадкових пропів у море, і все просто поводиться, не відкривши перед тим жодного вікна налаштувань. Якщо цьому демо потрібен туторіал, фіча провалилася.
Що вона охоплює
Прибережна вода, відкритий океан, під водою та печерні водойми — усі першого класу, хвилі на основі спектрів із роздільними зибом і перехресною хвилею, піна від реально розбитих хвиль, каустики, що живлять підводні стовпи світла, і стійкість під кінематографічними ефектами.
Деталі, що важать, якщо вам важлива вода:
- Хвилі йдуть з океанографічних спектрів (тих самих статистичних моделей, що описують реальні моря), із напрямним розсіянням і незалежно керованим зибом. Стан моря стає погодним рішенням, «наростаючий шторм, довгий зиб із заходу», замість тридцяти незв'язаних повзунків, які ви штовхаєте, доки не стане штормово.
- Піна — не намальована маска. Вона народжується там, де хвилі реально розбиваються, старіє з часом і тягне смуги під вітром. Намальована піна, найчастіша ознака фальшивої води, бо не рухається з фізикою, яку має зображати.
- Під водою — реальне місце. Коректне поглинання кольору за глибиною (червоний іде першим, тоді зелений, лишаючи глибокий синій, знайомий усім з відео занурень), стовпи світла, виведені з того самого каустичного поля, що освітлює дно, і перетин на лінії води без класичної жорсткої смуги артефакту.
- Печерні водойми отримують власну обробку, стояча чи ледь рухома вода, збурення від крапель, відбиття в напівтемряві, бо спокійна внутрішня водойма оголює інші провали, ніж відкритий океан.
- Синематики, критерії приймання, а не запізніла думка. Поверхня має лишатися стійкою під глибиною різкості, motion blur і зерном плівки, жодних спекулярних fireflies, що з'являються лише із зерном, жодного мерехтіння, що повільна камера перетворює на стробоскоп.
Чому плавучість, та частина, що всі пропускають
Вигляд можна підробити хорошим шейдером, а поведінку — ні; переконливе «плаває-й-тоне» потребує оцінки об'єму в реальному часі та стійкого солвера, що по-справжньому важко, тож більшість систем видають префаб човна й зупиняються.
Незручна інженерна правда в тому, що красивий шейдер води, розв'язана задача, а загальний солвер плавучості — ні. Підробити вигляд хвилі — задача текстури й нормалей; змусити довільний, ніколи не бачений раніше меш коректно сидіти в тій хвилі, задача фізики, що має працювати на частоті кадрів, переживати швидкі кроки часу й не вибухати, коли камінь із тисячі трикутників зустрічає штормовий зиб. Цей розрив, причина, чому «вода» в більшості рушіїв означає «гарну площину, з якою не можна взаємодіяти», і чому інтерактивна частина, коли вона є, — зроблений вручну човен.
Закрити цей розрив, зробити поведінку такою ж автоматичною, як вигляд — це причина, чому проєкт існує, і причина, чому йому потрібна дисципліна референсних фото плюс справжній солвер, а не вихідні за шейдером.
Коли ви зможете цим користуватися?
Вона в розробці як розширення Unreal Engine, зі ступеневим викотом, кінематичне превʼю плавання приходить до повного фіз-солвера, щоб сцени можна було населяти рано. Ми не оголошуємо дату; референсні зображення вирішують, коли готово.
Ступеневість навмисна. Кінематичне превʼю (об'єкти йдуть за поверхнею хвилі без повної симуляції сил) приходить першим, щоб художники могли кидати меші й населяти море, поки важкий солвер ще гартується. Ви відчуваєте результат задовго до фіналізації фізики. Повний солвер, авто-проксі та повна панель ідуть далі. Прогрес і віхи з'являються на публічній дорожній карті, а не в сюрпризі дня запуску.
Набір інструментів, поряд із яким вона вийде, скатер, mesh blending, гріди, вимірювання — безкоштовний для проби сьогодні. Якщо хочете, щоб вас сповістили в мить появи публічного білда води, Discord, на який є посилання із сайту, місце, де це оголосять першим, і де порівняння «пройшло/не пройшло» референсних зображень публікуватимуть у міру появи.
Міні-FAQ
Чи потребуватиме вона інших інструментів Numivo? Ні — це розширення тієї самої родини, спроєктоване стояти самостійно. Воно, втім, поділяє той самий принцип: результати запікаються в нативні дані рушія скрізь, де фізично можливо, тож вам належить те, що ви створюєте.
Які версії рушія? Актуальні релізи Unreal Engine 5. Деталі ляжуть на дорожню карту в міру наближення розширення до публічного білда, а не будуть обіцяні зараз і переглянуті пізніше.
Чим це відрізняється від вбудованої води рушія? Вбудовані системи води сильні виглядом і слабкі загальною інтерактивністю, плавучість зазвичай окремий, вручну налаштований компонент. Уся суть тут у тому, що вигляд і поведінка йдуть з однієї фізично обґрунтованої системи, а гейт референсного фото тримає вигляд чесним крізь освітлення.
Навіщо оголошувати до релізу? Бо метод референсної фотографії сам по собі й є суттю. Ми радше покажемо планку публічно й будемо вимірювані за нею, ніж розкриємо готову річ, яку ніхто не зміг би дослідити. Цей пост і є та планка, письмово, спитайте з нас за нею.