CADAVER's solve


Гео и язык канала: не указан, не указан
Категория: не указана



Гео и язык канала
не указан, не указан
Категория
не указана
Статистика
Фильтр публикаций


Сап⭕️

В прошлом посте я говорил про симуляцию пены, и множество подходов и решений, над которыми я работал. Мне наконец есть что сказать, и это будет "первый пункт" в большом цитпосте про воду

У WetaFX есть вайтпейпер, обозревающий тему симуляции пены (как поверхностной, так и подводной), и я решил реализовать их исследование в Houdini

Последние пару месяцев я работал над солвером подводных пузырей с two-way взаимодействием пузырей и окружающей воды. Проблема стандартного Whitewater (далее WW) солвера в Houdini в том, что подход к симуляции пены в нем базируется на работе 2012 года. Данный способ подразумевает под собой one-way взаимодействие пузырьков с водой: поле vel из флип симуляции толкает пузырьки, а подъемная сила реализована через константный вектор. Он дает неплохой внешний вид симуляции, который в принципе хорошо работает для крупномасштабных и среднемасштабных шотов, где все равно ничего не разберешь, но для hero симуляции подводных пузырей он зачастую не подходит, и обычно для подобного рода симуляций используется связка Pyro SIM + Particle SIM + POP Advect By Volumes (ну или различные вариации этого метода)

Метод two-way взаимодействия заключается в том, что как поле vel от воды влияет на пузырьки, так и пузырьки влияют обратно на поле vel воды. Получается своеобразный цикл взаимодействий, похожий на то, что делает Gas Feedback, связывая RBD с Flip. Каждый пузырек в симуляции воспринимается как идеальная сфера, радиус которой = f@pscale. Из этих данных вычисляется объем сферы, растеризуется на воксельную сетку, и используется как основной множитель всех операций и сил. Также, с учетом знания объема пузырей, является возможным найти и объем вытесненной ими воды. В итоге по этим данным корректируются density и vel в симуляции. В качестве солвера давления выступает Gas Project Non Divergent Variational. У него есть несколько ограничений в сравнении с солвером от Weta, так как авторы статьи пишут солвер с нуля; но в принципе, путем небольших упрощений я смог добиться идентичной логики солвера. Помимо прочего, в данном солвере нет такого понятия, как вектор подъемной силы, так как эта сила реализуется путем вычисления градиента давления жидкости. В реальном мире все работает примерно так же - пузырь воздуха с маленьким давлением выталкивается градиентом давления из области высокого давления воды в область низкого. За счет всех упомянутых и неупомянутых вычислений, скопления пузырей ведут себя органично: большие пузырьки сильнее влияют на симуляцию, чем мелкие; в симуляции есть много деталей и корректных движений; а также, что самое важное - симуляция пузырьков не ощущается "прибитой" к vel полю воды. Также солвер очень интуитивен: все физические параметры достаточно простые, и для большинства сценариев остаются на дефолтных значениях. Можно сказать, что солвер делает красиво из коробки

Масштаб пузырей задается при помощи уже упомянутого в этом тгк Inverse-Cubic Random

Солвер работает на удивление быстро. Могу предположить, что на связку Pyro + POP уходило бы столько же времени просчета. Также, ввиду сложности сетапа, я отказался от идеи использования какого-то дефолтного солвера и надстраивания над ним своего алгоритма (как было на R&D с адгезией), и собрал полностью с нуля свой солвер. Данное решение сильно упростило работу в дальнейшем, в процессе дебага, тестов и запаковки системы в систему hda

296 0 16 10 83

#щп #wip

Ку🙂

Небольшие спойлеры темы, которая в ближайшее время будет подниматься и детально мусолиться на канале. В основном речь пойдет о симуляции пены, а также о двухфазовых солверах, подходе к сборке кастомного спарсового солвера жидкостей с адаптивным солвером давления, как обычно будет много раз упомянута одна немалоизвестная студия (интересно какая🤔), а также небольшой рассказ о том, как я случайно собрал флип солвер


В итоге круг замкнулся: мой пост с RnD оценил Алексей Стомакин - инженер из WetaFX, а также один из авторов вайтпейпера, использованного в основе ресерча. Я очень рад


Прив💀

Я уже устал упоминать название этой студии, но я снова скажу, недавно я решил попробовать воспроизвести один вайтпейпер от программистов из Weta

