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
物理エンジンにレイキャストを実装したときの覚え書きです。
球、直方体、円柱、円錐とレイ(半直線)の交点と法線ベクトルを求めます。
粒子法で3Dの弾性体シミュレーションを作りました。
CPUで物理演算、GPUでメッシュの変形を計算します。
>> Run simulation (Required Flash Player 18 or later)
>> View source code
いい加減AGALでシェーダを書くのが辛くなってきたので、
FlashのStage3Dで使えるシェーダ言語を作りました。
ついでにレイトレしてみました。
>> Open ray tracing demo (Required Flash Player 16 or later)
>> View source code
ようやくタワーディフェンスの開発に取り掛かりました。
今回は思い切って3Dです。
FP11とStage3Dの登場で、一部の人たちの間で密かに人気が上がっている3Dですが、
これを機に3D表示には欠かせない変換行列について考えてみることにしました。
FlashPlayer11から導入されたStage3Dという機能を使って、
前からやってみたかった3Dの剛体シミュレーションを作りました。
>> View on EL-EMENT (larger)
>> View on wonderfl
>> Source code (MIT License)