Skip to content
Go back

The Asset Build System of 'Far Cry 5'

· Updated:

slides

拙訳

  • Engine As A Service
    • エンジンとツールの間をRPCで通信するように設計
    • 関心の分離により、適切な依存関係を構築できる
    • それぞれに合った技術選択ができる(エンジンにC++、ツールにC#)
    • 開発やイテレーションを高速化できる
  • エンジンに食わせるデータ
    • バイナリのみを使い、ツール用のデータは使わない
    • バイナリ化はアセット・ビルド・システムに任せる
    • 必要なら、JITコンパイルも行う
  • ビルドとは
    • ランタイムに最適化されたアセットを作る
      • ロードを高速化したり、プラットフォーム固有にしたり
    • 依存関係で紐づいた一連のビルド処理の集合
      • 依存関係により、並列にインクリメンタルにできる
  • コンパイル時の依存関係
    • ビルドする必要がある
    • 例:
      • 静的(事前にリスト化できるやつ)
        • コード:ソースファイル
        • パーティクル:定義ファイル
        • テクスチャ:画像ファイル
        • アニメーション:ソースファイル
      • 動的(静的な依存関係から解析されるやつ)
        • コード:インクルードしたヘッダファイル
        • パーティクル:頂点バッファ
        • テクスチャ:プロファイル
        • アニメーション:スケルトン
  • 実行時の依存関係
    • ビルド時に弱く繋がり、グラフのemittingを妨げない
    • 実行時に参照される関係
    • 例:
      • マテリアル ⇒ テクスチャ
      • ジオメトリ ⇒ マテリアル
      • ダイアログ ⇒ サウンドやフェイシャル・アニメーション
      • アニメーション ⇒ パーティクルやサウンド
      • パーティクル ⇒ テクスチャやサウンド
  • FC5のアセットビルドシステム
    • PPD(プラットフォームデータ準備)
      • 依存関係グラフを扱う
      • 物理仮想を問わず、すべてをノードで表現する
      • ノードにアクセスするのは一度だけ
      • ノードはプロセッサに束縛され、データと処理は分離される
      • ユーザーはコンパイル処理を記述するだけ
      • グラフの計算はフレームワークがやる
      • プロセッサはバージョン番号を持つ
      • ステートロード時、変更のあったプロセッサを破棄する
      • そのプロセッサに付与されたノードをすべて破棄する
      • 各段階はタスクとして並列化される:静的依存関係、動的依存関係、ビルド
      • 通知駆動式で、依存関係にあるものが終わってから新しいタスクを開始する
    • 例:パーティクル
      • .binファイル:パラメータ+頂点バッファ
      • 静的依存関係:.defファイル
      • 動的依存関係:トリミングされたジオメトリ
      • 実行時依存関係:テクスチャやサウンド
    • 例:設定
      • プロパティ表で編集した、パラメータセット
      • C++リフレクションで開示されたフィールド
      • 自動的にシリアライズできる
  • PPDの機能
    • 別プロセスでの実行
      • スレッドセーフでないコードを単体で実行するため
      • ちゃんとしてないコードを実行するため
      • ワーカーモードで起動して、RPCで情報をやり取りする
    • SUSPENDED