Open6
Volumetric Fog(知見倉庫)
Volumetric Fogに関する知見スレです。
コロプラ社のグラフィックス技術デモ開発「PRINCIPLES」ではVolumetric Fogを採用している(手法までは分からず)。
Raymarchingによる実装解説書いています
アサシンクリード4のVolumetric Fogアプローチ
1.256x256にダウンサンプリングしたR32Float精度のESMカスケードマップを生成
- 低解像度のサンプリングのため、キャッシュヒットが良い
- ダウンスケール時ブラーフィルタリングをおこなうことで、低周波数のみ考慮され、ちらつきが軽減する
2.3Dテクスチャに密度情報を格納(RGB=散乱光の色、A=密度、サイズ=160x90x64(128)程度の低解像度)
- 事前にすべての座標に対する散乱度を計算しているため、RaymarchingのStepごと遮蔽判定をとる必要がない
- Light Scattering(ESMによる減衰、一定の環境光、複数ポイントライトの適用)
- Perlinノイズによる疑似風アニメーション
- メインライトの方向に沿ったグラデーション
3.2で生成した3Dテクスチャを2DComputeShader上でRGBAごとDepthをもとに積分し、散乱度をUnorderedAccessViewに書き込み
4.Beer-Lambert’s 方程式を用い、3のカラーに散乱乗数(アルファ)を適用し、最終出力カラーを計算する
処理速度:XboxOneで約1.1ms
上記手法のインスピレーション:Light Propagation Volumes in CryEngine 3
画像例:
こちらも同様3Dテクスチャをリアルタイムに生成する手法の解説
Godot EngineのVolumetric Fog解説