Как сделать дым в блендере

Обновлено: 30.04.2024

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

Перевод программы и подсказок

Перевод программы и подсказок - Blender, как и почти все программы является англоязычной, но в настройках (preferences) мы можем сделать его интерфейс русскоязычным. Переводить его полностью на русский язык я бы не советовал, т.к. названия всех терминов и команд почти необходимо знать на английском языке для дальнейшего развития, и, так или иначе, много из них заимствовано великим и могучим русским языком и используется всеми и повсеместно (нормали, фейсы, вертексы и т.д.). А вот перевод подсказок действительно может упростить процесс входа в программу и снять много вопросов в процессе их появления. Окошко с подсказкой возникает при наведении курсора мыши на любой элемент blender.

Для того чтобы активировать подсказки, если они не работают, нужно зайти в меню Edit-Preferences-Interface. Поставить галочку напротив Tooltips.

Для активизации перевода подсказок в том же разделе открываем выпадающее меню Translation, ставим русский язык, и галочку напротив Affect Tooltips.

Забагивание области просмотра

Следующая проблема с которой я постоянно сталкивался это забагивание области просмотра - при попытке панорамировать вид\приблизиться\отдалиться от объекта, blender упорно отказывается это делать, точнее делает это очень медленно . Тут помогает функция Frame, которая перезахватывает выбранный объект во вьюпорте и данная проблема устраняется.

Находится эта функция в меню View-Frame selected.

Clipping

Некст проблема это clipping - при попытке работать с объектом на близком расстоянии область обрезает часть нашего объекта, и мешает нам работать.

устраняется заходом в боковое меню нажатием кнопки N, и во вкладке view в выпадающем меню view, уменьшаем значение Clip Start (Например 0,001)

Нормали

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

-Нормали это вектор перпендикулярный плоскости полигона, который указывает блендеру куда ему отражать свет. Направлен этот вектор только в одну сторону, то есть если нормаль вашего полигона развернута внутрь объекта, как часто случается в blender, то из за этого у вас будут проблемы на каком-то этапе работы.

Как мы можем видеть на данном изображении - все нормали объекта, кроме трех выделенных, повернуты наружу, а три выделенные - внутрь. При обычном режиме затенения Shade flat - этого не видно, но если я включу режим затенения shade smooth, то результат будет совсем иным.

Проверить направление нормалей своего объекта я могу перейдя в edit mode, и в выпадающем меню overlays поставить галочку напротив Face orientation . Тогда все нормали повернутые наружу будут отображаться синим цветом, а направленные внутрь - красным. В этом же меню Overlays я могу включить отображение нормалей как векторов.

Развернуть нормали нам помогут функции Mesh-Normals-Flip (или recalculate outside)

Flip - развернет выделенные полигоны.

Также мы можем выделить все полигоны объекта (шорткат А) и нажать Recalculate outside чтобы blender автоматически пересчитал все наши полигоны наружу.

За направлением нормалей лучше следить.

Двойные вертексы

Двойные вертексы - часто в процессе моделирования и оперирования командой Extrude могут создаться вертексы, которые стоят друг в друге и будут портить нашу топологию, это может нам аукнуться на этапах UV развертки, создания рига и тд. Чтобы избежать этого, на промежуточных этапах работы можно выделять всю свою модель в режиме работы с вершинами и нажимать Mesh-clean up-merge by distance. Двойные вертексы будут объединяться.


Карты нормалей

Карты нормалей запеченные в других программах (substance painter, Zbrush) дают странный результат в Blender .

Проблема в том что карты нормалей, в вышеперечисленных, и не только, программах, запекаются c использованием DirectX, а blender работает с OpenGL. Если говорить простым языком то нам нужно развернуть зеленый канал на карте нормалей. Делается это следующим образом:

Надеюсь, что данный пост поможет людям, осваивающим блендер, проскочить несколько часов поиска решения проблем!


Главное не перепутать параметры, которые ставятся не только для эмиттера дыма и огня, но и для дымового домена. Они одинаково находятся в Properties > Physics, но сами разные.

Пошаговые инструкции тут:

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

Когда переключатель рендерера на самом верху стоит на Сайклз, Quick Smoke делает связку узлов, которая появляется в редакторе узлов. А когда переключатель стоит на Блендер, то в материале дымового домена появляются две текстуры: Smoke Density для дыма и Flame для огня. Их можно редактировать. Для огня, например, в текстуре Flame можно поменять цвета в колоррaмпе или Volume: Emission в табе Influence. Смотрите визуализация объёма в руководстве для Блендера 2.79.

Сайклз с denoise filter и Samples: 30 раз в 40 медленнее Блендер Интернала, но с другой стороны в Блендер Инернале скорее всего придется доводить огонь до ума с помощью композитных фильтров blur и glear. Без них огонь будет похож на вату.

