Проблеми симуляції рідини та чому це дорого?

Завдання зробити 10 секунд симуляції рідини високої деталізації для крупного плану в 60 кадрів в секунду.

Витративши приблизно добу на експерименти і порівняння MantaFlow з Flip Fluis, я вибрав останнє, тк MantaFlow веде себе дуже непередбачувано, залежно від дозволу.

Прикинув, що вода досягне поверхні басейну за 50 кадрів + потрібно 10 секунд самої анімації в 60fps, виходить симуляція 650 кадрів з роздільною здатністю 150 мільйонів вокселів. Така симуляція на Ryzen 3700x зайняла 5 діб.

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

Переналаштував сцену з Cycles у Octane Render, проблема збереглася, тому вирішив повернутися до Cycles.

Blender взагалі відмінно перетравлює велику кількість полігонів, проблема саме з геометрією FlipFluids. Розробники аддону у себе на гітхабі визнають проблему і пишуть, що вона на стороні блендера тк він погано дружить з HighPoly геометрією зробленою на пітоні або щось на зразок того.

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

Потім на американському форумі я знайшов рішення, де було сказано, що в геометрії перед експортом потрібно просто поміняти місцями модифікатори і поставити модифікатор Smooth вниз, після чого FlipFluids геометрія швидко експортувалася в Alembic. Це спрацювало. Я експортував геометрію в Alembic, сховав з рендера та в'юпорта оригінальну геометрію FlipFluids, але залишив бульбашки та піну та імпортував геометрію Alembic.

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

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

У місці зіткнення струменя з поверхнею води рідина виглядає темною. Зовсім не «блакитна лагуна». Проблема в обмеження технології PathTracing. У цьому місці відбувається величезна кількість відбитків і заломлень від поверхні води та бульбашок, а рендер рахує максимум 12 перевідбиття, а далі малює чорноту. Можна, звичайно, поставити не 12, а 128, 1024 тощо, але тоді і результат рендеру ми чекатимемо місяці. Тому додав бірюзового самосвічення до бульбашок і в 10 менше від такого ж самосвічення самій воді. Косяк пішов, час рендеру не змінився. Рендер з початку. Заодно вирішив починати не з 50 кадру, а зі 100, де на поверхні води вже видно коливання. Також додав яскравість джерелам світла і трохи туману воді.

Через деякий час тестів, я помітив, що у Blender 3.5, сцена поводиться набагато стабільніше, ніж у версії 3.6, вирішив продовжити роботу в ній. Матеріали з картою Mix довелося переналаштувати, тому що у версії 3,6 вона працює інакше, і доведеться перерендерити перші кадри, тепер деякі матеріали виглядають трохи по-іншому.

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

Відкрив для себе програму Batch Render Creator, завдяки їй кількість вильотів під час рендеру скоротилася ще більше.

Самосвічення в цьому ракурсі, біля темної щілини, звідки витікає вода, виглядає не дуже. На жаль, у блендері немає карти Distance, яка є в 3ds Max і Corona, тому доведеться ще раз відрендерити варіант без самосвічення та заміксувати їх в AfterEffecs, щоб у районі щілини самосвічення не було, а в інших місцях було.

Були ще й інші проблеми, наприклад зі становищем камери, тому я змістив початок анімації з 50 на 100 кадр, теж довелося перерендерити частину. І з Geometry Nodes довелося повозитися, щоб обрізати дно біля води, тому симуляцію я робив не на всю глибину басейну.

У відповідь потенційним критикам, які ніколи нічого подібного не робили, але вважають, що в гудіні або PhoenixFD проблем менше і можна все зробити швидше, пропоную вам спочатку зробити симуляцію 150 млн вокселів і відрендерити її на GPU разом з анімованою рослинністю і дисплейсментом, а потім написати, скільки часу у вас це зайняло і з якими нюансами та несумісностями зіткнулися.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *