VRChatで流体計算をするワールドを作ったので、経緯や技術解説などを書いていきます。
この記事は VRChat Advent Calendar 2018 の13日目の記事です
物理エンジンのジョイントを作るときにオイラー角についてかなり悩んだので覚え書きです。一般的な回転行列の表現方法としてよく使われるオイラー角ですが、その分かり辛さや性質の悪さから嫌われ者となることもしばしばです。ここではオイラー角の分かり辛い点や性質の悪さ、そしてそんなオイラー角と少しでも仲良くなるために必要な理解を書いておきます。
昔作ったActionScript 3.0向けの物理エンジンであるOimoPhysicsを全て書き直し、機能を大幅強化してJavaScriptから使えるようにしました。ようやく機能的にもAmmo.jsに対抗できるレベルになってきたかと思います。
デモは文字をクリックするかキー入力することで操作できます。Q
, E
キーで前後のデモと切り替えます。
>> Launch Demo (Click text on the left or press keys to control)
>> Open OimoPhysics GitHub page
SPH法とMPS法で流体シミュレーションしてみました。ついでにリアルタイム計算向けの手法を考えました。
デモは加速度センサーに対応しているので、スマートフォンから見ると面白いかもしれません。
* この記事は rogy Advent Calendar 2017 の記事です
※注:記事の続きにはgif動画が10個くらい貼ってあるので、全部読み込むと結構な通信量になります。一応注意してください。
粒子法で3Dの弾性体シミュレーションを作りました。
CPUで物理演算、GPUでメッシュの変形を計算します。
>> Run simulation (Required Flash Player 18 or later)
>> View source code
Flash+Stage3Dでオイル時計のシミュレーションを作ってみました。
流体は全てGPGPUで計算しています。
ドラッグで流体を混ぜられます。
スペースキーを押すと上下をひっくり返します。
>> Open simulation (Required Flash Player 18 or later)
>> View source code
以下は主に流体のシミュレーション方法についての解説です。
Stage3DとAGAL2を使ってGPGPUで流体シミュレーションを作ってみました。
元ネタはStable Fluidsです。
>> Open simulation (Required Flash Player 16 or later)
>> View source code