3次元の水 — MLS-MPM (C++ / WASM, GPU なし)

webgpu-ocean を、GPU を使わず C++ だけで。 物性・描画の定数まで本家に合わせてあります(格子1マス=1、dt 0.20、重力 0.3、剛性 3、rest 密度 4、動粘性 0.1)。
MLS-MPM:粒子は 3×3×3 の格子に質量と運動量を撒き(P2G)、格子から測った密度で圧力を出し (Tait, 指数5・負圧は捨てる)、格子で重力と壁を掛け、また集め直す(G2P)。 近傍探索が要らない O(N) なので CPU でも回ります。
描画は画面空間の流体レンダリング:粒子を球として深度だけ撒き → 双方向フィルタを4往復 → 深度から法線を復元 → 厚みで吸収(Beer-Lambert)→ フレネルで夕空の反射と屈折を混ぜる。 水の青は色を塗ったのではなく、赤から先に吸われた結果です。
水面をクリックすると叩けます。⛶ フルスクリーン(または F キー)。

読み込み中…

ソース: github.com/yomei-o/umi_emu_cpp