💨 VFX Диму — Стабільні Рідини

Симуляція диму в реальному часі методом стабільних рідин Стама (неявна дифузія + адвекція + проєкція). Обмеження завихреності додає закручування. Інтерактивне перетягування мишею генерує дим.

VFXІнтерактивна
Наведіть або перетягніть, щоб збурити / спрямувати дим до курсора · P пауза · R скинути

Як це працює

Симулятор реалізує 2D сіткову стабільну рідину на сітці 96×50. Кожен крок симуляції: (1) застосування сил миші до поля швидкостей, (2) дифузія швидкості методом Гаусса-Зейделя, (3) проєкція для забезпечення нестислуваності, (4) адвекція швидкості напів-лагранжевим трасуванням, (5) обмеження завихреності, (6) дифузія та адвекція густини диму.

Нав'є-Стокс: ∂u/∂t = -(u·∇)u + ν∇²u + f, ∇·u = 0 Адвекція: q(x,t+dt) = q(x - u(x)·dt, t) [напів-лагранжева] Проєкція: ∇·u = 0 через ∇²p = ∇·u*, u = u* - ∇p Завихреність: f_vc = ε(η × ω), η = ∇|ω|/|∇|ω||

Часті запитання

Що таке стабільні рідини?

Стабільні рідини — це метод Джоса Стама (1999) для безумовно стабільної симуляції рідини в реальному часі. Він використовує неявну часову інтеграцію для дифузії та напів-лагранжевий крок адвекції, що ніколи не стає чисельно нестабільним незалежно від кроку часу.

Що таке рівняння Нав'є-Стокса?

Нестислувані рівняння Нав'є-Стокса описують рух рідини: ∂u/∂t = -(u·∇)u + ν∇²u + f, з умовою ∇·u = 0 для нестислуваності. Члени представляють адвекцію (перенос течією), дифузію (в'язкість) та зовнішні сили.

Що таке напів-лагранжева адвекція?

Напів-лагранжева адвекція відстежує кожну комірку сітки назад у часі вздовж поля швидкостей, знаходячи точку походження рідини, а потім інтерполює густину/швидкість у тій точці. Метод безумовно стабільний, але вносить чисельну дифузію.

Що таке крок проєкції у симуляції рідини?

Крок проєкції забезпечує нестислуваність (∇·u = 0) шляхом розв'язання рівняння Пуассона для тиску та віднімання градієнта тиску від поля швидкостей. Це запобігає накопиченню або зникненню рідини, зберігаючи загальний об'єм.

Що таке обмеження завихреності?

Обмеження завихреності протидіє чисельній дифузії напів-лагранжевої адвекції. Воно виявляє регіони з високою завихреністю (ротор швидкості) та застосовує сили для концентрації обертального руху, виробляючи реалістичніший дим і вогонь.

Що таке чисельна дифузія у симуляції рідини?

Чисельна дифузія — штучне розмиття від дискретизації рівнянь адвекції. Напів-лагранжеві методи з білінійною інтерполяцією особливо схильні до неї, через що дим виглядає розмитим з часом без коригувальних технік.

Як адвектується густина диму у стабільних рідинах?

Густина диму — пасивний скаляр, що переноситься полем швидкостей. Кожен крок: (1) додати сили, (2) дифузія швидкості, (3) проєкція, (4) адвекція швидкості, (5) ще проєкція, (6) адвекція густини. Густину множать на коефіцієнт дисипації для згасання диму.

Яка роздільна здатність сітки потрібна для симуляції рідини в реальному часі?

Стабільні рідини в реальному часі використовують сітки 64×64 до 256×256 для 60 кадрів/с у JavaScript. Реалізації на GPU (WebGL) можуть досягати 512×512 і більше. Вища роздільна здатність захоплює більше турбулентних деталей.

Що таке метод Гаусса-Зейделя у симуляції рідини?

Ітерація Гаусса-Зейделя розв'язує лінійні системи неявної дифузії та проєкції тиску. Кожна комірка оновлюється за останніми значеннями сусідів у повторюваних проходах до збіжності — зазвичай 4-20 ітерацій на кадр.

Як працює сила обмеження завихреності?

Завихреність ω = ∇×u обчислюється в кожній комірці. Градієнт |ω| вказує напрямок до центрів вихорів. Сила f = ε(η×ω), де η = ∇|ω|/|∇|ω||, штовхає рідину обертатися навколо існуючих вихорів, відновлюючи втрачений ротор.