Мощный и, в новом интерфейсе, довольно стильный Blender продолжает радовать, а я продолжаю периодические попытки добиться от него эффектных симуляций и применения в области спецэффектов.
Появление в Blender 2.5 симуляции огня, дыма, мелкодисперсной пыли и прочих явлений флюидного характера — давно не секрет. С тех пор спето немало дифирамбов, написано немало туториалов. Но одного только, пусть даже крутого, движка мало для успешной работы.
Попробую провести поверхностный анализ нашумевшего Smoke Simulation на предмет готовности к производству спецэффектов.
Для примера я сделал простенькое пламя в свежем Blender 2.53
Итак, с чем же мы подходим к релизу?Источником дыма в симуляции является не меш, но частицы, им излучаемые, что дает гибкое управление распространением, количеством, и начальной скоростью дыма. Привычные поля также учитываются симулятором.
Из недр симулятора мы можем получить значения плотности вокселя в данной точке, его температуры и модуля скорости, и свободно использовать эти данные в текстурировании волюметрика. При создании, например, пламени, волюметрик окрашивается градиентной текстурой, цвета которой поставлены в соответствие температурному диапазону от условного максимального значения 1 до 0. В документации разработчиков упоминается, что voxel data хранится в 32-разрядном формате, и это очень приятно. Помимо этого, можно настроить силу гравитации в домене, скорость подъема нагретых масс воздуха и скорость рассеивания дыма в пространстве. Разумеется, дым отлично взаимодействует с преградами любой формы.
Неделю назад разработчики порадовали дополнениями — параметры Vorticity (сила турбулентных завихрений) и долгожданный Time scale, который позволяет просто замедлить или ускорить ход времени вводом коээфициента (от 0.2 до 1.5, но зато с точностью до четвертого знака после запятой — на самом деле, этого диапазона вполне достаточно). Управление кэшами высокого и низкого разрешения пока не очень прозрачно работает (по крайней мере, я не совсем усвоил значения некоторых кнопок), но позволяет стабильно поднимать кэш симуляции с жесткого диска, если по какой-то причине понадобилось прервать работу. Сама симуляция включает в себя два уровня — расчет основного объема дыма и последующая, менее ресурсоемкая, детализация с помощью FFT-шума или вейвлетов, что позволяет при сравнительно небольших затратах получать детализированные потоки и завихрения.

С этим всем прекрасно можно работать — настроить и рассчитать реалистичное пламя, взрыв или, скажем, клубы пара.
Система работает довольно стабильно, хотя и не мгновенно — физическая симуляция всегда требует времени и ресурсов. Детализация и реалистичность поведения радуют. Для того, чтобы с полной отдачей использовать этот симулятор в производстве спецэффектов, не хватает, пожалуй, лишь нескольких функций.
Во-первых, несмотря на то, что источник частиц может быть сколь угодно подвижен, работа с анимированными препятствиями пока не поддерживается, что сужает сферу применения симулятора. Во-вторых, на данный момент я не смог найти возможность сделать дыму motion blur от его собственного движения (хотя от движения камеры full sample motion blur размазывает дым) — а ведь хотя бы вектора движения ближнего к камере слоя позволили бы делать неплохой фейк, я думаю. В-третьих, освещение сцены именно самим пламенем пока реализовать затруднительно, хотя можно попробовать поработать с излучающими частицами и Indirect Lighting. В-четвертых, совершенно непонятно, как быть с глубиной резкости. В-пятых, хочется более прозрачной работы с кэшированием и пересчетом кэша при изменениях параметров системы — хотя, возможно, здесь я ошибаюсь, и мне просто не хватает информации, чтобы использовать существующую инфраструктуру.
Получается, что большая часть проблем, которые я выделил, находятся на стыке симулятора и рендера :). Но, в принципе, все эти проблемы можно решить опосредованно — вместо анимированных препятствий оперировать полями, освещение выстраивать обычными текстурированными источниками света, а motion blur нужен не всегда в силу мягкой природы самого дыма (и иногда неплохо работают motion estimation алгоритмы в различных композерах).
Даже на примере этого небольшого и не самого значительного модуля видно, что Blender растет, и растет стремительно. Им действительно можно пользоваться, хотя при всей мощи и сложности кое-где пока не хватает сравнительно простых вещей. И, кстати, в Blender очень приятно работать. Дизайнеры интерфейса и программисты постарались на славу :). Ждем релиза 2.5.
Tags: blender, cg&vfx