1. Уравнение Навье-Стокса
Уравнение Навье-Стокса
Уравнение Навье-Стокса – база почти для всех методов симуляции жидкостей и газов. Оно описывает жидкость как макроскопическую субстанцию, в которой есть скорость, давление и вязкость. Те если мы будем смотреть на очень маленький кусочек жидкости, для нас этот кусочек все равно останется жидкостью, а не молекулами. Такое уравнение описывает жидкость как что-то непрерывное.
Вот такое стремное уравнение: $$ \frac{\partial \mathbf{u}}{\partial t} = - (\mathbf{u} \cdot \nabla) \mathbf{u} -\nabla p + \nu \nabla^2 \mathbf{u} + \mathbf{f} $$
где $\mathbf{u}$ - вектор скорости, $p$ - давление, $\nu$ - вязкость, $\mathbf{f}$ - внешние силы.
$\frac{\partial \mathbf{u}}{\partial t}$ - изменение скорости во времени (обычное ускорение) маленького кусочка жидкости.
Каждую часть справа у уравнения можно интерпретировать:
Pressure
$-\nabla p$
Давление влияет на ускорение. Если в каком-то месте давление больше, чем в другом, то жидкость будет двигаться из места с большим давлением в место с меньшим. Как по мне это самый простой и логичный элемент уравнения – Двигаемся туда где слабее давят.

Advection
$ -(\mathbf{u} \cdot \nabla) \mathbf{u}$
Жидкость переносит свою скорость вместе с собой. Мне это очень сложно представить, поэтому рассмотрим пример с частицами. В жидкости есть ээ черные чернила от осьминога $a$ (Представьте жидкость без диффузии). Или очень вязкую жидкость. У нас есть вот такое уравнение $$ \frac{d \mathbf{a}}{dt} = - \mathbf{u} \cdot \nabla \mathbf{a} $$
В таком контексте понятно, что изменение количества чернил зависит от скорости жидкости. Если жидкость двигается, то чернила тоже двигаются.

Точно так же происходит и со скоростью жидкости. Она переносится из-за того что жидкость движется.
Viscosity
$\nu \nabla^2 \mathbf{u}$
Молекулы обмениваются скоростями между собой. Из-за этого скорость среды немного сглаживается. Это можно представить, как будто между молекулами есть пружинки, которые обменивают скорость.

Из-за того что между молекулами жидкости есть взаимодействие, скорость молекулы передается остальным. Если жидкость вязкая, то связи между молекулами сильные и одной молекуле приходится тащить за собой больше молекул.
Забавно, что в газах механизм вязкости другой. Там молекулы сталкиваются друг с другом и передают импульс за счет столкновений.
External forces
$\mathbf{f}$ Внешние силы. Ну тут все понятно, если на нашу жидкость действуют какие-то силы, то она будет двигаться в соответствии с ними. Например, гравитация.
Несжимаемость
Для несжимаемой жидкости уравнение дополняется уравнением ага ага несжимаемости:
$$ \nabla \cdot \mathbf{u} = 0 $$
Это уравнение нарушается при двух условиях либо у нас есть источники или стоки жидкости

Либо если жидкость сжимаема. Мне представить себе сжимаемую жидкость сложно, со школы говорили, что водичку нельзя сжать и у меня теперь это не получается. Зато получается представить как воздух сжимается в поршне. Тогда скорости будут направлены друг на друга как-то так:

На самом деле, в реальности все жидкости сжимаемы. Но для художественных задач, практика показывает, что этим даже лучше пренебречь. Так получается красивее и проще. Более того часто даже для симуляции газов получается красивее, если считать их несжимаемыми.
Как описывать?
Вот мы определили уравнение, но как его решать? Как минимум нужен инструмент описания среды в которой это все происходит. В реальной жизни есть всякие молекулы и группы, у которых можно определить скорость. В компьютерной графике это все абстрагируется:
Идейно есть два подхода для описания среды:
- Эйлеровый - мы разбиваем пространство на кусочки и в каждом храним нужные параметры, например скорость и давление. Это может быть как просто равномерная сетка по всему пространству, так и что-то более сложное и динамическое.
- Лагранжевый - каждая частица имеет свои параметры, и мы их обновляем
У каждого подхода есть свои минусы и сейчас самые популярные методы – гибридные.