Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AAAタイトル開発と在宅勤務を支えるゲームエンジンエンジニアとテクニカルアーティストの取り組み

Cygames
December 17, 2021

 AAAタイトル開発と在宅勤務を支えるゲームエンジンエンジニアとテクニカルアーティストの取り組み

2021/11/14 Cygames Tech Conference

Cygames

December 17, 2021
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. 足立 和弥 Cyllista Game Engine ゲームエンジニア a Cyllista Game Engine

    開発においてテストやバイナリ配信の自 動化や、ゲーム開発のためのユーティリティツールの作成など開 発環境の整備を主に担当 自己紹介 岸川 貴紀 デザイナー部 テクニカルアーティストチーム スペシャリスト a リードテクニカルアーティストとして、エフェクトをメインにサ ポートしつつ、プロジェクト内のテクニカルアーティストチーム の舵切りや各種ツール開発・パイプライン開発を担当 3/68
  2. 在宅勤務を行う上での2大懸念点 ネットワーク環境の変化 ⚫ 会社の VPN 帯域は他プロジェクトの開発を阻害するような使い方はできない ⚫ 各家庭によって異なる回線環境での開発をサポートしなくてはいけない コミュニケーション手段の変化 ⚫

    個人間のコミュニケーションがすべてオンラインになる ⚫ 今まで経験したことのない環境下で開発を続けなくてはいけない ⚫ 情報のやりとりの仕方が変化しつつも、情報の伝達の抜けをなるべく防ぐ必要がある ⚫ 個々の環境においても継続するエンジンサポート ⚫ 在宅環境になる事で起こる事を含め、エンジンへのサポート体制 5/68
  3. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 6/68
  4. Cyllista Game Engine について ハイエンドコンソール向けの最高のゲームエンジン ⚫ Cygames 内製 ⚫ ハードウェアが最高のパフォーマンスを出せる

    ⚫ ゲーム開発者が最高のパフォーマンスを出せる 講演 ⚫ ダイナミックな変更を可能にするCyllista Game Engineのオープンワールド向けプロシージャル 背景制作ツールと描画機能[Cygames Tech Conference 2021] ⚫ Python による大規模ゲーム開発環境 ~Cyllista Game Engine 開発事例~ [CEDEC2020] ⚫ Cygames における次世代ハイエンドコンソール向けゲームエンジンの開発~最高のコンテンツを 支えるゲームエンジン~ [CEDEC2017] 7/68
  5. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 8/68
  6. オフィス勤務での Perforce 環境 ⚫ AWS 上に Perfoce Primary、社内ネットワーク内に Perforce Proxy

    を配置して運用している ⚫ 社内ネットワークは 10Gbps の回線となっていて、回線速度がネックにならないようにしている 社内ネットワーク(10Gbps) Perforce Proxy 開発環境 Perforce Primary 開発環境 開発環境 9/68
  7. 在宅勤務での Perforce 環境 単純に自宅から VPN を通して Perforce Proxy と接続した場合 ⚫

    10Gbps の帯域で接続できるわけではないので通信速度が出ない ⚫ VPN の帯域を圧迫してしまう 社内ネットワーク(10Gbps) VPN Perforce Proxy 自宅 開発環境 自宅 開発環境 開発環境 Perforce Primary 10/68
  8. 改善後の在宅勤務での Perforce 環境 ⚫ 自宅から社内の Peforce Proxy へ接続しても 10Gbps 回線の恩恵が受けられない

    ⚫ 自宅からは AWS 上の Perofrce Primary へ直接接続するルートを取ることにした 社内ネットワーク(10Gbps) VPN Perforce Primary Perforce Proxy 自宅 開発環境 自宅 開発環境 開発環境 11/68
  9. 自宅から VPN を通さず Primary Server へ接続するための設定 ⚫ インフラ部署との協力のもと対応を進める ⚫ Primary

    Server との通信は VPN を通さないルールを設定する ⚫ VPN を通らない通信のセキュリティを担保するため、 Primary Server への接続は暗号化する 社内ネットワーク(10Gbps) VPN 自宅 開発環境 Perforce Primary との通信 そ の 他 の 通 信 Perforce Primary 12/68
  10. Perforce の接続先の設定ミス検知 ⚫ 自宅から Perforce Proxy へ接続すること自体は可能 ⚫ 本人が気づくことなく VPN

    の帯域を圧迫することになる ⚫ 自宅から Perforce Proxy へ接続するような設定になっていた場合、変更を促すダイアログが出る 13/68
  11. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 14/68
  12. 在宅勤務でのアセットキャッシュの共有 単純に自宅から VPN を通して Proxy Server と接続した場合 ⚫ 10Gbps の帯域で接続できるわけではないので通信速度が出ない

    ⚫ VPN の帯域を圧迫してしまう 社内ネットワーク(10Gbps) VPN アセットキャッシュ サーバー 自宅 開発環境 自宅 開発環境 開発環境 19/68
  13. アセットキャッシュの効果検証結果から 十分な回線速度が確保できていればアセットキャッシュの恩恵を受けられる ⚫ 回線速度が 50Mbps を下回ると徐々にキャッシュの恩恵が薄れる ⚫ 結果、低速回線環境向けに対策が必要であることがわかった 低速回線環境向けの運用回避策 ⚫

    必要なアセットキャッシュをまとめて取得するバッチを配布する ⚫ 任意のタイミングで実行しておけば待たされる時間を運用で回避できる ⚫ 朝会中、昼休み中、ミーティング中など ⚫ 業務開始直後は朝会などミーティングが集中する時間帯なのでその時間に実行しておくことを推奨している 22/68
  14. 保留したアセットの受け渡しについて アセットをリリースせず保留しておき、 URI を生成する ⚫ cyllista://asset/unshelve-asset?hashkey=39f3f6e1fb5a4eeb8d357ca742d98681 ⚫ この URI はユーザーの操作によって変更が保留されたときに自動生成される

    この URI を他の作業者に伝えて実行してもらう ⚫ 保留されたアセットがその作業者の環境に展開される ⚫ 展開された変更内容は編集中の画面に即座に反映される ⚫ URI を伝える手段は Slack やメールなど URI を認識できるツールであればよい 26/68
  15. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 28/68
  16. クラッシュレポートのデータサイズについて ⚫ ゲームがクラッシュしたときの情報をクラッシュレポートとしてサーバーに集約 ⚫ クラッシュレポートのファイル内訳 レポートに含まれるファイル ファイルサイズ ダンプファイル 100MB ゲームのログファイル

    数100MB ~ 1GB超 開発ツールのログファイル 数100MB ~ 1GB超 合計 数100MB ~ 2GB超 ワーストケースで合計2GBを超えるので VPN の帯域圧迫も問題だがアップロードにかかる時間も問題 になる 30/68
  17. ⚫ ダンプファイルは調査コストとのバランスでサイズ変更はしない ⚫ ゲームのログファイルは最新のログから上限 100MB に制限 ⚫ ツールのログファイル最新のログから上限 100MB に制限

    ⚫ 合計 300MB 程度であればアップロードにかかる時間も許容できる クラッシュレポートのデータサイズ削減 レポートに含まれるファイル 削減後 削減前 ダンプファイル 100MB 100MB ゲームのログファイル 100MB 数100MB ~ 1GB超 開発ツールのログファイル 100MB 数100MB ~ 1GB超 合計 300MB 数100MB ~ 2GB超 31/68
  18. ユーザーが気づかないうちに VPN の切断、再接続が起きる VPN の切断が起こると通信処理中のツールが意図しない動作になってしまう ⚫ VPN が再接続すると IP アドレスが変わってしまい、切断時と同様にツールが意図しない動作になってしまう

    ⚫ この意図しない動作をしたときに「ツールの問題」なのか「VPN の問題」によるものなのかが非常に分かり難く原 因の調査に時間がかかってしまうので、切断、再接続が起きた時点で解決したい ⚫ ということで VPN の切断、再接続が起きたらユーザーに知らせて対応してもらうことにした 35/68
  19. VPN 切断と再接続の判定処理 VPNの切断判定方法 ⚫ VPN クライアントソフトが提供している CLI を利用 ⚫ 定期的に

    VPN のステータスをチェックして未接続の状態を検知したらダイアログでユーザーに通知している VPN 再接続の判定は以下の 2 パターン ⚫ VPN 接続後に IP アドレスが変わっていないか ⚫ VPN が有効になって以降、定期的に IP アドレスが変わっていないかをチェック ⚫ IP アドレスが変わっていれば VPN のクライアントが再接続処理したものとみなす ⚫ 外部のアドレス情報が取得できなくなっていないか ⚫ Python の socket.getaddrinfo() を定期的に実行し、gaierror 例外で失敗しないことをチェック ⚫ VPN 再接続処理中にアドレスの解決が失敗すると、その結果が Windows の DNS キャッシュ乗ってしまいア ドレスの解決ができなくなってしまうのではないかという見解のもと行っているチェック ⚫ VPN を再接続すると解決するようなのでこのケースも検知して VPN の再接続をユーザーに促す 36/68
  20. VPN 切断、再接続検知ダイアログ ⚫ VPN の切断や再接続が検知されると、接続確認とツールの再起動を促すダイアログが出現する ⚫ 作業中のデータを保存することと、VPN の再接続を行ってからツールを再起動するように促す ⚫ VPN

    の再接続が正しくできていない場合は再度ダイアログが出現する ⚫ ダイアログは突然出てくるのでキー入力で閉じてしまわないようにキー入力は受け付けないようにし ておく ⚫ 「なにかダイアログが出たけど消えちゃった」を避けたい 37/68
  21. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 38/68
  22. 背景 ⚫ 元々は、社内共有サーバーにツールを置き、そこから直接起動してもらっていた ⚫ ツールの安全性やプロジェクトを横断的にサポートするため ⚫ レンダーディスパッチャー(CI)で自動化する際に都合が良いため 問題 ⚫ 様々な回線速度・安定性のユーザー環境からアクセスするには、不安定・速度の低下が発生

    ⚫ ツールが落ちてしまうことや、DCCツール自体の起動速度にまで影響してしまっていた 対策・対応 ⚫ プロジェクトでは Perforce を使用しているため、その環境を利用する選択をした ⚫ ローカルから読み込むことになるので、ネットワーク速度の影響を受けない ⚫ Cyllista Game Engine のアップデートツールの実行時に同時に配布が出来る ⚫ 安全に配布が出来る ツール利用のネットワーク環境への対応 39/68
  23. Mayaのツールへの Perforce/ShotGrid 統合例 ⚫ プロジェクトでは、Perforce を使用している ⚫ その恩恵をワークフローに取り込む ⚫ 結果作業の簡略化や安全性を担保出来る様にする

    ⚫ Maya 上でファイルを開く際には専用のエクスプローラーを用意 ⚫ Perforce のチェックアウトや最新状態の取得も可能 ⚫ ShotGrid のステータス変更連携 ⚫ ShotGrid 上のアセットのタスクに対してステータス変更を加えることが出来る 40/68
  24. まとめ: ネットワーク環境の変化 VPN の帯域を圧迫しない環境の構築 ⚫ Perforce Server やアセットキャッシュサーバーとの接続は直接 AWS 上のインスタンスへ接続す

    ることで対応 各家庭によって異なる回線環境での開発をサポート ⚫ VPN の不意な切断、再接続を検知 ⚫ 低速な回線のために通信量を調整 Perforce の利用によりネットワーク通信をあまり考慮しなくて良い設計 ⚫ 大容量のものを扱う際に、ネットワークの回線を考慮しなくてよい ⚫ ファイル探索などによる連続的通信を行わなくてよく、安定してファイルアクセスが出来る 42/68
  25. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 43/68
  26. 運用面でカバーすべきところ 運用ルールをプロジェクトで定める ⚫ この際に、用語の統一性を必ず担保するように努める ⚫ 例えば、work -> 作業用、dev -> 開発向け、といったプレフィックスを使った運用

    ⚫ work_character -> キャラクター作業向け ⚫ dev_jira -> Jiraの関わる開発・開発向け 使用する単語は、組織内で共通用語とすることを前提に選定する ⚫ それぞれのツールに応じて、それぞれの単語ルールなどを設定しない ⚫ ゲームエンジンの中の言語からそれぞれのツールまで統一性を担保するように努めている ⚫ work という Prefix 語は、「ゲーム開発に関する作業を行う」という定義 ⚫ work_rig、work_light ⚫ dev という Prefix 語は、「ゲーム開発には直接には影響しないが、周辺のツールや運用の開発に関係する」と いう定義 ⚫ dev_outsource、dev_shotgrid 48/68
  27. コミュニケーションパイプライン(CP)と設計(CPD) CPとは ⚫ 各種メディア・コミュニケーションツールやサービスを連結させるパイプをまとめてシステムセットとして呼称 CPを考えるメリット ⚫ 情報の透過性が確保できるようになる ⚫ ゲームタスクのコメントをタスクツールの記録として残しつつ、チャットツールで通知を受け取られる ⚫

    同時に、ゲーム制作タスクに紐づいたアセットをタスクと接続しなおして、適切にアセット管理を行える ⚫ 同時に、ゲーム制作タスクのステータスをドキュメント上で確認できる CPDを考えるメリット ⚫ 「情報の蓄積」も適切な場所に行えるような運用を構築する事ができます ⚫ 新たにツールを選択する際に、ツールの選択によって、情報の滞りが起きてしまう悪循環を未然に防げる ⚫ そのツールは本当に必要なものか?別のツールの方が今の情報透過性を高められるのでは? 51/68
  28. ⚫ Jira の機能・プラグインで、Jira Automation というものがある ⚫ Jira の課題が特定のイベント時に Slack に自動通知されるように実装している

    ⚫ セキュリティのため、Webhook の情報が漏れてもアクセスできない様、IP 制限された踏み台サーバ ーを経由して、Slack に送信される Jira → Slack Jira Automation Slack Jira 踏み台 + Slack App 55/68
  29. ⚫ 可用性や SysOps の観点から、ShotGrid Events ではなく、サーバレス環境を構築する ⚫ ShotGrid Webhook (Open

    Beta) をトリガーに Lambda を実行 ⚫ サーバレスアプリケーションの構築は、AWS SAM を使用して一気に構築できる ⚫ ローカルテストをするための sam local invoke が非常に便利! ⚫ 実行コードは、プロジェクト標準でもある Python で全て実装 ⚫ ShotGrid Application として管理 ⚫ その他の各種 ShotGrid 自動化も実装 ⚫ AWS 対応時のポイント ⚫ SQS: Webhook の6秒タイムアウト対応 ⚫ DynamoDB: 冪等性への対応 ShotGrid → Slack API Gateway SQS Lambda ShotGrid Slack DynamoDB CloudWatch SMS Chatbot DEBUG SAM ShotGrid Application 踏み台 + Slack App 57/68
  30. ⚫ ShotGrid と Jira の役割の違い ⚫ ShotGrid: コンセプトアートやアセット、カットなどの制作管理に加えて外部パートナー管理などに活用 ⚫ Jira:

    ゲーム制作タスクをアジャイル的に管理するために活用 ⚫ ShotGrid と Jira を連携する内製アプリケーションを作成 ⚫ Task (Jira) ↔ Order Entity (ShotGrid)を連携する ⚫ Order Entity は、内部で実装したカスタムエンティティ ShotGrid ↔ Jira SQS Lambda Lambda (Jira内の自動化) Lambda Lambda ShotGrid Jira SQS API Gateway API Gateway ShotGrid Application ShotGrid Jira Bridge 58/68
  31. Cyllista Game Engine → Jira / ShotGrid / Slack ⚫

    Cyllista Game Engine へのエクスポート時に、外部連携ができるようになっている ⚫ 使用した Python モジュール ⚫ ShotGrid: ShotGrid Python API ⚫ Jira: Python Jira ⚫ Slack: Requests + Slack API ⚫ コメントなどエクスポート時に記載するフローを取る ⚫ リリース連絡忘れなどの途絶えを防ぐ ⚫ タスクにもリリース情報を記録してログ管理 ⚫ リリースしたアセット情報と Order Entity を紐づけ Cyllista Game Engine Release Dialog Slack Jira ShotGrid Maya 59/68
  32. CP構築の技術選定で気を付ける事 サービスの保守と要望が出た際の対応のしやすさで選定する ⚫ 公式の統合機能や、GUI が存在するプラグインを優先して検討する ⚫ 統合機能の担当者以外でも調整できる余地を残しておく CP全体を俯瞰してツール・サービスを選定する ⚫ 利用目的が重なってしまい二重・三重管理になってしまうことを避ける

    ⚫ ツール単体よりも、ビジネスロジック層を分析する ⚫ 部分的に導入できるかを検討し、時には切り捨てる事も考慮できると尚良い 特にセキュリティには気を配る ⚫ IP 制限や暗号化通信は前提として構築する ⚫ AWS に関しては、Cygamesではインフラチームと連携し構築している 60/68
  33. アジェンダ Cyllista Game Engine について ネットワーク環境の変化への対応 ⚫ Perforce での共有方法について ⚫

    アセットキャッシュの共有方法について ⚫ 低速回線や不安定な回線に対するフォローについて ⚫ DCC / エンジン回りのプロジェクトメンバー向けツール対応について コミュニケーション手段の変化への対応 ⚫ 在宅勤務時の各種情報共有とキャッチアップ性の改善・向上の取り組みについて ⚫ Cyllista Game Engine のゲーム開発者のサポート体制について 62/68
  34. 在宅勤務向けに開始した運用 相談窓口となるSlackチャンネルの運用 ⚫ Slack に相談窓口となるチャンネルを作成し、ツール班のメンバーが毎朝通話を開始する ⚫ 2021年8月以降はハドルミーティングに切り替え ⚫ 困ったことや相談事がある人はいつでもこの通話に参加してきてもOK ⚫

    ツール班のメンバーが対象 ⚫ 10:00 ~ 19:00 までは基本的にこの通話に参加したまま業務をする ⚫ ミュートにするのはOK ⚫ 集中したい時は通話を抜けるのはOK(用があれば通話に招待される) 63/68
  35. 参考: プロジェクトの Slack 運用ルール チャット ⚫ 返信が必要な場合は必ず対象者にメンションをつける ⚫ 自分宛のメンションには必ず返信する ⚫

    グループメンションにも必ず返信もしくはリアクションをする ⚫ 定時時間外でもメンションは付ける ⚫ メンションされる側が通知の制御を行う 通話 ⚫ 業務時間中は、いつ、誰に対しても Slack 通話を発信してよい ⚫ Slack 通話の着信は出れなければ出ないで OK ⚫ 雑談は意識して行う ⚫ 時間を決めて出入り自由の雑談用の通話を立てるなど 66/68