Недавно мы обсудили, как дополнить ранее построенную в ParaView геологическую модель вулкана Тамбора, Индонезия с помощью симуляции потоков дыма, воды, лавы,… в MantaFlow и визуализировать результаты в ParaView: Гидродинамическое моделирование (CFD) на рельефе с помощью MantaFlow и визуализация результатов в ParaView Сегодня мы посмотрим, что получится, если использовать "настоящий" софт для работы с трехмерной компьютерной графикой Blender. В последние его версии встроен тот же самый "движок" физически корректной гидродинамической симуляции MantaFlow, это многое упрощает. Как обычно, инструкции по преобразованию данных, исходные данные и проект Blender смотрите в моем GitHub репозитории: ParaView-Blender.


Tambora Volcano Plume Simulation


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


Введение


В предыдущей статье изложено подробно, почему так важна физически корректная симуляция геологических процессов в дополнение к статичным геологическим моделям. Но стоит ли тратить время на достаточно сложную программу Blender и перенос данных в нее, тем более, что у нас уже есть готовые модели в ParaView? Лучше всего, разумеется, взять и попробовать — но это трудоемко, так что должны быть какие-то веские причины потратить на это время. В связи с этим, уместно вспомнить, как примерно 20 лет назад на кафедре в университете мы сделали некоторые симуляции лабораторных работ по физике в проприетарном Autodesk 3ds Max. Само собой, полученные результаты были далеки от профессионально сделанных моделей из комплекта примеров 3ds Max, ведь YouTube с современным изобилием обучающих роликов тогда не существовал. И все же — возможность многократно повторить симуляцию, при этом ускорить ее или замедлить, одновременно увидеть несколько разных представлений происходящих процессов и другие возможности — позволяли по-новому взглянуть и понять физические явления. Да, на реальном оборудовании можно научиться работать с оборудованием, но именно компьютерная симуляция лучше для изучения физических процессов. Возвращаясь к геофизическим моделям, это тем более верно, поскольку происходящее в недрах (вулкана) нам в принципе недоступно для прямого наблюдения. Также, сегодня нам доступны Open Source программные продукты, в том числе Blender, и более того, со встроенным физически корректным симулятором MantaFlow, которым я и так давно пользуюсь. А еще, в Blender теперь есть новый "движок" рендеринга Eevee — на порядок быстрее предыдущего (Cycles). Кажется, пора пробовать!


Сразу скажу, что Blender я увидел несколько дней назад и вообще эта тема мне мало знакома. Так что, фактически, мы будем сравнивать результаты визуализации в ParaView, которым я ежедневно пользуюсь лет так пять уже, и результаты в Blender, с которым я знаком примерно пять дней. При этом, стабильная версия Blender не делает то, что мне нужно (и регулярно крэшится), а тестовая весьма нестабильна (ладно, крэшится, так еще при попытке обновиться на новый билд через пару дней вообще все симуляции перестали работать). Погуглив и пообщавшись с опытными пользователями, причина стала понятна — мало кто работает со столь сложными исходными данными, а симуляция наливания вина из бутылки в винный бокал работает отлично :) И все же, мне удалось сделать задуманное, а баги, надеюсь, исправят со временем (пытаюсь слать баг-репорты, в ответ мне рекомендуют обходные пути… тоже неплохо).


Подготовка данных для Blender


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


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


Ниже показано, как выглядит исходный проект с геологической моделью в Blender:


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


Визуализация в Blender


Все подробности можно посмотреть в приведенном в репозитории файле проекта Blender отмечу лишь, что мне показалось очень удобной система задания облета камеры вокруг сцены. В ParaView это, мягко говоря, совсем не так очевидно. Анимации из 180 кадров хватило для создания плавного поворота на 90 градусов, цвет фона выбран черным для упрощения визуализации модели и пламени (серый фон мне не понравился, а на белом плохо видно).


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


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


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



Заключение


Удивительно, но за несколько дней знакомства с Blender мне удалось сделать в нем симуляцию магмы, пламени и дыма и лавы и показать их намного эффектнее, чем в хорошо знакомом ParaView, не затратив на это слишком много времени. При этом, перенос и визуализация исходной статичной геологической модели вообще оказался довольно простым делом. Основные сложности возникают с проведением симуляций MantaFlow — с другой стороны, при использовании консольной его версии подготовка конфигурации и проверка результатов тоже требуют много времени. Для себя делаю вывод, что предпочту для новых проектов сразу делать проект Blender с симуляциями — уже имея некоторый опыт, времени потрачу даже меньше, а результат будет выглядеть намного лучше, при этом корректность результата никак не пострадает.


Полученная симуляция оказывается достаточно познавательна, на мой взгляд, — если сравнить исходную геологическую модель с анимированной магмой, заполнение магматических камер происходит в согласии с не анимированными магматическими каналами модели (показаны красно-коричневыми на модели, см. первый кадр видео). То есть даже небольшого выбранного разрешения для симуляции оказывается достаточно, чтобы показать вполне согласованную динамическую модель. Кроме того, если продолжать симуляцию (в проекте до 250 кадров настроено, но на видео показаны только 180 кадров), обнаруживается очень интересный эффект, который на самом деле может иметь место при извержении — магма на видео поднимается до поверхности и опускается вниз, а далее (не показано) она снова поднимается и снова опускается! И это при том, что положение источника магмы и параметры симуляции не меняются. Разумеется, этот же эффект сохраняется и при удвоении разрешения симуляции — если нужна большая детализация. С геологами я подробно еще не обсуждал результаты, вероятно, они еще что интересное заметят.


Из курьезов — за время карантина у меня "сдохла" батарея в макбуке 15" и я благополучно пересел на старенький макбук 13", которой вполне мне хватает для ежедневного консольного программирования на C, Python, SQL и запуска ssh на амазоновские инстансы EC2 для вычислений. В общем, в сервис я так и не добрался. Так вот, для комфортной работы в Blender этого явно мало — и размер экрана и вычислительная мощность недостаточны. При этом, я использовал только рендеринг на движке Eevee, потому что при включении Cycles рендеринг даже одного кадра становится чрезвычайно длительным процессом. Зато теперь я могу уверенно сказать, что на любом более-менее приличном современном ноутбуке можно отлично работать в Blender.