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 キー)。