11.1K Views
January 17, 24
スライド概要
CEDEC2018 (Computer Entertainment Developers Conference 2018)で行われた講演
『正確なパフォーマンス情報を毎日蓄積!RE ENGINEタイトルを支える自動計測レポート』
で使用されたスライドです。
※本スライドには動画が含まれております。pptxファイルをダウンロードすることで動画込みでご覧いただけます
講演概要は以下のサイトをご覧ください。
https://cedec.cesa.or.jp/2018/session/detail/s5ab9cb40135ca.html
※CEDECの資料公開サイトCEDiLでも本資料が公開されています。
https://cedil.cesa.or.jp/
株式会社カプコンが誇るゲームエンジン「RE ENGINE」を開発している技術研究統括によるカプコン公式アカウントです。 これまでの技術カンファレンスなどで行った講演資料を公開しています。 【CAPCOM オープンカンファレンス プロフェッショナル RE:2023】 https://www.capcom-games.com/coc/2023/ 【CAPCOM オープンカンファレンス RE:2022】 https://www.capcom.co.jp/RE2022/ 【CAPCOM オープンカンファレンス RE:2019】 http://www.capcom.co.jp/RE2019/
正確なパフォーマンス情報を毎日蓄積! RE ENGINEタイトルを支える自動計測レポート 株式会社カプコン 齊藤 俊介・西井 崇也
本講演について • 写真 OK SNS投稿 OK • 講演資料は CEDiL に公開 • 自動的な安定性・パフォーマンスのデータ収集 について興味がある方向け 2
伝えたいこと • パフォーマンス情報 を自動で収集する方法 – RE ENGINE での取り組みをご紹介 • 自動プレイ機能 • 自動計測レポート • それらの機能と開発現場との関わり方 3
RE ENGINEとは • カプコン内製開発環境 – 日々 機能更新を行っている • 詳細は “CEDEC 2016:ラピッドイテレーションを実現するゲームエンジンの設計” • 『BIOHAZARD 7』と同時開発 – 以下のタイトルでも使用されている 『バイオハザード RE:2』 『デビルメイクライ5』 4
パフォーマンス・安定性の低下 • 処理落ち • メモリ不足 • ゲーム内のエラー • ゲームエンジンのエラー ひどい場合は製品として成り立たない。販売できない 5
パフォーマンス改善フロー 把握 • チェックプレイ(パフォーマンスデータ収集) • 担当者への報告 アセットとは・・・ ゲーム制作に必要な素材のことを指す 修正 • プログラムの最適化 • アセットの最適化 確認 • チェックプレイ(パフォーマンスデータ収集) • 担当者への報告 例) 画像データ、音声データ、 モーションデータ、3Dモデルデータなど 6
タイトルチェックプレイコスト の場合で考えると 通常 プレイ プラット フォーム オプション 8時間 4種類 6パターン PS4、Xbox One、 Steam、UWP 難易度3種類 DLC特典あり、なし 膨大なチェック時間 約200時間 定期的にチェックすると考えると・・・まずい! 7
膨大なチェックコストの問題点 • 開発に注力する時間の低下 – 面白さを高めるための時間 を増やしたい • モチベーションの低下 – 継続的なチェックプレイは 単純作業 になりがち – 自分の更新が影響しているとは限らない RE ENGINEを使用するタイトルでは何とかしたい! 8
RE ENGINEでの取り組み • チェックコスト削減のために自動化を進める – 自動プレイ(担当 : 西井) • パフォーマンス計測のための汎用的な自動プレイ • 簡単に自動プレイを作成するためのツール – 自動計測レポート(担当 : 齊藤) • 計測結果の蓄積 • 内製Webページでのパフォーマンス閲覧 • 問題発生時の通知機能 9
本日の流れ(アジェンダ) • 前半(自動プレイ)(担当 : 西井) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート)(担当 : 齊藤) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 10
自己紹介 • 西井 崇也 – 2015年 カプコン入社 – RE ENGINE AI モジュール • ステートマシン、ビヘイビアツリー、ナビゲーションを担当 – 機械学習 を利用した自動プレイに興味あり 11
RE ENGINEにおける自動プレイ 今までの自動プレイとの違い
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 13
自動プレイの問題点 • タイトル毎に特化した自動プレイ – 知識がないと作れない – ノウハウが継承されていない • 実装した人、関わった人しか使えない – プログラマ以外は使えない – 気軽に使えない 汎用的な自動プレイが求められている! 14
RE ENGINEでやりたいこと • 全てのタイトルで動作する自動プレイ – タイトル毎に動作をカスタマイズできるように • 扱いやすい自動プレイツール – プログラマ以外でも使えるように • パフォーマンス計測 – プレイ開始~終了までの継続的な 粗い パフォーマンス計測 – 特定の場所での 詳細な パフォーマンス計測 15
RE ENGINE自動プレイ動作の基本 • アクション という単位で動作 – 動作内容 と 終了条件 を設定 • アクションを並べて 自動プレイアセット を作成 ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ョ ン 自動プレイアセット タイトル画面からゲームに入るアクション プレイヤーを目的地まで移動するアクション ドアを開けるアクション ゲーム開始 終了 16
標準機能として用意するアクション • コントローラーキャプチャー – 人が入力したコントローラー内容を記録し、 そのまま再生する • 目的地点までプレイヤーを移動させる 目的方向にカメラを向ける – プレイヤー、カメラの位置・方向から パッド入力を逆算 • パフォーマンス計測 – 特定の地点で詳細にパフォーマンスを測定する 17
実際の動作(バイオハザード RE:2) 18
タイトル特有の動作 戦闘動作、ギミック への対応
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 20
タイトル毎のカスタマイズ • アクションをタイトル毎に作成 – 戦闘 • 銃、ナイフ、剣 など – デバッグ機能 カスタムアクションの作成 • プレイヤー無敵、敵一撃死 など – 移動 • ジャンプしながら移動、ワープ移動 など 目的に合ったアクションを作成する必要がある 21
カスタマイズ(デビルメイクライ5) • カスタムアクション – 移動アクション • 敵に出会ったら戦闘する(全滅させるまで) • 一定時間移動しなければワープ – ボス戦闘アクション • 戦闘中にパフォーマンス計測を行うため – タイトル、リザルトの操作 • ゲームステータスを見て、開始されるまで特定のボタンを押す – デバッグ機能を有効にするアクション ・敵一撃死、プレイヤー無敵などを有効/無効 タイトルのノウハウ 22
戦闘アクション(デビルメイクライ5) 23
カスタマイズ(バイオハザード RE:2) • カスタムアクション – 移動アクション • 一定時間後にワープ移動 • 運用方法 – マクロ機能 を用いて移動アクションを自動配置 RE ENGINEのマクロ機能 ・RE ENGINE機能を Python から呼び出す 煩わしい 手作業を 代替する手段 24
マクロ機能を使用して自動化 手動で自動プレイを作成 マクロ利用で自動プレイを作成 ゲームをプレイ ゲームをプレイ プレイしながら 手動で アクション配置 何も気にせずにプレイ、プレイヤーの位置を 自動で 記録 動作確認 ・ 修正 マクロ実行ボタン を押下 自動プレイが詰まれば 手動で 修正 移動アクションを並べた自動プレイアセットを作成 完成 完成 詳細は “CEDEC 2017:RE ENGINEでのゲーム開発を支えるMacro(Plug-in)機能の紹介” 25
RE ENGINEにおける自動プレイ • エンジンでの実装(標準機能) – 動作システム – 基本的な動作アクション – アクションを並べる機能 標準機能だけでも動作可能 • タイトルでのカスタマイズ – タイトル特有の動作を行うアクション作成 26
おまけ(バイオハザード7) • 既に発売されたタイトル 27
実装して良かった機能
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 29
実装して良かった機能 • 専用ツール – 各タイトルで仕様を統一した • 担当者以外でも自動プレイを簡単に実行できる • 参照機能 – 複数人での作業が可能になった 30
専用ツール(アクションを追加) ゲーム画面 専用ツール アクションリスト 31
専用ツール(キャプチャー) • コントローラー操作でアクション追加 32
専用ツール(再生) • マウス操作で再生 33
自動プレイが止まってしまう 34
専用ツールからアクション編集も可能 マウス操作で目的位置の変更が可能 クリック アクション詳細 タイトルが変わっても同じ操作で編集が可能 35
便利な機能 • 参照機能 – 他自動プレイアセットを入れ込むことができる 自動プレイ アセットA ア ク シ ョ ン ア ク シ ・・・ ョ ン ア ク シ ョ ン ア ク シ ョ ン ア ク シ ・・・ ョ ン ア ク シ ョ ン 自 ア 動 ク シ ・・・ プ レ ョ イ ン ア セ ッ ト 自 ア 動 ク プ ・・・ シ レ ョ イ ン ア セ ッ ト B 第二章をプレイする ア ク シ ョ ン A 第一章をプレイする 自動プレイ アセットC 自動プレイ アセットB ゲーム開始~終わり 36
参照機能の利点 • 自動プレイの使いまわしができる 自動プレイアセットA 作成者 ア ク シ ョ ン ア ア ク ク シ ・・ シ ョ ・ ョ ン ン 第一章をプレイする ア ク シ ョ ン ア ア ク セ シ ・・ ッ ョ ・ ト ン ア ア ク セ ッ ・・ シ ト ・ ョ ン B 第二章をプレイする 難易度 : Easy ア ア ク セ ッ ・・ シ ト ・ ョ ン 自動プレイ アセットD A ア ア ク ク シ ・・ シ ョ ・ ョ ン ン ア ア ク セ シ ・・ ッ ョ ・ ト ン B 作成者 ア ク シ ョ ン ア ク シ ョ ン A 自動プレイ アセットB 自動プレイ アセットC 難易度 : Hard ゲーム開始~終わり 37
どういう効果が得られたか • 専用ツール – 使い方を覚えれば、タイトルが変わっても使用可能 – 途中で詰まったときの編集が簡単に • 参照機能 – 小分けして自動プレイを定義することができる – オプションの違う自動プレイが簡単に作れる 38
前半のまとめ • 自動プレイ機能の課題を解決 – どのタイトルでも使用できる • 標準機能でもある程度動作可能 • 動作のカスタマイズも容易 – 使いやすい • 専用ツールで修正が簡単 • 参照機能を利用することで分担も可能 • 後半は、自動計測レポートシステムです。 39
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 40
自己紹介 • 齊藤 俊介 – 2014年度 カプコン入社 – RE ENGINE 開発 • • • • • ランタイム ツール CI 社内Webサービス VR製品マスターアップ などを対応 41
自動的な情報の蓄積 自動プレイを効率的に扱う為の取り組み
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 43
自動プレイを使う • 単純に各自の自席で実行してみた – 空き時間に実行 – 帰宅前に実行 利用者 自動プレイしたい場所 などを設定して放置 利用者のPC 44
空き時間に実行 状況を担当者に説明 問題が発生したときの データを担当者に渡す ・どこで問題が発生したか ・ダンプファイル ・どういう設定で自動プレイ をしていたか ・パフォーマンスデータ ・アセットデータ ・スクリーンショットなど 利用者 原因がわからない・・・ しかも、手元で再現しない 手元で再現しないので、 再現環境で調査する 担当者 ・クラッシュ ・処理落ち 担当者が調査中は ・表示バグ 作業できない・・・ などがといった問題が 発生している 利用者のPC 45
帰宅前に実行 場所:第一章 場所:第二章 プラットフォーム:コンシューマ機 プラットフォーム: PC プレイ方法:キャラクターA プレイ方法:キャラクターB ただ、出来れば設定したのとは異なる 場所・プラットフォーム・プレイ方法 設定した箇所の成功・失敗などの のデータも時間のある限り集めておきたい 情報を得ることが出来た 利用者 朝来てみたら、 帰宅する前に、自動プレイを クラッシュしている ループ再生するように設定 利用者のPC 46
自動プレイを個人で行うと • 問題が見つかると報告が手間 – 報告用のデータ収集と再現環境の提供が必要 – 問題が多発すると、不具合の報告で作業時間が減る • 自動プレイを設定して放置するときは、時間の 許す限り色々な設定で自動プレイを試したい 47
サーバーで自動実行するように データサーバー データベース NASサーバー 利用者 クラッシュ情報 パフォーマンス情報 アセットの情報 自動プレイを行った 結果をデータサーバー に保存 自動プレイ実行環境 自動プレイの設定の管理 https://jenkins.io/ 自動プレイPC 48
自動プレイの安定性向上 問題を早期発見・解決する為の取り組み
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 50
安定性の限界 • 自動プレイを安定させるのには限界がある – – – – プレイしていたら必ずクラッシュして先に進めない ゲーム進行に必要なキーアイテムが行方不明 ドアがバグで開かない 四章から先の 自動プレイ実行 クラッシュした データが取れない 地面が無い 一章 二章 三章 四章 五章 六章 七章 全章プレイアセット 51
リスク分散 • 自動プレイを章毎に細かく実行する – 例えば、第三章に致命的な不具合があって自動プレイ が成功しなくても、他の章は問題なく成功する 一章 アセット 二章 アセット 五章 アセット 六章 アセット 三章 アセット 四章 アセット 七章 アセット 52
細かく実行すると • サーバー上で多様な自動プレイが動くように – 第一章だけの自動プレイ – 第二章のキャラクターAを使った自動プレイ – 第二章のキャラクターBを使った自動プレイ • どこが成功して、どこが失敗しているのかを 素早く確認できる方法が必要になる 53
問題の可視化 54
どういった情報が見たいか • 成功・失敗 • エラー時原因の調査用のデータ – 自動プレイの動画 • エラー時の状況が一目でわかる – 実行時のログ • プログラムの不具合などが追える – クラッシュダンプ • プログラマが調査に使うデータ 55
問題の可視化(自動プレイ失敗) 56
問題の可視化(自動プレイ失敗) 57
問題が簡単に確認できるように • タイトルの問題が発生する場所が一目でわかる – 各プラットフォーム、各章、各プレイ方法の情報 • Webサイトを見れば動画などの情報をもとに 原因がわかるように 58
問題をすぐに修正してもらう為に • Webサイトを定期的に見ることを習慣化 するのは難しい • 問題を自動検出して担当者に通知する機能を 用意した 59
自動通知の流れ 自動プレイに失敗しました 第三章で敵データのエリア設定が セーブデータを扱うプログラムで、想定外の 自動通知する内容を設定 仕様変更などで進めなくなった 行われていません データ量になりました 可能性があるので確認してください 設定を行ってください 最大データ量を見直してください ・このエラーが発生したら、Aさんに通知 C 利用者 ・このログが出力されたら、Bさんに通知 (アーティスト) B (プランナー) 自動プレイ実行環境 3Dモデルアセットのデータ形式が古いです A 再出力を行ってください (プログラマ) https://jenkins.io/ 自動プレイPC 60
自動通知することで • アセットの不具合を担当者が早期発見できる ようになった • 結果としてタイトル内の問題が早期解決、 自動プレイの安定性も上がった 61
まとめ(自動プレイを安定させる) • リスク分散 – 自動プレイを細かく分割して作る • 問題の早期解決 – 発生している問題を素早く確認できるWebサイト – 問題をすぐに担当者に把握してもらう為の自動通知 62
用途に応じたパフォーマンス情報 蓄積したデータを使いやすくする為の取り組み
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 64
パフォーマンス情報が抱える問題 • パフォーマンス情報を見るのは大変 – プログラム全体の流れを知らないと見れないので、 非プログラマが見ても状況が把握できない – プログラマでも、色々なデータを交えて状況を把握し なければならないので手間がかかる 65
概要画面 66
プログラマ向け画面 • パフォーマンス結果などもWeb上で見えるよう に 67
パフォーマンス確認を簡単に • シンプルな概要表示を作ることで、 非プログラマでもパフォーマンス状況が ざっくりと把握できるようになった • Webサイト上で手軽にパフォーマンスを確認 できるようにした 68
複雑な原因を調査する場合に • プログラマのパフォーマンス改善は、 佳境を迎えるとよりハードウェア寄りの 詳細なデータが見たくなる – 実行命令 – スタックトレース – キャッシュ状況など 69
ハードウェア寄りの詳細なデータ • 各プラットフォーム固有のツールを使う – 現世代のゲーム機は、詳細なパフォーマンスが取得で きるプロファイリングツールが用意されている • Web上からワンクリックでダウンロードできる ように 70
今までご紹介したデータの区分け 概要画面 • 手軽にタイトル全体の状況を確認できる • 非プログラマでも概要が分かる 詳細画面 • プログラマ向けのCPU/GPU/Memory/重要変数の値などが手軽に見える • オブジェクト数などのタイトル固有のデータを見ることが出来る プラットフォーム固有のツール • ハードウェア寄りの詳細な情報を見ることが出来る • 使うのにある程度スキルが必要だが、複雑な問題を調査できる 71
活用されるパフォーマンス情報の 届け方 蓄積したデータを使ってもらう為の取り組み
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 73
パフォーマンス問題は実態を把握し難い • ゲームは沢山の要素の集合体 – 何十人、何百人ものゲーム開発者が、 何千、何万という要素を追加する • パフォーマンスが低下したら・・・ – 誰のどの要素が問題なのかわからない – 個々の要素では問題なくても、要素同士を 組み合わせたときに問題になることがある 74
問題がある要素を明確にする • 個々の要素が、どれだけパフォーマンスを 低下させていいのか、限界を明確にする • 事前に設定した限界を超えていたら、 担当者に自動で通知する 75
自動通知の流れ 自動通知する内容を設定 セーブの処理が、1ミリ秒以上かかっています 物理オブジェクトが10万以上存在していました セーブに1ミリ秒以上の処理は許されないので、 これでは60FPSが担保出来ないので減らしてください ・あるプログラムがXXミリ秒以上時間がかかっ 改善してください ていたら、Aさんに通知 C 利用者 ・あるオブジェクトがXX以上存在したら、Bさん (アーティスト) B 自動プレイ実行環境 に通知 (プランナー) テクスチャが2GB以上読み込まれています ロードが長い上にメモリ不足で A クラッシュする可能性がありますので、 (プログラマ) 減らすか解像度を落としてください https://jenkins.io/ 自動プレイPC 76
実タイトルでの運用コスト 取り組んでみようと思われた方へのご参考に
アジェンダ • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 78
デビルメイクライ5での運用コスト • デビルメイクライ5 – 機材コスト – 導入コスト – 維持コスト 79
機材コスト • 専用PC4台、コンシューマ開発機4種(各1台) • 専用PCは簡単に増やせる – プログラム一つ実行するだけ • より早く結果が欲しいときは、深夜に誰かのPC を専用PCとして登録して、つけっぱなしで帰っ てもらう 80
導入コスト • 初期導入コストは15人日程度 – 10人日 • 自動プレイアセットに必要なアクションを全て実装 – 5人日 • ゲームの開始から終了までの流れを全て自動化 – 自動計測レポートでパフォーマンスが収集されるように 81
維持コスト • 1ヵ月に2人日程度 – エラーが発生していないことを確認 • 自動プレイがゲーム開始から終了まで 全て安定して実行できているか – 仕様変更によって進めなくなっていた • 自動プレイの修正 – 自動指摘の内容の調整 • 誰にどういった問題を送るか 82
維持コストを抑える為に 問題把握 • 問題がある箇所を手軽に確認できるWebサイト • 問題をすぐに把握できる自動通知 原因究明 • 問題が発生した際に調査に必要なデータを保存 自動プレイ実行環境 • Webサイト上で簡単に確認できる 問題の自動通知 • 部分変更が容易な自動プレイ作成ツール 修正 利用者 https://jenkins.io/ 自動プレイPC 83
本講演では以下の内容を紹介しました • 前半(自動プレイ) 1. RE ENGINEにおける自動プレイ 2. タイトル特有の動作 3. 実装して良かった機能 • 後半(自動計測レポート) 1. 自動的な情報の蓄積 2. 自動プレイの安定性向上 3. 用途に応じたパフォーマンス情報 4. 活用されるパフォーマンス情報の届け方 5. 実タイトルでの運用コスト 84