Проблемы и решения

Fix 2. Помести пол и лампу в отдельный слой. На лампе поставь "This Layer Only".

Результат

Cycles


Огонь выглядит детальней, чем в Блендер Интерналe, заметен дым, но также заметен и темный квадрат вокруг костра в месте пересечения дымового домена с полом.

Лампа, находящаяся внутри огня, помещена в отдельный слой.

Blender Internal


Пересечение дымовой домена с полом не заметно совсем.

Лампа, находящаяся внутри огня, помещена в отдельный слой с параметром "This Layer Only".

Появление в 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. Откровенно говоря, этот пост — приглашение к дискуссии. Дело в том, что, разумеется, хочется делать вещи более законченные, чем демки крутых нововведений — и вот тут натыкаешься на нехватку каких-то мелочей, а жить с этим как-то надо, и работать тоже. Мой выбор обоснован тем, что мне искренне нравится Blender — дело отнюдь не в политически-религиозных opensource-мотивах или в цене лицензии :).

2 Шаг 1: Создайте новую плоскость Add>>Mesh>>Plane, затем выйдите из режима редактирования (edit mode), при помощи клавиши Tab. Шаг 2: Нажмите ALT+R и ALT+G чтобы поместить плоскость в начало координат. Шаг 3: Нажмите клавишу N, чтобы показать плавающее меню "Transform Properties" (свойства трансформации). Установите значения Scale X, Y и Z (масштаб по осям X,Y,Z) равное 0,725 и Loc X равное -4. Шаг 4: Нажмите клавишу Tab чтобы перейти в режим редактирования (edit mode) и нажмите клавишу А, для выбора всех вершин. Шаг 5: Нажмите клавишу U и выберите "Unwrap" чтобы сгенерировать UV координаты. Если эмиттер не имеет UV координат, то рекламные щиты (Billboards) не будут правильно отображены. Снова нажмите Tab, чтобы выйти из режима редактирования (edit mode). 2

3 Шаг 6: В окне кнопок "Buttons Window" нажмите F5, чтобы перейти в панель "Shading" (меню для настройки материалов), выберите плоскость и кликните "Add new" (добавить новый) и назначьте новый материал плоскость. Шаг 7: В меню материалов нажмите на "Shadeless" (открытый), чтобы сделать наш дым видимым, даже если в сцене нет освящения. Step 08: Шаг 8: Нажмите на "ZTransp" (прозрачность) кнопку для активации прозрачности без использования raytracing и установите параметр А ("Alpha" - альфа) на 0, чтобы использовать прозрачность текстур вместо глобального альфа ("global" alpha). Шаг 9: Нажмите F6 для перехода в панель текстур ("Textures" panel) 3

4 Шаг 10: Кликните на первой пустой кнопке и нажмите "Add New" (добавить новый). Шаг 11: Установите тип текстуры на "Clouds" (облако) и установите значения "NoiseSize" (размер шума) на 2, "NoiseDepth" (глубина шума) на 6 и переименуйте вашу текстуру на "Smoke_Color" (цвет дыма) Шаг 12: Вновь кликните на пустой кнопке, нажмите "Add New" (добавить новый), выберите тип "Clouds" (облако) и "NoiseSize" на 1,3 и "NoiseDepth" на 6. Переименуйте эту текстуру на "Smoke_Alpha" (альфа дыма). Шаг 13: Перейдите в UV/Image editor (редактор UV/Image), чтобы нарисовать новую текстуру и создать новое изображение Image >> New. 4

5 Шаг 14: Установите ширину "Width" и высоту "Height" на 512, для определения размера новой текстуры и нажмите ОК. Шаг 15: Нажмите на кнопку "Enable Painting Texture" (включение рисования текстуры) в меню заголовка окна UV/Image редактор, чтобы активизировать режим рисования "paint" и нажмите клавиши N и С, чтобы появились панели "Image Paint" (рисование изображения) и "Image Properties" (свойства изображения). Шаг 16: Используйте инструменты рисования для создания произвольного формы рисунка белого цвета, но только не пересекайте края изображения. Они должны остаться полностью черными. Пока вы рисуете изображение, вы можете нажать на кнопку "Airbrush" (аэрограф), чтобы непрерывно рисовать. 5

7 Шаг 20: Выберите кнопку "UV", затем перейдите в закладку "Map to" и выберите "Color". Если необходимо, то отключите все остальные кнопки. Шаг 21: Кликните на кнопке пурпурного цвета и выберите белый цвет. Step 22: Вернитесь в закладку "Texture" и выберите "Smoke_Alpha". В "Map Input" закладке выберите "UV" затем в закладке "Map to" выберите "Color" и "Alpha" (будьте осторожны в выборе "Alpha", двойное нажатие инвертирует прозрачность). 7

