Arma 3 開発者が大規模パフォーマンス更新でAI並列化の課題に取り組む

BigGo コミュニティ部
Arma 3 開発者が大規模パフォーマンス更新でAI並列化の課題に取り組む

Bohemia Interactive の最新 Arma 3 アップデート2.20は、ゲーム業界で最も根強い課題の一つについて興味深い技術的議論を巻き起こした。それは人工知能とスクリプトシステムを複数のプロセッサコアで効率的に動作させることである。このアップデートはマルチスレッド化の改善により大幅なパフォーマンス向上をもたらしたが、コミュニティでの議論はAIの並列化が困難である理由についてより深い洞察を明らかにしている。

Arma 3 アップデート2.20の改善点:

  • マルチスレッド機能の強化
  • バージョン1.50.128419以降のパラメータシステムの刷新
  • リソース管理の向上を目的とした新しい Activities Group Manager ( AGM )
  • データストリーミングシステム( CPT )の改良
  • パーティクルシミュレーションスレッドの更新
  • コマンドラインパラメータの処理改善
メインスレッドとワーカースレッド間の関係を示すフローチャート。 AI のスレッド処理効率における技術的改善を反映している
メインスレッドとワーカースレッド間の関係を示すフローチャート。 AI のスレッド処理効率における技術的改善を反映している

AI並列化の根本的問題

根本的な問題は、ゲームAIシステムが従来どのように設計されているかにある。 Arma 3 のエンジンを含むほとんどのゲームエンジンは、AIアクターにすべてのワールド情報への完全かつ瞬時のアクセスを与えている。これにより、複数のAIユニットが同じゲームオブジェクトを同時に変更しようとすると競合が発生するため、ボトルネックが生じる。これは複数の人が同じ文書を同時に編集しようとするようなもので、適切な調整なしには混乱が生じる。

コミュニティの開発者たちは、この設計選択が論理的に見えるものの、実際には効果的な並列処理を妨げていることを特定した。AIユニットが弾薬数、ヘルスポイント、ワールドオブジェクトなどの共有リソースと相互作用する必要がある場合、システムはデータの破損を防ぐためにこれらの操作を直列化しなければならない。

AI オペレーションに関わる連続的なプロセスを詳述したフローチャートで、AI ユニット間での共有リソースの協調における複雑さを強調している
AI オペレーションに関わる連続的なプロセスを詳述したフローチャートで、AI ユニット間での共有リソースの協調における複雑さを強調している

AIスレッド化への代替アプローチ

議論では、他のゲーム開発者が検討できるいくつかの有望な解決策が明らかになった。一つのアプローチは、各AIアクターにワールドデータのローカルコピーを読み取り専用で与え、変更したい場合はリクエストを送信することを要求するものである。これにより、スレッド化の問題を引き起こす直接的な競合が排除される。

「各アクターが知っている世界のコピーを作成すれば、並列性を妨げるものは何もない。これは二次的なメモリを意味するが、これを制限することができる - 多くのことが起こっている場合、アクターがその一部を見失うのは理にかなっている。」

別の方法では、AIユニットが前フレームのデータから読み取りながら、現在のフレームの変更を書き込むフレーム遅延システムを使用する。これにより読み取りと書き込み操作の間に自然な分離が生まれるが、複雑な相互作用においてタイミングの課題を引き起こす可能性がある。

議論された主要な技術的アプローチ:

  • Actor-Copy モデル: 各 AI ユニットが独自のワールドデータのコピーを取得し、変更リクエストを送信
  • フレーム遅延システム: AI がフレーム N-1 から読み取り、フレーム N に書き込み
  • Fork-Join の置き換え: バッチ処理の代わりにキューベースのシステム
  • トランザクション境界: AI ユニット間の制御された相互作用ポイント
  • メモリのトレードオフ: より良い並列化のための RAM 使用量の増加
AI 並列処理におけるローカライズされたデータの概念を例示する、ワーカースレッドと協調して動作するメインスレッドの図
AI 並列処理におけるローカライズされたデータの概念を例示する、ワーカースレッドと協調して動作するメインスレッドの図

実世界での実装課題

コミュニティでの議論は、これらの解決策が単なる理論的なものではなく、実用的なトレードオフを伴うことを強調している。各AIユニットが独自のワールドビューを維持する場合、メモリ使用量が大幅に増加する。ゲームデザイナーは、ユニットが若干古いまたは不完全な情報で動作するため、AIの動作がより不正確になる可能性があることも受け入れなければならない。

Rust のようなプログラミング言語は、開発者に最初からデータの所有権について慎重に考えることを強制することで、これらのパターンをより利用しやすくしている。このコンパイラによる規律の強制は、従来のゲームアーキテクチャアプローチの再考を必要とするものの、自然に並列化可能な設計につながることが多い。

ゲーム開発への教訓

Arma 3 のパフォーマンス更新は、より広いゲーム業界にとってのケーススタディとして機能している。 Bohemia Interactive は12年前のエンジンの最適化において印象的な進歩を遂げているが、コミュニティでの議論は、開発初期に行われた一部のアーキテクチャ決定が引き続きパフォーマンスの可能性を制限していることを明らかにしている。

現代のゲームエンジンは、後方互換性とパフォーマンス要求のバランスを取ることがますます必要になっている。プロセッサのコア数が増加し続ける一方でシングルコアのパフォーマンスが頭打ちになる中、これらのスレッド化の課題はスムーズなゲームプレイ体験を維持するためにより重要になるだけである。

Arma 3 のアップデートをめぐる継続的な技術的議論は、コミュニティの専門知識がいかに複雑なエンジニアリング問題を明らかにし、ゲーム業界全体で同様の課題に直面している開発者に貴重な洞察を提供できるかを実証している。

参考: OPREP - PERFORMANCE OPTIMIZATIONS IN 2.20