Обзор предметной области
В современных игровых проектах для создания эффектов движения воздуха обычно используют специальные программы, способные симулировать газодинамические процессы (таких как Houdini). При этом симуляция производится заранее и запекается в виде анимации. Другой часто используемый способ, это задать траекторию движения вручную.
Выше перечисленные варианты не дают достаточной интерактив
ности, поскольку действия игрока никак не влияют на ход событий. В современных игровых движках (таких как Unity) присутствует возможность имитировать физические взаимодействия для систем частиц, но они ограничены физикой твёрдого тела, что не подходит для получения эффекта турбулентных потоков, создаваемых в реальных газодинамических процессах.
Подходы к решению задачи моделирования
Для решения задачи моделирования газодинамических процессов, удобно пользоваться методом конечны разностей. Этот подход заменяет непрерывную среду, так называемой, разностной сеткой, представляющую собой дискретную модель данной среды. При этом, набор дифференциальных уравнений, описывающих исходную задачу, заменяется разностной схемой -- системой алгебраических соотношений, которая аппроксимирует дифференциальную задачу.
Построение разностной схемы на основе одной системы дифференциальных уравнений не является единственным. К схемам могут применяться различные требования, в зависимости от решаемой задачи. Для физических систем, например, важно учитывать законы сохранения энергии, сохранения массы, и другие подобные соотношения, которые присутствуют неявно в исходной задаче, и могут быть потеряны при её аппроксимации. К другим требованиям относится степень аппроксимации разностной схемы -- точность, с которой решение приближено к исходной задаче.
Применение в Unity
Для использования такой симуляции в игровых проектах необходимо применить в конкретном игровом движке. Чтобы не создавать собственно визуализации системы частиц, можно использовать существующую. Так, в движке Unity для создания систем частиц широко используется две независимых подхода -- старый встроенный компонент Particle System и новые пакет Visual Effect Graph.
Particle System в Unity позволяет включить для системы частиц внешние силы, что позволит влиять на траекторию частиц другими внешними компонентами, в том числе, использую Particle System Force Field. Этот компонент позволяет задать трёхмерную текстуру -- поле сил, влияющих на частицы, находящиеся в этом поле. Таким образом, достаточно создать внешний компонент, который производит симуляцию.
Visual Effect Graph это новая система визуальных эффектов в Unity. Граф состоит из специальных узлов и блоков, которые создают набор частиц (точек в пространстве), изменяют их траекторию, и создают внешний вид для вывода на экран. Среди таких блоков так же есть возможность задать векторное поле скоростей как трёхмерную текстуру.
Таким образом, для всех основных способов симуляции систем частиц в движке можно воспользоваться одним методов. Помимо этого, использование трёхмерной текстуры удобно тем, что её можно генерировать внутри вычислительных шейдеров, что позволит использовать возможности видеокарты в задаче симуляции потоков частиц.