拙訳
レンダリングパイプライン
- グラフィックス:
- DepthPrePass (Full)
- BasePass(GBuffer生成)
- ShadowMap
- OcclusionCulling
- DirectLighting
- 平行:太陽光
- ポイント、スポット:タイルベース
- 乗算ライト:影や色を付ける
- Shading+Filter
- 間接光、フォグ、雲を適用
- 水彩イラスト効果:影色制御、輪郭線、フィルタ
- シェーダIDを深度値としてデプスバッファに出力して、デプステストを介して特定ピクセルのみでシェーダを実行する
- デプスバッファを使うので圧縮が効く
- EarlyZとHiZを活用できる
- Translucent
- Mixed Resolution Rendering
- PostProcess
- ブルーム+Glow(しきい値なしボカシ発光)
- TAAとSMAAのハイブリッド
- コンピュート:
- AsyncPrePass(DepthPrePassと並列)
- 現フレームに依存データのない処理
- 一部ポストプロセス、一部バッファ初期化、スクリーンスペースGI、ボリューメトリックフォグ、ボリューメトリック雲
- AsyncBasePass(BasePassと並列)
- デプスのみ必要な処理
- ライトカリング、スクリーンスペースシャドウ、スクリーンスペース反射
- ハイトマップシャドウ
- 中景以降のレイマーチによるキャストシャドウ
- AsyncAO(シャドウマップと並列)
- Scalable Ambient ObscuranceベースのSSAO
- ハイトマップAO
- AsyncDeferredShadow(OcclusionCullingやDecalと並列)
- キャストシャドウをスクリーンに展開
- AsyncTemporalAA
- TAAの非同期処理分
- AsyncPrePass(DepthPrePassと並列)
背景の間接光表現
- スカイライト+リフレクションIBL
- SSAO+ハイトマップAO
- スクリーンスペース・ディフューズGI
- AsyncPrePassにて、前フレームの直接光+エミッシヴから近中遠のデプスレイヤーごとの縮小ボカシを作成
- Shadingパスにて、法線やデプスを考慮してピクセルにブレンド
- スクリーンスペース・リフレクション
- AsyncBasePassにて:
- 前フレームのカラーと現フレームのデプスから、1/2サイズで真上を向く平面の反射を計算
- レイマーチベースでヒット位置計算、バイナリサーチでリファイン
- テンポラルな再投影+フィルタ
- ラフネスに応じてボケ幅を変化させるため、縮小ボカシバッファを作る
- 1/4サイズの半透明のデプスを別途用意して、SSR専用デプスとして統合する
- Shadingパスにて:
- ピクセル法線と真上を比較してフェードアウト
- 法線方向によってUVを歪ませる
- ラフネスに応じて、縮小バッファから補間
- ピクセル法線と真上を比較してフェードアウト
- AsyncBasePassにて:
背景の水彩イラスト効果
空気感表現
- Volumetric Fog
- Sun Volume Shadow
- 太陽のシャドウマップをレイマーチして、3Dテクスチャに累積して、ブラーをかける
- 太陽方向からの散乱を、角度のみを用いて表現
雲の表現
- 雲レイヤーの間をレイマーチして、厚みや濃さからライティングを計算
- 視線方向の濃度を求め、太陽方向にセルフシャドウをレイマーチする
- シャドウは解像度を1/8に下げて負荷対策
- 水平方向の分布・厚み・高さを3Dテクスチャで持ち、大まかな形状を決める
- Zに時間方向を格納して、時間変化を補間で表現する
- 詳細形状は3Dノイズテクスチャを参照する
- 視線方向の濃度を求め、太陽方向にセルフシャドウをレイマーチする
キャラクターのライティング・シェーディング
半透明描画の高速化
- Mixed Resolution Rendering
- 色変化の鋭さに応じて、描画される解像度を分ける
- 方法:
- 縮小バッファで半透明を描画する
- 縮小バッファ中で変化の大きい部分を検出する
- 縮小バッファをシーンに合成する
- 変化の大きい部分に対してステンシルマスクを生成する
- ステンシルマスク部分に画面解像度で半透明を描画する