Unity を検索

2021 年の Unity AI でのインターン報告:より良いゲームプレイの実現を目指して

2021年9月22日 カテゴリ: テクノロジー | 11 分 で読めます
picture of a mobile image
picture of a mobile image
取り上げているトピック
シェア

Unity の AI 部門では、ロボット工学、コンピュータビジョン、機械学習の分野における素晴らしい研究や製品に取り組んでいます。今夏、Unity にやってきたインターン生も、実際の製品に影響を与える重要な AI 関連のプロジェクトに取り組みました。

高品質かつバランスが取れたゲームをローンチすることは難しいものです。キャラクターの属性、レベルデザイン、ゲーム進行に伴う難易度上昇など、多数の変数が絡む場合、それはなおさら難しくなります。Unity が提供する製品の 1 つである、Automated Quality Assurance(QA)は、ゲームのバランスを取り、最適なパラメーターを見出すために、さまざまなシミュレーションを自動化して実行します。Automated QA を導入することでより短時間で QA テストの結果が得られるようになり、チームは開発フィードバックループを短縮し、チームの生産性を高めることができます。

2021 年の夏、Unity にやってきたインターン生は熱心に働き、Unity の活動に貴重な貢献をしてくれました。以下のセクションでは、インターン生たちのプロジェクトや経験についてご紹介します。

ビジュアルシミュレーション

Matthew Yang さん(学士(理学)、コンピューターサイエンス専攻、サイモンフレーザー大学)

Visual Simulations パッケージの目的は、理解や分析が容易なビジュアライゼーションを Unity で生成することです。ユーザーが記録するイベントを指定すると、このパッケージは記録されたすべてのイベントの位置に基づいてビジュアライゼーションを生成します。このパッケージでは、離散的なマーカーとヒートマップの 2 種類のビジュアライゼーションを生成することができます。

離散的なマーカーの場合、プレイスルー中に各イベントが記録されると、そのイベントが発生したシーンにマーカーが置かれます。イベントのマーカーは、イベントが発生した順序を示すように順次配置されます。以下の例では、プレイヤーが戦車を操り、お互いに弾を撃ちあって相手を打ち負かそうとするゲームを使っています。ここでは 2 つのイベントが視覚化されています。黄色のマーカーはプレイヤーが移動したことを示し、紫のマーカーはプレイヤーが弾を撃ったことを示しています。ビジュアライゼーションでは、プレイヤーが移動している経路や、どこで弾を撃っているのかを確認することができます。

ヒートマップでは、シーン内の個別のイベントを離散的なイベントマーカーで指し示すのではなく、位置ごとにイベントを集約します。ユーザーは、ヒートマップの粒度、頻度に対応する色、頻度の階級を分けるしきい値を設定して、ヒートマップをカスタマイズすることができます。せん滅戦モードの ML-Agents Dodgeball 環境をデモとして使用し、エージェントがボールに当たるたびにイベントが記録されるようにして、そのイベントが最もよく起きている領域を示すようにマップの色を分けるようにしました。

上のデモは、このパッケージと ML-Agents が互いにメリットをもたらすことを示しています。トレーニングされたエージェントは、イベントデータを自動的に生成してビジュアライゼーションを行い、ビジュアライゼーション自体が、さまざまなシナリオでのエージェントの振る舞いに関する知見を提供します。シミュレーションは、パラメーターの変更に伴うパフォーマンスの変化を簡単に確認しながら、異なる実行結果を比較することを可能にする強力なツールです。Visual Simulations パッケージは、より精緻にテストされ、よりバランスの取れたゲームを作成するためにも使えますが、ロボットシステムの航行性能を評価するなど、ゲーム以外の Unity の応用先でも活用することができます。

フレキシブルなテストプランナー

Oscar Lin さん(コンピューターサイエンス専攻、トロント大学)

現状の品質保証(QA)計画では、リニアなテストパスの作成がサポートされています。一方 QA チームは、セットアップやティアダウンなど、繰り返し実行されることが多い手順を含むテスト計画を持っていることがよくあります。リニアな表現をしている時にこのような繰り返しの手順があると、テスト計画の全体像が見えづらくなります。そこで私は、テストパス内のビジュアライゼーションを圧縮できる機能を備えたテストジェネレーターを実装しました。

a test generator with a feature that allowed for the compression of visualizations in a test path

Unity 用の Automated QA パッケージの Automator 機能を利用して、編集可能なパーツを使ったテスト生成を実装しました。個別のテストは簡単にカスタマイズできますが、テストを一つ一つ手作業で管理しなければならないため、テスト計画が膨張する問題が残っていました。 

私はこの問題に対処するために「Staged Run」と名付けたテストジェネレーターを実装しました。これは、テストの全体像を単純化した形で見せられるようにして、テスト全体が見えづらい問題を解決するテストジェネレーターです。最小限のコーディングで迅速にテストを生成することができ、重複する手順も見やすく表示する製品を作ることができました。

Automator テストジェネレーターと Staged Run ツールは、Unity 用の Automated QA パッケージをダウンロードすれば利用することができます。

Sprawl のメトリクス

Karen Chen さん(コンピュータサイエンス専攻、トロント大学)

