Простой исходный код динамики газа / жидкости - PullRequest
1 голос
/ 02 марта 2012

У меня есть трехмерная матрица воксельных объектов, которую я хотел бы использовать для хранения состояния некоторых основных физических принципов. Здесь мы хотим представить объем в реальном времени (~ 30FPS) в видеоигре. , Я хотел бы попытаться иметь объем, способный к следующему: 1. Храните жидкости и газы различного веса и следуйте основным принципам взаимодействия. Например, кислород легче воды. 2. Уметь определять давление. 3. Уметь взаимодействовать с «твердыми» объектами. Таким образом, в полой трехмерной коробке может храниться то, что не будет «вытекать».

Все это может быть очень простым и может отказаться от любых тестов на «точность».

Рад принять идеи, а также любые достойные ресурсы для дальнейшего чтения. Однако я бы сказал, что я не верю, что у меня есть умение взять бумагу или сложное уравнение и создать свою собственную библиотеку.

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Ну, моделирование мультижидкостей не совсем просто. То, что вы могли бы сделать, это использовать SPH (гидродинамику сглаженных частиц), так как этот метод позволяет относительно просто моделировать сложные интерфейсы. Если я прав, это также широко используется в игровой / анимационной индустрии, например Blender использует его для симуляции жидкости. Я предлагаю вам сначала попробовать провести симуляцию одной жидкости, прежде чем приступить к рассмотрению более сложных вещей. Будьте готовы, что это потребует некоторых усилий и в зависимости от того, какой тип точности / разрешения вы ищете для распараллеливания. Если у вас есть дополнительные вопросы по теме SPH, я постараюсь ответить на них.

2 голосов
/ 02 марта 2012

Обычный подход в трехмерной графике, который я видел, смоделирован на основе воксельных реализаций уравнений Навье-Стокса . Поиск этого должен дать много статей о подходах к реализации этого метода в коде или даже в готовых библиотеках, но, как заявил Azrael3000, вычислительная текучесть настолько сложна, насколько это звучит - и очень тяжелая математика. К счастью, его также можно легко разделить на множество потоков, поэтому лучший способ получить 30FPS - это перенести вычисления на графический процессор.

Другая вещь, которую нужно помнить, это «вокселы» и «кадры» - это графические термины. Подход к уравнениям (которые запоминаются как непрерывные функции) называется FDTD - Область конечных разностей во времени . Что по-английски означает выборку поля как дискретных точек во времени и пространстве.

...