8 Шаг 23: Кликните на пурпурном цвете и выберите черный цвет. Шаг 24: Вернитесь в закладку "Texture" и выберите "Smoke_Mask". В закладке "Map Input" выберите "UV" и в "Map to" выберите только "Alpha". Шаг 25: Выберите пурпурный цвет и сделайте его черным и измените "Mix" на Multiply. 8

10 Шаг 04: В группе параметров "Global effects" (глобальные эффекты) установите параметры ускорения по осям "AccX" равное 7, "AccZ" равное 3 и "Brown" (броуновское движение) равное 15 (эта функция реально полезна для нелинейного движения). Шаг 05: Сейчас вы создадите новую камеру, потому что вы собираемся использовать знаменитый тип частиц под название billboard. Шаг 06: В панели "Visualization" (наблюдения) установите тип частиц Billboard. Billboard так же известный, как "Sprite" (призрак) является простой плоскостью всегда отображается в камере (т.е. поэтому до этого мы создали камеру). Шаг 07: Кликните по кнопке "Lock" чтобы сохранить все Billboards (биллборды) параллельными для избегания пересечения между ними. 10

12 поняли, почему это было важно?). Директория заполнится группой файлов (по одному на каждый кадр) где сохранятся все данные о частицах. Для вашего сведения: Как только ваши данные запишутся (или скешируются), вы все еще можете редактировать все параметры, которые не влияют на движение частиц (такие как: размер, цвет, прозрачность, потомок, ) C) Анимация искривления и размера биллбордов: Шаг 01: Сейчас чтобы наш поток частиц был записан, выделите объект-эмиттер (здесь плоскость) и переключитесь в IPO редактор. Шаг 02: Кликните на "Show IPO type" (показать тип IPO) комбо листа и выберите "Particles" (частицы). Сейчас вы можете видеть различные параметры частиц в правой части редактора. 12

13 Step 03: Кликните на "BBTilt" (означает наклон биллборда). Этот параметр используется для вращения биллборда в соответствии с видом из камеры и возраста частиц. Шаг 04: Зажмите клавишу CTRL и кликните левой клавишей мыши около нулевых координат (0/0), добавится новая точка. Шаг 05: Еще раз создайте новую точку около 200 кадра с значением

14 Шаг 06: Повернуть касательные точек для имитации логарифмической кривой. Шаг 07: Кликните на параметре "Size" (размер) в правой части IPO редактора и создайте новую точку в 0/0 таким же путем как создавали в "BBTilt" параметре. 14

15 Шаг 08: Добавьте новую точку около 200 кадра со значением 20. Оставьте базовую интерполяцию без изменений. Сейчас если вы нажмете "Play", то вы сможете увидеть как ваши биллборды вырастают и крутятся вдоль пути анимации. Шаг 09: Нажмите F12 для начала рендеринга и увидите, что происходит. Да, сейчас мы имеет густой и пыльный смок (дым). 15

17 Шаг 04: Создайте новый узел смещения Spacebar >> Add >> Distort >> "Displace" и подключите выходной параметр "Image" у "Render Layers" с входными параметрами "Image" и "Vector" у узла "Displace". Шаг 05: Установите параметры "X Scale" и "Y Scale" в узле "Displace" равное 20. Узел "Displace" используется для того, чтобы дать дыму движение более похожее на жидкость. 17

18 Шаг 06: Создайте новый фильтр Spacebar >> Add >> Filter >> Filter и установите его в режим "Kirsch". Шаг 07: Подключите выходной параметр "Image" узла "Render Layers" с входным "Image" узла "Kirsch". Шаг 08: Установите параметр Fac узла "Kirsch" равным 1.0, если необходимо. Kirsch используется для генерации дополнительных деталей которые будут смешаны в оригинальной визуализации. 18

19 Шаг 09: Создайте узел цветового смешивания Spacebar >> Add >> Color >> Mix, подключите выходной параметр "Image" узла Displace с первым "Image" узла Mix. Step 10: Перетащите выходной параметр "Image" узла Kirsch на второй входной узла Mix, установите параметр "Fac" на 0.15 и кликните по кнопке "A" ("Alpha") узла Mix. 19

20 Шаг 11: Создайте новый фильтр смазывания Spacebar >> Add >> Filter >> Blur и установите параметры X и Y равные 2. Этот фильтр Blur позволяет дыму выглядеть мягким. Шаг 12: Подключите выходной параметр "Image" узла "Mix" с входным "Image" узла "Blur". Шаг 13: Добавьте фильтр бликов Spacebar >> Add >> Filter >> "Glare". Установите в этом узле "Fog Glow" режим и подключите выходной параметр узла blur с единственным входным у "Glare". 20

Читайте также: