Стоит посмотреть это видео с имитацией потока воды в реальном времени. Это не идеально, но это очень хорошо, и что вы можете сказать, кроме «вау», когда вы смотрите, как вся эта имитация воды плещется вокруг!
Существует два различных подхода к созданию любого моделирования в компьютерной графике.
Вы можете взять точную физику и попытаться реализовать ее как можно точнее.
Вы можете попытаться найти процесс, который достаточно близко соответствует реальной физике, чтобы человеческий глаз действительно не мог увидеть разницу.
Например, вы можете попытаться визуализировать 3D-сцену с высокоточной трассировкой лучей, которая следует всем законам оптики, или вы можете использовать упрощенную модель затенения, такую как затенение Фонга. Это не точно, но обычно выглядит хорошо, и это намного быстрее, чем точная трассировка лучей.
Когда дело доходит до физических движков, у нас возникает та же проблема. Точная динамика или какое-то быстрое приближение, которое достаточно хорошо.
Поток жидкости труден, очень труден. Жидкость — это физическая сущность, которая подчиняется уравнению потока жидкости-обычно уравнению Навье-Стокса. Это трудоемкое уравнение для использования при реализации моделируемого потока жидкости. Это можно сделать, и именно такой подход используют физики и спецэффекты CGI при создании имитированной воды. Проблема в том, что это требует много вычислений и делает невозможным подход в реальном времени.
Конечно, если вы действительно внимательно посмотрите на жидкость, то в конечном итоге вы увидите набор частиц, движущихся в соответствии с законами Ньютона.
Так почему бы просто не сделать аппроксимацию частиц?
Проблема заключается в том, что частицы в жидкости подчиняются некоторым ограничениям, которые очень трудно смоделировать с помощью обычного метода «частицы с массой, движущейся под действием силы». Они должны двигаться, чтобы поддерживать плотность и давление в жидкости постоянными — жидкость должна быть несжимаемой.
Именно здесь появляется динамика, основанная на позиции. Вместо того чтобы моделировать ограничения, вводя подходящие силы, вы позволяете частицам двигаться так, как если бы они были свободны, а затем накладываете ограничения непосредственно, чтобы исправить движение. Этот подход использовался при движении твердого тела, но теперь Майлз Маклин и Маттиас Мюллер из NVIDIA применили его к потоку жидкости, и в результате получилось быстрое и впечатляющее моделирование.
Результаты, используя сотни тысяч частиц, очень похожи на поток воды, и, «всплывая» на поверхность частиц, чтобы они выглядели как гладкая текучая поверхность, эффект еще более впечатляющий.
Когда вы смотрите это видео, имейте в виду, что это происходит в режиме реального времени на графическом процессоре на стандартном ПК.
Некоторые из моделей показаны в виде необработанных частиц, чтобы вы могли видеть, как они движутся. Моделирование «на поверхности» — это когда частицы исчезают, и жидкость больше похожа на воду.
Так насколько же это хорошо?
Большинству вода кажется немного вязкой, но это тем более впечатляет, если вы собираетесь использовать ее в игре. В симуляции есть один или два момента, когда все кажется не совсем правильным, но для большинства зрителей это кажется достаточно хорошим. Возможно, это достаточно хорошо для игры, но, конечно, это не точная физическая симуляция, и она не пытается ею быть.
Возможно, еще более впечатляющим будет, когда вы соедините механику жидкости с некоторой механикой разрушения, то есть на простом английском языке, когда аквариум ломается:
Ожидайте промокнуть в будущих играх.