У ребят есть прикольный документ на тему того, как они симулируют мелкомасштабные взаимодействия воды, а также, очень важный элемент таких симуляций - адгезию. Алгоритм в своей сути достаточно простой - берется SDF жидкости (поле surface), и экстраполируется внутрь коллизии, с учетом каких-то заумных вычислений синусов и косинусов, которые придумали авторы. Я не вдавался в подробности, просто взял все у них. По итогу получается так, что поле surface начинает заходить внутрь коллизии, и по сути решает проблему гидрофобности коллайдеров во Flip симуляции. Дальше surface очищается, немного размывается; добавляется маска по вязкости для имитации трения о поверхность, а также Surface Tension, который работает уже с новым полем surface. Так и получается симуляция

И вроде бы все отлично, можно идти в инсту, и делать 100 однообразных рилсов с макро симуляциями воды, сделанных по полностью скопированному чужому подходу. Но есть несколько "но". Вся эта штука работает очень медленно, требует десятки подшагов, а также очень маленького размера вокселя симуляции. Об этом всем авторы пишут в пейпере. К примеру, на флипбуке с головой видно, что время такой лоурезной симуляции занимает больше двух часов. А в случае с рукой, симуляция считалась еще дольше, посчиталось 15 кадров (на каждый по 50 глобальных подшагов), и я уже потом заретаймил их для адекватного хронометража, отчего конечно же получилось слоумо. И я пока что слабо понимаю, как с этим бороться, так как понижение резолюшена приводит к ступенькам на жидкости (такую же проблему часто вижу во многих RnD по адгезии во Flip), понижение подшагов ломает лук симуляции, а игнорирование каких-то ресурсоемких шагов в сетапе попросту недопустимо

При всех минусах подхода, я думаю попробовать взять его в один текущий проект. В комментариях файл с базовым сетапом


Ку🥀

На днях подшарил за прикольную тему с рандомом на обратном кубическом распределении. Я узнал об этом из статьи WetaFX, где они рассказывают об их подходах к симуляции пены, и в частности о том, какими средствами они назначают радиусы сгенерированным частицам пены. Как пишут авторы, применение данного метода в таком ключе имеет под собой некое физическое обоснование, так как распределение мелких и крупных пузырьков, генерируемых всплесками воды, приблизительно сходится с таким рандомом

Пена - это конечно круто, и в данную статью я полез именно за информацией о ней, но я думаю, что данный алгоритм можно применить много где. Обычный рандом в гудини использует метод равномерного распределения. Что это значит? - это значит то, что в заданном диапазоне действия рандома у всех чисел есть одинаковая вероятность выпадения. В чем проблема? - на скаттерах и тому подобных структурах это выглядит плохо, и даже в какой-то степени "не рандомно". Я сделал два демо рендера (рандом контролирует размер пузырьков внутри сферы), и нижний рендер - это как раз обычный рандом (справа нарисован его график распределения величин)

Что делает рандом с обратным кубическим распределением? Кроме математики - он делает общее распределение визуально более разнообразным, за счет того, что условно "отдает предпочтение" меньшим значениям. Верхний рендер - это рендер с этим рандомом (справа его график распределения величин). Он выглядит намного лучше и органичнее

Незаменим ли этот подход? - нет, есть множество альтернатив. До того, как я узнал про это, я обычно наслаивал несколько рандомов друг на друга, а также выборочно увеличивал или уменьшал небольшое число элементов, чтобы как раз добиться схожего эффекта визуальной разницы между значениями. Полезно ли знать о таком подходе? - думаю, что однозначно да. В конце-концов, он дает возможность получить симпатичный лук в распределении значений всего лишь за один копипаст кода во врангл. Кстати код снизу (советую начинать использовать на дефолтных значениях)


float min = chf('min'); //Def 0.05
float max = chf('max'); //Def 1
float bias = chf('bias'); //Def 1

float min_sqinv = 1 / (min * min);
float max_sqinv = 1 / (max * max);

float rnd = rand(i@ptnum + chf('seed') + 123.456);
rnd = pow(rnd, bias);

f@random = 1 / sqrt(min_sqinv - rnd * (min_sqinv - max_sqinv));


#щп #wip

Привет🤣

Я продолжаю работать над системой локального апресинга для Flip. Ну точнее, я закончил работать над ней. В итоге мне пришлось немного пересмотреть свой подход, и добавить в сетап Gas Guide для полного отсутствия стыков на границах симуляций. Это было достаточно сложно, так как я не смог с ходу разобраться в том, как правильно отдавать солверу все поля от лоурезной симуляции, чтобы ничего не ломалось и не взрывалось, что как я понял, любит делать Gas Guide, когда ему хоть что-то не нравится. Зато результат достаточно хороший