Sprawl は、ローカルマシンとクラウド上で分散型の機械学習実験を行うための Unity の内部フレームワークです。他の機械学習システムを使う時と同様に、エンジニアは実験のパフォーマンスをより良く理解するために、Sprawl ジョブの実行状況をより詳しく知りたいと考えていました。しかし、Sprawl フレームワークではメトリクスが収集されていませんでした。そこで、私の夏のインターンシッププロジェクトとして、Sprawl ユーザーが自分の進めている機械学習ジョブをより良く理解できるように、すぐに使える直感的なメトリクスを提供することに注力しました。

out-of-the-box metrics in an intuitive form for Sprawl

私はまず、さまざまなデザインの選択肢を調べ、メンターの助けを借りてデザインドキュメントを作成しました。何度かドキュメントに修正を加えて詳細を詰め、チームでミーティングを開催してプロジェクト全体のデザインとアーキテクチャに関するフィードバックを得ました。私はデザインレビューの後、すぐに実装フェーズに移り、問題に対するソリューションの開発に専念しました。Sprawl のメトリクス機能は、Prometheus プロファイラーと Grafana ダッシュボードという 2 つの主要なコンポーネントで構成されています。Prometheus プロファイラーは、Sprawl を実行する各プロセスからメトリクスをスクレイピングし、その結果を事前設定済みの Grafana ダッシュボードに表示します。Sprawl のユーザーは、ローカルとクラウドの両方で、Sprawl 実行のパフォーマンスを Grafana 上でリアルタイムに見ることができます。また、ユーザーのニーズに応じて、さまざまなプロファイリングレベルを設定しました。

Game Simulation 用のコンピュートグラフの構築

Stephanie Wang さん(コンピュータサイエンス専攻、カールトン大学)

インターンシップでは、Unity に組み込まれている分散コンピューティングの実験用フレームワークとスケジューリングシステムを活用しました。目標は、ユーザーが Game Simulation で行うように、システムを使ってパラメーター化されたゲームのバランスを取ることで、このユースケースでの開発体験やシステム全体の働きの良しあしをはかることです。

スケジューラーは、大規模なシミュレーションをローカルおよびクラウドで構築するために開発されたフレームワークです。ユーザーがコンピュートグラフを設計し、ノード間のやり取りを取りまとめることができます。このフレームワークにより、計算やデータ処理をより柔軟に行うことができます。このプロジェクトは、新しいスケジューラーをテストし、コンピュートグラフの実装プロセスや、コンピュートグラフがエンドユーザーにとってどのように働くかについて、貴重な知見を得るものとなるでしょう。

私のインターンシップでは、このフレームワークを使って Game Simulation のワークロードを構築し、実行しました。このワークロードは、50 本のシミュレーションを同時実行する規模まで拡張することができ、より多くの計算リソースを割り当てることで、さらに拡張することができると見込まれています。この計画は、ローダーノード、シミュレーションノード、アップローダーノードという並行して動作する 3 種類のノードで構成されています。ローダーノードは、ゲームのパラメーターを格納した設定ファイルを読み込んで、それを解析します。そして、シミュレーションノードが各パラメーターをプルし、重要な統計情報を蓄積しながらシミュレーションを行います。最後に、アップローダーノードがデータを集約し、クラウドにアップロードします。

the simulation nodes pull each parameter and perform the simulations while accumulating important statistics

このコンピュートグラフは、1 つのコンテナーで最大 45 のシミュレーションノード、1 つのプールで 10 以上のコンテナーを持つように容易に拡張することができます。同時実行するノード数が増えると、すべてのシミュレーションを実行するのにかかる総時間が大幅に減少することがわかります。さらに、ユーザーは 1 つのコマンドラインフラグで、ローカルからクラウドへの実行を簡単に切り替えることができます。 

私は Unity エンジンを利用して、シミュレーションに使用するゲームを改善する機会を得ました。私は、メトリクスの蓄積や収集方法など、Game Simulation の機能の一部を再構築しました。データの集計は、新しいデータが到着するたびに集計するストリーム処理方式で行われました。Google Kubernetes Engine(GKE)に自分の計画をデプロイする時には、Kubernetes と Docker を使いました。Kubernetes のさまざまなコマンドに慣れておいたことが、コンピュートグラフのテストやデバッグの際にとても役に立ちました。

このプロジェクトでの一番の収穫は、Game Simulation のユースケースでスケジューラーがどれだけうまく機能したかという概念実証を提供できたことです。このフレームワークは、コンピュータビジョンやロボット工学など、他の多くのユースケースに対応できる可能性を秘めていると同時に、スケーラビリティもあり、クラウドへの移行も容易です。

私たちのチームに参加しましょう

Unity を使って挑戦的な人工知能プロジェクトに取り組み、実社会での経験を積むことに興味がある方は、AI 関連職の採用情報ページをご覧ください。また、学生の方向けには大学生向けの採用情報ページにて、募集中のポジションの情報を公開しております。Automated QA ツールを習得することで、自宅で経験を積むことも可能です。

2021年9月22日 カテゴリ: テクノロジー | 11 分 で読めます
取り上げているトピック