Skip to content
Go back

『Tales of ARISE』におけるレンダリング技術と高速化

· Updated:

web

拙訳

レンダリングパイプライン

  • グラフィックス:
    • 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の非同期処理分

背景の間接光表現

  • スカイライト+リフレクションIBL
  • SSAO+ハイトマップAO
  • スクリーンスペース・ディフューズGI
    • AsyncPrePassにて、前フレームの直接光+エミッシヴから近中遠のデプスレイヤーごとの縮小ボカシを作成
    • Shadingパスにて、法線やデプスを考慮してピクセルにブレンド
  • スクリーンスペース・リフレクション
    • AsyncBasePassにて:
      • 前フレームのカラーと現フレームのデプスから、1/2サイズで真上を向く平面の反射を計算
      • レイマーチベースでヒット位置計算、バイナリサーチでリファイン
      • テンポラルな再投影+フィルタ
      • ラフネスに応じてボケ幅を変化させるため、縮小ボカシバッファを作る
        • 1/4サイズの半透明のデプスを別途用意して、SSR専用デプスとして統合する
    • Shadingパスにて:
      • ピクセル法線と真上を比較してフェードアウト
        • 法線方向によってUVを歪ませる
      • ラフネスに応じて、縮小バッファから補間

背景の水彩イラスト効果

SUSPENDED

空気感表現

  • Volumetric Fog
  • Sun Volume Shadow
    • 太陽のシャドウマップをレイマーチして、3Dテクスチャに累積して、ブラーをかける
    • 太陽方向からの散乱を、角度のみを用いて表現

雲の表現

  • 雲レイヤーの間をレイマーチして、厚みや濃さからライティングを計算
    • 視線方向の濃度を求め、太陽方向にセルフシャドウをレイマーチする
      • シャドウは解像度を1/8に下げて負荷対策
    • 水平方向の分布・厚み・高さを3Dテクスチャで持ち、大まかな形状を決める
      • Zに時間方向を格納して、時間変化を補間で表現する
      • 詳細形状は3Dノイズテクスチャを参照する

キャラクターのライティング・シェーディング

SUSPENDED

半透明描画の高速化

  • Mixed Resolution Rendering
    • 色変化の鋭さに応じて、描画される解像度を分ける
    • 方法:
      • 縮小バッファで半透明を描画する
      • 縮小バッファ中で変化の大きい部分を検出する
      • 縮小バッファをシーンに合成する
      • 変化の大きい部分に対してステンシルマスクを生成する
      • ステンシルマスク部分に画面解像度で半透明を描画する