Еще я позаимствовал у Igor Zanic идею по разделению кэшей флип симуляции на отдельные файлы с волюметриками и частицами (это кстати действительно достаточно удобный и полезный подход). Для этого я собрал ассет. Он также умеет считать время симуляции и размер кэшей, что я успешно вывожу в инфо оверлей у флипбуков. Да, над флипбуками я тоже поработал, и теперь они выглядят еще лучше, чем были, для этого используется несложный скрипт на питоне. Сами флипбуки считаются при помощи PDG, но это уже достаточно обыденная практика

Мне осталось только решить все проблемы с симуляцией пены. Это даже скорее не проблемы, а идеи. Например я хочу попробовать реализовать систему вычисления коэффициента аерации, как это делают Weta. Я уже тестировал этот подход, и понял, что это вполне реально сделать


#щп #wip

Привет🙂

В последнее время я очень упоролся в флип и все вытекающее из этого. Сейчас делаю рнд по локальному апрезу флип симуляции. У SideFX есть подобные инструменты в SOP Flip, но я люблю делать все в DOP, а также понимать, как работает то, что я делаю, так что я собрал свое решение

Эта штука очень полезна для шотов, где не на всех участках крупной симуляции нужно очень высокое разрешение; позволяя выборочно повышать резолюшен только там, где симуляция в этом нуждается


Видео недоступно для предпросмотра
Смотреть в Telegram
#щп

Привет🤔

Тут не будет большого полотна текста. Просто дейлик. Рендер в октане


Привет⚰️

Последние месяц-три я много чего обдумал в плане триде, того, что я делаю тут, и в чем я это делаю. Все это привело к тому, что я решил отойти от привычного для себя пайплайна, и попробовать что-то новое, а конкретнее: Octane Standalone и Davinci с Fusion

Прикреплю рендеры ниже, чтобы было удобнее

Я очень давно хотел попробовать Octane. Все началось еще зимой, когда я скачал октан для блендера, и начал пытаться понемногу понимать движок. Все было нормально, но меня не покидало чувство неполноценности реализации плагина в этом софте, а также в каком-то смысле его ненужности из-за наличия Cycles. Да, у октана есть несколько преимуществ в сравнении с сайклс, но они очень призрачные, и сайклс полностью перекрывает их своей скоростью. Потом я улетел из России, много чего поменялось, и в итоге у меня исчезли все неудобства, связанные с возможностью покупки зарубежного софта, и я сразу же купил нормальный октан и пошел изучать его в гудини. Само-собой, в гудини работа пошла куда активнее, но видимо даже этого мне было мало. Я достаточно давно знаю об Андрее Леброве, и о том, что он работает в страшном софте под названием Octane Standalone, а также, давно знаю, что октан стенделон - это какая-то странная штука, в которой есть длинные ноды и ничего не понятно. Как-то так вышло, что один раз я решил поглубже разобраться в этом вопросе, скачал OctaneX, ну и каким-то образом перенес всю свою работу на него

Немного про сам проект: он является не только тестом возможности движка, но и полигоном для интересных технических решений. Например, на нем я окончательно разобрался в вопросе динамического создания и удаления RBD объектов с констрейнами; а также, довел до рабочего состояния свой воркфлоу с RBD инстансами. По сути, все, что есть на рендере - это инстансы вариантов RBD объектов, наследующие корректные трансформации с прокси геометрии из Bullet. Важно, что это не пакеды внутри SOP, и не реализация через Transform Pieces, а именно точки инстансов с атрибутом variant. Такое решение очень полезно для ситуаций, где например нужно ссылать инстансы на RS Proxy, или файлы с диска, чтобы максимально оптимизировать сцену; или как в случае с финальным рендером - корректно перенести сетап инстансирования в другой софт для рендера, без потери в оптимизации

Теперь про OctaneX. Мне нравится, что в стенделоне нет никакого лага при проигрывании анимации, перехода между сценами и тп. Если брать для сравнения мой проект, то гудини не мог адекватно его проигрывать при рендере в IPR; каждый кадр (особенно когда коробки начинают лопаться) подгружал по секунде-две. Все из-за моста между движком и DCC (в конкретном случае гудини), которого в стенделоне по сути нет, так как если говорить упрощая, то движок лежит "прямо под интерфейсом". Работа ощущается очень интерактивно, но само-собой в пределах рендертайма. Еще мне нравится одно концептуальное решение в стенделоне - вообще все может лежать в одном нетворке: объекты, свет, шейдер графы. Это удобно, так как не надо переходить по контекстам, что приходится делать в гудини. Да, кроме плюсов, есть много костылей, вроде сложной и урезанной работы с анимацией, но тут уже стоит решать для себя, готов ли ты мириться с таким

