From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.

Симуляция жидкостей

Режим: Object Mode / Edit Mode (Mesh)

Панель: Physics Context → Fluid Simulation

Горячая клавиша: F7

Описание

Во время моделирования сцены с помощью blender некоторые объекты могут быть отмечены как участвующие в жидкосной симуляции, например жидкость или припятсвие. The bounding box другого объекта будет использована чтобы определить box-shaped область для того чтобы симулировать жидкость в (так называемом симуляционном домене (simulation domain)). Глобальные параметры симуляции такие как вязкость и гравитация могут быть установлены для этого домен объекта.

Используя кнопку "bake(приготовить)", геометрия и установки экспортируются в симулятор где будет выполняться жидкосная симуляция, генерирование мэш поверхности вместе с предпросмотром для каждого анимационного кадра, сохраняя их на жесткий диск. Затем подходящая жтдкосная поверхность для соответствующего кадра подгружается с диска и отображается или рендерится.

A breaking dam example animation created with the El'Beem simulator in Blender (and rendered using Yafray)

Процесс

В основном, вы следуете этими шагами:

  • 1. Моделирование сцены (объекты, материалы, светильники(источники света), камера)
  • 2. Определить часть сцены куда жидкость будет будет течь(домен)
  • 3. Установить функции различных объектов как они влияют на жидкость (ввод, сток, или препятствие, и т.д.)
  • 4. Создать источник(и) жидкости, и определить их материал(ы), вязкость, и первоначальную вязкость.
  • 5. Приготовить(Bake) в предварительной симуляции
  • 6. Проверка при необходимости, сохранение изменений
  • 7. Приготовить(Bake) в финальной симуляции

Опции

The basic (and frequently needed) fluid simulation options
Less frequentrly needed advanced options
Домен/Жидкость/Преграда/Источник/Сток
Выбор одной из этих кнопок определяет как активироанные объекты будут использоваться во время симуляции. Каждая кнопка определяет различную функциональность/взаимодействие, и каждая имеет дополнительные опции которые становятся доступны.
Рендеринг Мэш
Если мэш использует модификаторы, установки рендеринга используются для экспортирования мэш в анализитор жидкости. В зависимости от настроек, времени и используемой памяти эможет экспонентально вырасти. Например, когда испрользуется движущаяся мэш с подповерхностью(subsurf) как преграда, можно помочь уменьшить время симуляции ее выключением, либо уменьшением уровня подразделения (subdivision). Когда настройка/оснастка корректна, вы всегда можете увеличить установки для достижения более реалистичного результата.

Домен

Ограничительный куб(bounding box) объекта подаваемого как граница симуляции. Ни одна крошечная капля не может переместиться за этот домен; это аналогично тому если бы жидкость удерживалась в 3-D пространстве невидимыми силами. Сейчас (версия 2.4.2) может быть создан только один домен симулирования жидкости в файле. Длина ограничительного куба может быть разной.

