Realtime Fluid Experiment
Introduction
Unityを用いてリアルタイムでの流体表現の実験を行いました。
Stable Fluids
リアルタイムにおける流体表現では、Stable Fluidsという手法がよく用いられます。Stable FluidsはJos Stam氏が1999年にSiggraphにて発表した格子法による流体シミュレーションです。GPUを用いた並列計算によって高速にシミュレーションを行うことができるため、リアルタイムでの動作が必須なゲームやアプリケーションにおいて広く利用されてきました。
今回は、このStable Fluidsを3Dに拡張して流体シミュレーションを行いました。Compute Shaderを用いて実装しているため、リアルタイムで高速に動作します。
引用:GPU Gems — Chapter 38. Fast Fluid Dynamics Simulation on the GPU
Marching Cubes
今回実装した流体シミュレーションは格子法による実装のため、シミュレーションの結果は3次元テクスチャに格納しています。3次元テクスチャをレンダリングする手法はいくつかありますが、今回はMarching Cubesを用いたメッシュ化を使用しました。
Marching Cubesはスカラー値を持つボクセルデータを元にメッシュを生成するアルゴリズムです。
引用 : Polygonising a scalar field (Marching Cubes)
Lighting
ライティングは、全てUnity HDRP標準のライトとマテリアルを使用して行っています。UnityでのHDレンダーパイプライン (HDRP) では、完全な物理ベースによるレンダリングが実装され、非常にクオリティの高い絵をリアルタイムでレンダリングすることができます。また、マテリアルには多くのタイプが存在し、Subsurface Scattering (SSS) などの高度なライティングを実現できます。今回の実験ではMarching Cubesによってメッシュを生成しているので、ライティングをHDRPに任せることができます。
ライトやマテリアルを調整してレンダリングした結果が以下になります。
Reference
・Stable Fluids
・Real-Time Fluid Dynamics for Games
・GPU Gems — Chapter 38. Fast Fluid Dynamics Simulation on the GPU
・Marching cubes: A high resolution 3D surface construction algorithm
・Polygonising a scalar field (Marching Cubes)