И напоследок пару слов про Davinci и Fusion - на мой взгляд, композ в Nuke намного удобнее, но мне очень понравились инструменты для работы с цветом в давинчи, они действительно хороши, и мне интересно в дальнейшем их использовать

Мне нравится стенделон, и я точно хочу продолжать с ним работать, так как он очень крут для сборки средних и тяжелых сцен. Для меня интерактивность сильно роляет. Я точно знаю, что если я работаю с лагающей сценой, то результат моей работы будет сильно хуже, чем если бы я работал с плавной сценой, так как у меня просто начинает подгорать

414 0 8 10 24

Видео недоступно для предпросмотра
Смотреть в Telegram
Привет👋👋👋

Я продолжаю доить тему своей не потрясающей кинокарьеры. Это еще один красивый проект, в котором я принял участие в OVFX. Мы делали графику для хф "Любовь Советского Союза"

Сам проект появился достаточно неожиданно, и на него были выданы сжатые сроки. Я занимался несколькими шотами, где делал всякие небольшие симуляции, но среди всего этого, был один большой финальный шот, на котором пришлось сделать вид, что я умею не только дым симулить

Наша команда fx артистов делала генерацию города в конце шота, и разные побочные эффекты. Было очень мало времени, но общими силами получилось собрать симпатичную Москву. Больше всего времени я работал над расстановкой зданий, симуляцией дыма от самолета, и снегопадом

В общем, получилось красиво, и я рад, что принял в этом участие


Ку🤔

Я все еще делаю рнд для одного проекта прикольного, и встала задача сделать симуляцию поджигания нефтяного фонтана. Изначально этого поста вообще не должно было существовать, но я решил попробовать вкомпозить свой рендер в основной реф, и получилось красиво

С флип симуляцией было больше всего проблем. Я две недели искал все возможные способы реализации сопротивления воздуха для жидкости, пересмотрев кучу курсов и уроков, но ни одна из них не давала нужного мне результата, или у меня руки кривые просто. В итоге, я собрал в кучу все, что узнал, добавил от себя пару вещей, прогнал кучи тестовых веджей, и кое-как получилось добиться неплохой симуляции. Пайро симуляция отделалась легким испугом - это была почти самая простая часть сетапа, ничего колхозить не пришлось

Рендерилось это все в Cycles. Такое решение было принято из-за скорости рендера, ибо 3 минуты на fHD кадр, на M4 Max - это очень приятно. Karma может быть к 2027 году порендерил бы пару кадров. Композ был в нюке. Вообще, я большой фанат слепого накидывания готовых эффектов в AE, и называния этого композом; но такая задача требовала более полноценного подхода, потому я и выбрал нюк

Надеюсь я когда-то закончу сам проект, но здорово, что есть какие-то сподвижки

513 0 12 6 20

Привет🥀

Еще в конце 2025 года, мы вместе с командой 2A, собрали большой и красивый проект, на основе визуализации карточки SPARK

Это было очень интересно и круто, так как на проекте не было никаких художественных ограничений, и еще мне просто нравится такая строгая стилистика

В ходе работы мне выпала возможность, как довести некоторые шоты от нуля до финального рендера, так и просто позаниматься разными вспомогательными задачами. В особенности, думаю, я очень сильно шагнул вперед в плане освещения и лукдева, так как именно на этом проекте я впервые столкнулся с настолько в хорошем смысле придирчивым подходом к настройке всего этого

Сюда я приклеплю пару шотов, на которые мне пришлось убить больше всего времени и сил. Именно их я вел от начала и до конца. Не без проблем, и не без кучи правок конечно, но без всего этого, было бы кратно хуже. Шоты классные, но на бехансе есть еще много интересного и красивого, в том числе и небольшой брекдаун, так что советую посмотреть

🎨 тут проект 🎨

2A inst


Сап🙂

Еще осенью того года собрал такой симпатичный шот в 2A. Он был для проекта заставки Т-Банка. В финальном монтаже лежит совсем другая его версия, но мне она не очень нравится

Из интересного, в этом шоте я в первый раз использовал MPM в рабочем проекте. Получилось прикольно, хотя я думал, что будет очень много проблем. Также, мне в принципе нравится то, как получилось посветить и пошейдить сцену. Хотя справедливости ради, местами было тяжело, так как я все еще не очень крут в этом

Вообще, на проекте было много шотов, над которыми я работал, но этот мне нравится больше всего

2A inst: @2a_postproduction


#щп

Ку👍

Вымучал за вечер такую рекурсивную штуку прикольную. Пик моих навыков кодинга😮



Показано 15 последних публикаций.