Пространство Домена
Форма объекта не влияет потому что она всегда будет фиксированным кубическим пространством, вот поэтому обычно нет причин использовать другую форму домена отличную от куба. Если вам необходимы преграды либо другие границы отличные от куба чтоб препятствовать проникновению жидкости, вам нужно вставить дополнительнительно препятствующие объекты внутрь границ домена.
Разрешние(Resolution)
Фракционность(зернистость) с которой данная жидкостная симуляция будет выполняться. Это, возможно, наиболее важная настройка для симуляции так как она определяет величину детализации в жидкости, использование дисковой и оперативной памяти собственно как и время просчета. Заметьте что величина необходимой памяти быстро растет: разрешение в 32 требует ca. 4MB, 64 уже ca. 30MB, тогда как 128 требует более 230MB. Убедитесь что разрешение установлено в достаточно низкое значение, в зависимости от того сколько ОЗУ у вас есть, чтобы предотвратить "падение" либо "замерзания" Blender'а. Если домен не куб, разрешение будет взято по наиболее длинной стороне. Разрешение по другим сторонам в этом случае будет взято пропорционально другими сторонам.
Разрешение предпросмотра(Preview-Res)
Это разрешение при котором будет сгенерирована поверхность мэш для предпросмотра. То есть она не играет роли в окончательной симуляции, и даже если нечего смотреть на предпросмотре, должна быть тонкая поверхность жидкости не может быть воспоизведена на предпросмотре.
Время старта(start time)
Время симуляции (в секундах) первого кадра блендера. Так эта опция позволяет сделать начало симуляции позже начала общей анимации(So this option makes the animation in Blender start later in the simulation).
Кончное время(End time)
Время симуляции последнего кадра blender.
Качество отображения(Disp.-Qual)
Как отобразить подготовленную симуляцию в Графическом интерфейсе Blender (Blender GUI) (первое нажатое меню) и для рендеринга (второе): первоначальная геометрия, мэш предпросмотра или финальная мэш. Если подготовленного содержания(data) не найдено, первоначальная мэш будет отображена по умолчанию.
Отображение Подготовленного Домена
После того как вы подготовили домен, он отображается (обычно) в окне Blender подготовленный мэш. Чтобы увидеть размер и границу первоначального домена, выберите Геометрию(Geometry) в левом выпадающим списке.
Директория подготовки (Bake directory)
Директория и префикс файла для хранения подготовленных мэш поверхностей. Это аналогично выходным настройкам анимации, однако выбор файла немного отличается: если вы выбирете любую из ранее сгенерированных мэш поверхностей (например untitled_OBcube_fluidsurface_final_0132.bobj.gz) префикс будет автоматически установлен (untitled_OBcube_ для этого примера). Таким образом симуляция может быть выполнена несколько раз с различными настройками, и позволяет быстро переключаться между разными наборами поверхностных данных.
Подготовка(BAKE)
Выполняет жидкостную симуляцию. Графический интерфейс(GUI) blender'а может "застыть" и только показывать текущий кадр который симулируется. Нажатие Esc отменит симуляцию. Затем два .bobj.gz окажутся в указанной исходящей директории для каждого кадра. Заметьте по освобождению ранее подготовленных решений: Удаление содержания дириктории вывода подготовленных файлов - разрушительный путь для достижения этого, Будте внимательны если дириктория для подготовленных файлов используется более чем для одной симуляции (убедитесь что они используют различные имена файла, иначе они будут переписаны друг другом).
Повторное использование подготовленного(Reusing Bakes)
Ввод вручную (либо поиском)ранее сохраненной (подготовки/baked) вычислительной директории и маски имени файла переключит движение жидкости и мэш деформацию для использования that которая существовала при старой подготовке. `Итак, вы можете повторно использовать подготовленные "течения" простым указанием кути к ним в этом поле.
Выбор Подготовленного Домена (Selecting a Baked Domain)
После того как домен приготовлен, он изменяется на жидкосную мэш. Чтобы повторно выбрать домен так что б вы могли приготовить ее снова после внесения изменений, перейдите к кадру и выберите (правым-кликом)жидкосную мэш. Затем вы можете нажать кнопку Приготовить/Bake снова чтоб пересчитать поток жидкости внутри дрмена.

Кнопки-St/Ad/Bn

Нажиатие этих кнопок покажет дополнительные панели (Standard/Advanced/Boundary) более углубленных опций, обычно достаточно значений по умолчанию.
Продвинутые/Advanced
Вектор(направление)гравитации/Gravity vector(в версии 2.43 Гравитация/Gravity)
Сила и направление гравитационного ускорения и других дополнительных (плоскоть x,y) сил. Главным компонентом должно быть вдоль отрицательной оси-z [m/s^2]. Все значения x,y,z не могут быть равными 0(нолю), либо жидкость не потечет (представьте каплю в космосе). Должно быть несколько малых цифр, как минимум в одном направлении.
Вязкость/Viscosity
"Толщина" жидкости и собственно сила необходимая для того чтоб переместить некий объект в заданную область поверхности через нее с заданной скоростью. Вы можете либо вводить значение самостоятельно(manual), либо использовать предустановленные значения в выпадающем меню (такие как мед/honey, нефть/oil либо вода/water). Для ручного ввода, пожалуйста отметьте что обычная вязкость в реальном-мире (так называемая динамическая вязкость) измеряется в единицах Пуаз, Poiseuille (произносится"pwazooze"), а чаще сантиПуазы ('"sentipwaz"') единицы (cP). С другой стороны, Blender, использует кинематическую вязкость (которая разделяет динамическую вязкость по плотности, единицы [m^2/s]). Таблица ниже дает несколько примеров жидкостей вместе с динамической и кинетической вязкостью.
Таким образом, вводя значения руками are by a floating point number and an exponent. These floating point and exponent entry fields (scientific notation) simplify entering very small or large numbers. The viscosity of water at room temperature is 1.002 cP; so the entry would be 1.002 times 10 to the minus six (10^-6). Hot Glass and melting iron is a fluid, but very thick; you should enter something like 1 x 10^0 as its viscocity (indicating a value of 1x10^6 cP).
Преобразование единиц вязкости в Blender'е
Жидкость динамическая вязкость кинематическая вязкость (Blender)
Вода (20°C) 1.002 (1x10^0) 1 x 10^-6 (.000001)
Масло SAE 50 500 (5x10^2) 5 x 10^-5 (.00005)
Мед (20°C) 10,000 (1x10^4) 2 x 10^-3 (.002)
Шоколадный сироп 30,000 (3x10^4) 3 x 10^-3
Кетчуп 100,000(1x10^5) 1 x 10^-1
Расплавленное стекло 1x10^15 1 x 10^9
Real-World Size/Истинный размер
Размер области объекта в реальном мире в метрах (в единицах blender'а?). Если требуется создать стакан воды, это может быть 0,2 м, а для единственной капли сантиметр (т.е. 0,01 м) подойдет лучше. Установленный здесь размер соответствует самой длинной стороне параллелепипеда, охватывающего область объекта.
Gridlevel/Уровнень решетки
How many adaptive grid levels to be used during simulation - setting this to -1 will perform automatic selection. Сколько адаптивных уровней решетки будет использовано при моделировании. Установка этого параметра в -1 вызовет автоматический выбор.
Compressibility/Сжимаемость
If you have problems with large standing fluid regions at high resolution, it might help to reduce this number (note that this will increase computation times). Если возникли проблемы с большими областями стоячей жидкости при высоком разрешении, уменьшение этого числа (что, заметьте, приведет к росту времени вычислений), может помочь.
Domain boundary type settings/ Установки типа границ области
Это то же самое, что и для объектов-препятствий ниже, в принципе, эти установки определяют для шести сторон области являются ли они липкими, нелипкими или чем-то средним. (устанавливается при помощи PartSlipValue).
Tracer Particles/Частицы-трассировщицы
Number of tracer particles to be put into the fluid at the beginning of the simulation. To display them create another object with the Particle fluid type, explained below, that uses the same bake directory as the domain.
Surface Smoothing /Сглаживание поверхности
Величина назначенного поверхности жидкости сглаживания. 1.0 - стандарт, 0 - нет сглаживания, большие значения увеличивают величину сглаживания.
Generate & Use SpeedVecs/Создать и Использовать SpeedVecs
If this button is clicked, no speed vectors will be exported. So by default, speed vectors are generated and stored on disk. They can be used to compute image based motion blur with the compositing nodes. Если эта кнопка нажата, векторы скоростей экспортироваться не будут. Следовательно, по умолчанию, векторы скоростей создаются и хранятся на диске. Они могут быть использованы для расчета вызванной движением расплывчатости образа с использованием сборных узлов(?). (English seems to be obfuscating)

Fluid/Жидкость

All regions of this object that are inside the domain bounding box will be used as actual fluid in the simulation. If you place more than one fluid object inside the domain, they should currently not intersect. Also make sure the surface normals are pointing outwards. Все части этого объекта, находящиеся в обрамляющем область параллелепипеде, будут использоваться в моделировании как настоящая жидкость. Если в пределах области помещается более, чем один объект жидкость, они в настоящее время не должны пересекаться. Кроме того, следует удостовериться, что векторы нормали направлены наружу. In contrast to domain objects, the actual mesh geometry is used for fluid objects. В противоположность объектам-областям, для объектов-жидкостей используются настоящая геометрия мешей.

Volume Init Type/Тип исходного объема
Volume Init инициализирует внутреннюю часть объекта как жидкость, работает только для закрытых областей. Init Shell инициализирует только тонкий слой на всех гранях меша, работает и для незакрытых мешей. Init Both Объединяет объем и оболочку, меш также должен быть закрыт. Смотри рисунок внизу.
Initial velocity/Начальная скорость
Скорость жидкости в начале моделирования в м/с.
Пример различных типов начального объема: объемного, оболочечного и совместного. Обратите внимание: оболочка обычно немного больше внутреннего объема.

Obstacle

This object will be used as an obstacle in the simulation. As with a fluid object, obstacle objects should currently not intersect. As for fluid objects, the actual mesh geometry is used for obstacles. For objects with a volume, make sure that the normals of the obstacle are calculated correctly, and radiating properly (use the Flip Normal button, Mesh Tools pannel, Editing context [F9]), particularly when using a spinned container. Applying the Modifier Subsurf before baking the simulation could also be a good idea if the mesh is not animated.

Volume Init Type
Same as for a fluid object above.
Boundary Type (see picture below)
Determines the stickiness of the obstacle surface.
  • Noslip causes the fluid to stick to the obstacle (zero velocity),
  • Free(-slip) allows movement along the obstacle (only zero normal velocity),
  • Part(-slip) mixes both types, with 0 being mostly noslip, and 1 being identical to freeslip. Note that if the mesh is moving, it will be treated as noslip automatically.
Animated Mesh
Click this button if the mesh is animated (e.g. deformed by an armature, shape keys or a lattice). Note that this can be significantly slower, and is not required if the mesh is animated with position or rotation IPOs.
PartSlip Amount
Amount of mixing between no- and free-slip above.
Example of the different boundary types for a drop falling onto the slanted wall. From left to right: no-slip, part-slip 0.3, part-slip 0.7 and free-slip.

Inflow

This object will put fluid into the simulation (think of a water tap).

Volume Init Type
Same as for a fluid object above.
Initial velocity
Speed of the fluid that is created inside of the object.
Local Inflow Coords
Use local coordinates for the inflow. This can be useful if the inflow objects is moving or rotating.

Outflow

Any fluid that enters the region of this object will be deleted (think of a drain). This can be useful in combination with an inflow to prevent the whole domain from filling up.

Volume Init Type
Same as for a fluid object above.

Particle

This type can be used to display particles created during the simulation. For now only tracers swimming along with the fluid are supported. Note that the object can have any shape, position or type - once the particle button is pressed, a particle systems with the fluid simulation particles will be created for it at the correct position. When moving the original object, it might be necessary to delete the particle system, disable the fluidsim particles, and enable them again. The fluidsim particles are currently also unaffected by any other particle forces or settings.

Size Influence
The particles can have different sizes, if this value is 0 all are forced to be the same size.
Alpha Influence
If this value is >0, the alpha values of the particles are changed according to their size.
Bake directory
Which simulation run to load the particles from, this should usually have the same value as the fluid domain object (e.g. copy by ctrl-c, ctrl-v).


Another example animation of a falling drop, simulated in Blender and rendered in Yafray

Technical Details

'My cup runneth over' created with Blender and Yafray

Fluid animation can take a lot of time - the better you understand how it works, the easier it will be to estimate how the results will look. The algorithm used for Blender's fluid simulation is the Lattice Boltzmann Method (LBM); other fluid algorithms include Navier-Stokes (NS) solvers and Smoothed Particle Hydrodynamics (SPH) methods. LBM lies somewhere between these two. In general, it is really hard for current computers to correctly simulate even a 1-meter tank of water. For simulating a wave crashing through a city, you would probably need one of the most expensive supercomputers you could get, and it might still not work properly, no matter which of the three algorithms above you're using.

Realism
Similar to what film makers have been doing in "analogue" movies for years, you can pretend to have a wave in a city by building a smaller model, have a small wave in the model at farily high resolution, and hope that nobody will notice the difference between a 100m and a 1m wave. Texture the wave front with lots of noise and clouds affecting the color. Add lots of smoke (mist) emitters on surfaces that the wave hits, timing them to emit at the moment of impact in a direction incident to the surface and collision. Animate cars and trash (and drowning people) to float and bob on the wave front using the baked mesh. Use a string of mist emitters pointing up positioned at the wave crest to simulate the mist that blows off the top of the crest into the air.

For Blender's LBM solver, the following things will make the simulation harder to compute:

  • large domains
  • long duration
  • low viscosities
  • and high velocities.

The viscosity of water is already really low, so especially for small resoltuions, the turbulence of water can not be correctly captured. If you look close, most simulations of fluids in computer graphics do not yet look like real water as of now. Generally, don't rely on the physical settings too much (such as physical domain size or length of the animation in seconds). Rather try to get the overall motion right with a low resolution, and then increase the resolution as much as possible or desired.

Hints

  • Don't be surprised, but you'll get whole bunch of mesh (.bobj.gz) files after a simulation. One set for prelim, and another for final. Each set has a .gz file for each frame of the animation. Each file contains the simulation result - so you'll need them. Currently these files will not be automatically deleted, so it is a good idea to e.g. create a dedicated directory to keep simulation results. Doing a fluid simulation is similar to clicking the ANIM button - you currently have to take care of organizing the fluid surface meshes in some directory yourself. If you want to stop using the fluid simulation, you can simply delete all the *fluid*.bobj.gz files.
  • Before running a high res simulation that might take hours, check the overall timing first by doing lower resolution runs. Then, do a simulation for a narrow specific time segment (encompassing a frame or two) by
  • Only the bounding box of the domain object is used, but fluid and obstacle objects can be meshes with complex geometries. Very thin might not appear in the simulation, though, if the chosen resolution is too coarse to resolve them (increasing it might thus solve this problem).
  • Note that fluid simulation parameters, such as inflow velocity or the active flag can be animated with fluidsim IPOs.
  • Don't try to do a complicated scene all at once. Blender has a powerful compositor that you can use to combine multiple animations. For example, to produce an animation showing two separate fluid flows while keeping your domain small, render one .avi using the one flow. Then move the domain and render another .avi with the other flow using an alpha channel. Then, composite both .avi's using the compositor's add function. A third .avi is usually the smoke and mist and it is laid on top of everything as well. Add a rain sheet on top of the mist and spry and you'll have quite a storm brewing! And then lightning flashes, trash blowing around, all as separate animations, compositing the total for a truly spectacular result.
  • If you're having trouble, or something isn't working as you think it should - let me know: send the .blend file and a problem description to =nils at thuerey dot de=. Please check these wiki pages and the blenderartists-forum before sending a mail!

Limitations & Workarounds

  • One domain per blender file (as of Version 2.4.2), but you can have multiple fluid objects. Workaround: For prelims, move the domain around to encompass each fluid flow part, and then for final, scale up the size of the domain to include all fluid objects (but computation will take longer). This is actually a benefit, because it lets you control how much compute time is used by varying the size and location of the domain.
  • If the setup seems to go wrong make sure all the normals are correct (hence enter edit mode, select all, recalculate normals once in a while).
  • Currently there's a problem with zero gravity simulation - simply select a very small gravity until this is fixed.
  • If an object is inited as volume, it has to be closed, and have an inner side (a plane wont work). To use planes, switch to Init Shell, or extrude the plane.
  • Blender freezes after clicking BAKE. Pressing Escape makes it work again after a while - this can happen if the resolution is too high and memory is swapped to hard disk, making everything horribly slow. Reducing the resolution should help in this case.
  • Blender crashes after clicking BAKE - this can happen if the resolution is really high and more than 2GB are allocated, causing Blender to crash. Reducing the resolution should also help...
  • The meshes should be closed, so if some parts of e.g. a fluid object are not initialized as fluid in the simulation check that all parts of connected vertices are closed meshes. Unfortunately, the Suzanne (monkey) mesh in Blender is not a closed mesh (the eyes are separate).
  • If Blender crashes after clicking BAKE, the resolution is probably too high for your computer and, thus, requires too much memory.
  • If the fluidsimulation exits with an error message (e.g. that the init has failed), make sure you have valid settings for the domain object, e.g. by resetting them to the defaults.
  • To import a single fluid surface mesh you can use this script: .bobj.-Import-Script.

See Also

Acknowledgements

The integration of the fluid simulator was done as a Google Summer-of-Code project. More information about the solver can be found at www.ntoken.com. These Animations were created with the solver before its integration into blender: Adaptive Grids, Interactive Animations. Thanks to Chris Want for organizing the Blender-SoC projects, and to Jonathan Merrit for mentoring this one! And of course thanks to Google for starting the whole thing... SoC progress updates were posted here: SoC-Blenderfluid-Blog at PlanetSoC.

The solver itself was developed with help and supervision of the following people: U. Ruede, T. Pohl, C. Koerner, M. Thies, M. Oechsner and T. Hofmann at the Department of Computer Science 10 (System Simulation, LSS) in Erlangen, Germany.

http://www10.informatik.uni-erlangen.de/~sinithue/img/lsslogo.png       http://www10.informatik.uni-erlangen.de/~sinithue/img/unierlangenlogo.png