見出し画像

Realtime Fluid Experiment

Introduction

Unityを用いてリアルタイムでの流体表現の実験を行いました。

Stable Fluids
リアルタイムにおける流体表現では、Stable Fluidsという手法がよく用いられます。Stable FluidsはJos Stam氏が1999年にSiggraphにて発表した格子法による流体シミュレーションです。GPUを用いた並列計算によって高速にシミュレーションを行うことができるため、リアルタイムでの動作が必須なゲームやアプリケーションにおいて広く利用されてきました。

今回は、このStable Fluidsを3Dに拡張して流体シミュレーションを行いました。Compute Shaderを用いて実装しているため、リアルタイムで高速に動作します。

画像2

引用:GPU Gems — Chapter 38. Fast Fluid Dynamics Simulation on the GPU

Marching Cubes
今回実装した流体シミュレーションは格子法による実装のため、シミュレーションの結果は3次元テクスチャに格納しています。3次元テクスチャをレンダリングする手法はいくつかありますが、今回はMarching Cubesを用いたメッシュ化を使用しました。

Marching Cubesはスカラー値を持つボクセルデータを元にメッシュを生成するアルゴリズムです。

画像3

引用 : Polygonising a scalar field (Marching Cubes)

Lighting
ライティングは、全てUnity HDRP標準のライトとマテリアルを使用して行っています。UnityでのHDレンダーパイプライン (HDRP) では、完全な物理ベースによるレンダリングが実装され、非常にクオリティの高い絵をリアルタイムでレンダリングすることができます。また、マテリアルには多くのタイプが存在し、Subsurface Scattering (SSS) などの高度なライティングを実現できます。今回の実験ではMarching Cubesによってメッシュを生成しているので、ライティングをHDRPに任せることができます。

画像4

引用 : The High Definition Render Pipeline: Focused on visual qualityHD レンダーパイプライン:ビジュアル品質に重点を置いたパイプライン — Unity Technologies Blog

ライトやマテリアルを調整してレンダリングした結果が以下になります。

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)

いいなと思ったら応援しよう!