ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Unity】WebGLやAndroidでも動く互換性のあるGPUパーティクルを作ってみた。

www.youtube.com

ライブデモ

app.nekodigi.com
10万パーティクル程に減らしてありますが、機器によっては読み込みが非常に遅いので注意してください。

GPUパーティクルについて

パーティクルは大量の物体を表示して、様々な視覚効果を作るときに使われます。しかし、大量の物体を一つずつ表示するとあまりにも遅くなってしまいます。そこで、同時に大量の処理を行うことができるGPUを使うと、何百倍、何千倍の速さで表示することが出来るのです。
この動画では、1000万個のパーティクルとCurlノイズというものを使って火炎を表現してみました。

互換性の確保

Unityには柔軟な計算に対応するComputeShaderという機能があるのですが、実はWebGLOpenGL ESのバージョンが2.0までなので動かすことができません。そこで、画像に位置情報や速度情報を保存して互換性の高いShaderLabを使って計算することにしました。
計算に使う頂点の数が制限を超えてしまう、精度の高いデータ型が対応していないなど様々なトラブルも発生しましたが、データを分割したり別の型で初期化することで解決しました。
※互換性は確保してありますが、機種ごとに実行速度は大きく変動するので注意してください。

ダウンロード

github.com

参考文献

今回のプロジェクトはこれらのプロジェクトを元に製作しています。
github.com
github.com