1日目として書かれたものです。波って良くないですか?唐突なんですけど、波っていいですよね。最近授業で波に関わる内容をたくさん扱っているのもあって、ちょっと気になっています。あと、作品を作る際に何らかのインタラクションが欲しいなあって気分になるんですが、物理法則に則った動きが欲しいなとも思っていました。その時に、波のような動きとかちょっと面白いんじゃないかって思ったんです。いうことで、Unityで波のシミュレーションをしたくなったわけです。シミュレーション何が必要かというわけで、シミュレーションに何が必要か考えました。その結果、コアになりそうなのは以下だなあと思いました。離散化した波動方程式をシミュレーション領域でリアルタイムに計算しきるための並列計算1つ目は純粋に数学をやるという話なのですが、2番目はもうちょっと細分化して考える必要がありそうです。使ってGPUでゴリゴリ頑張る方法を試してみることにしました。波動方程式の離散化ネットで検索するとこれとか、結構たくさん資料があります。それを参考にしつつ、軽く解説します。連続な波動方程式はこれです。これを、離散化することを考えます。2階微分の離散化は、テイラー展開を使って考えることができるようです。以下のように分解します。その2式を足してあげると、下のような式が出てきます。これで、2階微分を離散化することができました。xについても同様にしてあげて、最初の式に代入し整理してあげると、今回使う式が出てきます。いう2ステップ前までのデータがあれば計算を進めることができます。今回はこれの2次元版を使っていきます。するRenderWave.csの4つです。ステップ幅(δx,δy,δt)、波速(c)などのパラメーターを設定する。用意し、初期値を入れてあげる。いった感じになっています。ついては、明示的に破棄する必要があるので、気を付けて下さい。result;}ここでは実際に、離散化した波動方程式の計算をマスごとに行っています。"Diffuse"}最終的に、ここにで計算結果を表示してあげます。シミュレーションの空間ステップから表示するキューブのscaleを求めて、変位とインデックスからpositionを計算して、ワールド座標に変換する行列を定義してあげます。それで各オブジェクトを変形してあげれば波の可視化ができます。最後に、以上のスクリプトを上のように適当なオブジェクトにアタッチします。Instancingをonにするのを忘れないようにします。2019はい、完成です。これが見たかったんです!今後の課題とはいえこいつ、油断すると発散するんですよね...。今度はちゃんとエネルギーの保存とかにも気を付けられるようにしたいですね。upLoginユーザーは見つかりませんでした。