🫗

10万個のボールで物理するともはや流体

2023/04/09に公開

海外の方のYoutubeの動画のものをUnityに移植しました。リリースからWindowsIL2CPPかmonoビルドをダウンロードしたら遊んべます。WebGLは未対応です。
参考元
今回のレポジトリ


※肖像画の人はラプラスです。高画質版はレポジトリかTwitterで見てください。

アルゴリズムはほぼ動画の通りなのでYoutubeを見てもらった前提で、移植時の工夫を紹介します。

マルチスレッド対応

オブジェクトを同サイズのグリッドに配置して、周辺のマスから衝突するオブジェクトを検索しています。マルチスレッド対応するためには違うスレッドで同じオブジェクトを変更しないようにする必要があります。これは言い換えれば、同時に処理するマスは縦横どちらかが2マス以上離れている必要があるということです。
動画での方法は2×スレッド数[列]に分割して、分割したものを一個飛ばしで同時処理することマルチスレッド対応していますが、この方法を用いるには分割数をあらかじめ知らなければなりません。しかしUnityでの実装ではBurst/JobSystemを使うことになり、分割数は事前にはわからないので、3列ごとに分割して3列をまとめて処理することで対応しました。

Discussion