Unity でブラックホールのシミュレーション

GPGPUの練習を兼ねて,Unityでブラックホール(っぽいの)をリアルタイムシミュレーションしてみました.

結果

説明

今回はUnityのComputeShaderを利用して並列処理を実装しましたが,CUDAに移植中なので,移植が完了したら別に記事を上げる予定です.
(C#でCUDAを記述する為に,managedCUDAというライブラリを使用しています.)

粒子の数は,上の動画では2の16乗(65536)個ですが,2^20乗でも遅延なく動きました.
GPUはGTX950を使用しています.

以下はComputeShaderのソースです.

結局やっているのは万有引力の計算だけです.しかもかなり省略してます.

CustomShaderとかUnity側のコードは面倒なので載せません.
本当はクソ汚いソースコードを見られたくないだけです.

Unity側やってることはComputeShaderに粒子の初期座標を与えているだけです.
上のComputeShaderではそのデータをもとにフレーム毎の計算を行っています.
そのデータをCustomShaderが受け取って,粒子を描画しているという感じです.
データのやり取りはComputeBufferを介して行っています.

CUDAに移植

移植してます.ぶっちゃけこっちが一番やりたいことで,ComputeShaderはオマケです.

[追記]CUDAに移植した.

全体的に雑.
粒子数:2^20個
ComputeBufferのポインタをそのままCUDAのKernelに渡せるようになったら終わり.
CUDAに移植したら別に記事を書く予定だったけど,面倒なので追記で済ませる.

Posted on