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