7.4K Views
January 17, 24
スライド概要
CEDEC2018 (Computer Entertainment Developers Conference 2018)で行われた講演
『アニメーションワークフロー改善のためのRE ENGINEとDCCツールのアニメーション同期再生システム』
で使用されたスライドです。
※本スライドには動画が含まれております。pptxファイルをダウンロードすることで動画込みでご覧いただけます
講演概要は以下のサイトをご覧ください。
https://cedec.cesa.or.jp/2018/session/detail/s5ab0d9ec075d4.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とDCCツールの アニメーション同期再生システム 株式会社カプコン 内山 創一
■自己紹介 弊社カプコンにて開発しているゲームエンジンである RE ENGINEのアニメーションシステム担当 DCCツールに関しては初心者 2
■資料は翌日に公開予定 CEDiLにてダウンロード可能です。 ■講演内容について 前半(システム紹介)・後半(実装方法) DCCツールは、Maya®を前提として話を進めます ※以降は単純にMayaと記載します。 3
本講演の目的 ■アニメーターのためのワークフロー改善手法 ■今日から使える実践的なテクニックを学ぶ 4
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 5
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 6
その前に、弊社で開発しているゲームエンジン “RE ENGINE”について少しだけご紹介。 7
■RE ENGINEとは カプコン内製の次世代ゲームエンジンです。 ゲーム開発における 高速なイテレーション、 高解像度・高フレームレート、 マルチプラットフォームでの 開発を実現する目的で開発されています。 8
RE ENGINE ゲーム エディター 9
今回はそのRE ENGINEとMayaなどのDCCツールとの、 同期再生をリアルタイムで行える仕組みのご紹介となります。 早速ですが動画をご覧ください。 10
RE ENGINE Maya 11
RE ENGINE Maya 12
操作説明(同期開始準備) OK RE ENGINE! 同期ツールですね 準備します 13
操作説明(REの情報取得) 何が同期出来る? 一覧です 14
操作説明(同期データの作成) 15
送信データ(ジョイント) – ヘッダー ( 4 byte ) – データサイズ ( 4 byte ) uint – ゲームオブジェクト名 ( 64 byte )左詰め64文字 – ジョイント数 ( 4 byte ) uint – ジョイントデータ • ジョイント名 ( 64 byte ) 左詰め64文字 • ポジション( 24 byte ) double × 3 • ローテーション ( 24 byte ) double × 3 • スケール ( 24 byte ) double × 3 16
送信データ(カメラ) – ヘッダー ( 4 byte ) – ポジション ( 24 byte ) double × 3 – ローテーション ( 24 byte ) double × 3 – スケール ( 24 byte ) double × 3 – FOV ( 8 byte ) double 17
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 18
19
問題が発生していた作業 ■シームレスなプレイアブル・カットシーン間の切り替え ゲームエンジン キャラモデラー アニメーター レベルデザイナー 背景アーティスト 20
作業の中で発生する修正の繰り返し ■繰り返しの中で遅れが発生する 位置変更したよ! 修正よろしく! 直します! レベルデザイナー アニメーター 満足できない! リテイク! 直します!! アートディレクター 直します!!! ④ 遅れ 不具合! 修正よろしく! プログラマー 21
遅れの原因 ①確認作業の手間 ②データの変換時間 ③巨大な作業用シーン 22
①確認作業の手間 ■ゲーム・DCCツールを切り替えながら確認する 変更された 背景は? 変更きちんと 反映された? アニメーター 出力設定 あってる? 出力した アニメーション 動く? 切り替えによって作業が分断される 23
②データの変換時間 ■避けられない待ち時間 FBX出力 ゲームデータ 変換 (1分+1分)× イテレーション回数 カットシーンはこの何倍も待ち時間が長い 24
③巨大な作業用シーン ■作業精度を上げる為に色々なものが置かれる 見た目は同じに なったけど・・・ 背景移動したよ 見た目同じに 作業用シーンはゲームに使われない 高負荷による低速な動作 25
遅れの原因のまとめ ①確認作業の手間 ②ゲームデータへの変換時間 ③作業のための作業+低速な動作 アニメーターの イテレーション速度の低下 26
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 27
目標 ■リアルタイムで見る – イテレーション速度の向上 – ロールバックの影響を最小限に ■ムダを削る – 背景などはゲームで確認 – 必要最低限の環境で作業 28
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 29
システム設計 ① ② ③ ①Mayaで情報取得 ②MayaからRE ENGINEへ送信 ③RE ENGINEで最小限の処理 30
システム設計 ■Mayaで作業が完結すること – Python APIで様々な機能を実装 ■TCP/IPでリアルタイムに値を送信 ■RE ENGINEではアニメーターがすぐに使えること – 設定いらず、ゲームへの介入を最小限に抑える 31
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 32
RE ENGINE Maya 33
RE ENGINE Maya 34
旧フロー ■直列のワークフロー Maya RE ENGINE RE ENGINE Maya RE ENGINE 35
新フロー ■並列のワークフロー Maya RE ENGINE Mayaの作業用シーンはそのまま MayaとRE ENGINEが同期して動く 36
ワークフローの比較 ■旧フロー ■新フロー 直列のワークフロー 並列のワークフロー 手間のかかる確認作業 同時に確認作業 何度も行う変換待ち 変換待ちは最後だけ 作業の為のシーン修正作業 作業の為の作業からの解放 巨大シーンで低速な動作環境 最小のシーンで高速な動作環境 37
作業量の比較 旧フロー 新フロー 38
同期再生システムの考え方 ■リーン・リアルタイム開発 Lean:ムダをなくす Real Time:すぐ見る 39
リーン開発の考え方 ■ムダを無くす ゲームに使われない作業用シーンを作りこまない データ変換にかかる待ち時間を無くす データを変更に伴う作業や確認の手間を減らす 不具合調査やその為のコミュニケーションコストも自然と減る 40
リアルタイムワークフローの考え方 ■高速イテレーション ゲームでの状態をすぐに確認 他人の変更の影響もすぐに確認 41
前半まとめ 42
RE ENGINE Maya 43
リーン・リアルタイム開発 ■ムダの削減 + リアルタイムワークフロー – ゲームでの状態をリアルタイムに確認 – DCCツールでシーンを巨大化させない – 変換の待ち時間ゼロ 44
リーン・リアルタイム開発 ■タイトルの開発を加速する – データ変更による作業の手間の軽減 – 不具合調査・コミュニケーションコストの削減 45
アジェンダ 1.アニメーション同期再生システムの紹介 2.アニメーターが直面していた問題点 3.ワークフロー改善に向けた目標 4.リアルタイム性を考慮したシステム設計 5.新しいワークフローの評価 6.アニメーション同期再生システムの実装紹介 46
前置き ■簡単に実装する方法を示しています 誰でも簡単に! ■例外処理は各自適切に行ってください try except しっかり! 47
ポイント ■データは基本的に一方通行 – システムの安定性確保のため – 書き戻しのニーズには代替手段で対応 ■受信側でデータ変換を再現 – 同期システムで動作しない = 出力しても読み込めない – 問題が起きた時の調査箇所の絞り込みが可能 48
システム設計 ① ② ③ ①MAYAで情報取得(Python) ②MAYAからRE ENGINEへ送信(TCP/IP) ③RE ENGINEで最小限の処理 49
ポイント ■ノードのキャッシュと適切なAPIの使用 ノードのキャッシュ: 数FPS 60FPS 使用しているAPI ①時間変更通知 addTimeChangeCallback ②アトリビュート変更通知 addAttributeChangedCallback ③描画通知 add3dViewPostRenderMsgCallback 50
ノードのキャッシュ ノードの検索は高コスト 通信を開始する前に必要なノードは集めておく ノードの キャッシュ コールバック API 関節データの 取得 51
API説明 Ⅰ.時間変更通知:タイムラインを動かした時 addTimeChangeCallback Ⅱ.アトリビュート変更通知:ノードを操作した時 addAttributeChangedCallback Ⅲ.描画通知:カメラを動かした時 add3dViewPostRenderMsgCallback 52
API説明 Ⅰ.時間変更通知:タイムラインを動かした時 addTimeChangeCallback ノードの キャッシュ コールバック API 関節データの 取得 53
API説明 Ⅱ.アトリビュート変更通知:ノードを操作した時 addAttributeChangedCallback ノードの キャッシュ コールバック API 関節データの 取得 54
API説明 Ⅱ.アトリビュート変更通知:ノードを操作した時 Q:ScriptJobはダメなのか? ノードの キャッシュ A:マニピュレーターで編集中に コールバックが呼ばれないため コールバック API 同期が出来ない 関節データの 取得 55
API説明 Ⅲ.描画通知:カメラを動かした時 add3dViewPostRenderMsgCallback ノードの キャッシュ コールバック API 関節データの 取得 56
API説明 Ⅲ.描画通知:カメラを動かした時 Q:アトリビュート変更通知はダメなのか? A:既知の不具合が含まれている ノードの キャッシュ コールバック 複数回呼ばれる時に、ビューをドラッグする前のカメラ位置が API 定期的に設定されてコールバックが呼ばれる 関節データの 取得 57
関節データの取得 getAttrを使用することで 高速に値を取得できる ノードの キャッシュ コールバック API 関節データの 取得 58
システム設計 ① ② ③ ①MAYAで情報取得(Python) ②MAYAからRE ENGINEへ送信(TCP/IP) ③RE ENGINEで最小限の処理 59
ポイント ■簡単に実装する まず動かしてみる所から始めてみる ■実装内容 Maya(クライアント)とRE ENGINE(サーバー)の通信 60
クライアント(Maya) TCP通信用のソケットを作成 クライアント作成 サーバー作成 受信待ち 受信後の処理 61
サーバー(RE ENGINE) TcpListenerクラスを作成 クライアント作成 サーバー作成 受信待ち 受信後の処理 62
サーバー(RE ENGINE) 受信待ちを行う クライアント作成 サーバー作成 受信待ち 受信後の処理 63
サーバー(RE ENGINE) 読み込んだ情報に応じて処理を決定 クライアント作成 サーバー作成 受信待ち 受信後の処理 64
システム設計 ① ② ③ ①MAYAで情報取得(Python) ②MAYAからRE ENGINEへ送信(TCP/IP) ③RE ENGINEで最小限の処理 65
ポイント ■介入を最小限にすること 誰でも使えるシステムへ ■実装内容 受け取った値をジョイントに反映するだけで 複雑なことは行っていません。 66
データを読み込む 各ジョイントの値を読み込む データの 読み込み ジョイントに 反映 67
値の反映 ジョイントに値を反映していく データの 読み込み ジョイントに 反映 68
後半まとめ 69
実践する! ■今日から使えるテクニック 今日の講演内容があればすぐ出来る! 取得できるものなら何でも同期出来る! 70
今後の展望 進化するRE ENGINE 71
今後の展望 ■ワークフローの最初からゲーム画面で – モーションキャプチャースタジオでもリアルタイム確認 ■オフィスで誰でもプレビズ ■ツール間連携をさらに加速する – DCCツールをまたぐ作業も高速に 72
今後の展望 RE ENGINE Motion Capture 画像認識 MAYA Motion Builder あらゆる ソフトウェア 73
Blade RE ENGINE 74
謝辞 75
謝辞 オートデスク株式会社 様 本システムの実装に際して 手厚くサポートをしていただきまして 誠にありがとうございました。 76
質疑応答 77
補足資料 78
RE ENGINEについて どんなゲームエンジン? 79
RE ENGINEの特徴 1.イテレーションが考慮された設計 ラピッドイテレーションを実現するゲームエンジンの設計 CEDEC 2016 の弊社講演 80
RE ENGINEの特徴 2.高速なレンダリングシステム GPU駆動レンダリングへの取り組み Game Creators Conference 2016 の弊社講演 81
RE ENGINEの特徴 3.多彩なアニメーション向けデバッグツール 82
RE ENGINEの特徴 ■ゲームと通信出来るエディタ環境 ■コンカレント(同時編集)パイプライン ■高負荷に耐えうる描画システム ■アニメーション向けのデバッグツールで 過去に遡って状態を確認できる 83
アニメーションシステム について どのように動いてるのか? 84
アニメーションシステムの特徴 1. 様々なタイミングで処理が可能 – アニメーションレイヤー毎の更新直後 – スクリプト更新前後・レンダリングの直前 etc 85
処理の流れ キャラステート 更新 アニメーション 更新 物理 更新 キャラ 更新 レンダ リング 86
アニメーションシステムの特徴 2.補助関節の計算やIKなどの機能が充実 – 関節のコンストレイン、補助関節計算のリアルタイム反映 – 足用IK・多関節IK・鎖・布シミュレーション etc 87
補助関節 88
IKの一例 89
アニメーションシステムの長所 柔軟な処理実行タイミングの選択が可能 IKや補助関節などの処理をエンジンでサポート 多彩なアニメーション表現を可能にするシステム 「バイオハザード7 レジデント イービル」におけるアニメーション技術について CEDEC 2016 の弊社講演 90
おまけ MotionBuilder 版 91
ポイント ■構成はMayaと同じ、APIの使い方が異なる 使用している重要なAPI Ⅰ.時間変更通知: FBEvaluateManager.OnSynchronizationEvent Ⅱ.アトリビュート変更通知: FBSystem.OnConnectionDataNotify Ⅲ.UIスレッド待機通知: FBSystem.OnUIIdle 92
ノードのキャッシュ ノードの検索はMaya同様にコストがかかる 93
API説明 Ⅰ.時間変更通知:タイムラインを動かした時 FBEvaluateManager.OnSynchronizationEvent 94
API説明 Ⅱ.アトリビュート変更通知:ノードを操作した時 FBSystem.OnConnectionDataNotify 95
API説明 Ⅲ.UIスレッド待機通知:待機時に定期実行 FBSystem.OnUIIdle 96
関節データの取得 キャッシュしているコンポーネントから取得する ソケット通信の方法はMaya版と同じなので、割愛させていただきます。 97