Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【CEDEC2024】USDのゲームアセットへの応用について
Search
Bandai Namco Studios Inc.
PRO
January 30, 2025
0
1
【CEDEC2024】USDのゲームアセットへの応用について
jsonなどが使われることが多いゲームアセットについて、USDを使用する手法を解説します。
また、ゲームアセットにUSDを採用したときのメリットやデメリットも解説します。
Bandai Namco Studios Inc.
PRO
January 30, 2025
Tweet
Share
More Decks by Bandai Namco Studios Inc.
See All by Bandai Namco Studios Inc.
【CEDEC2024】『鉄拳8』 カスタマイズキャラクターのための多重リグシステム~複雑な筋肉表現と大量生産の両立
bandainamcostudios
PRO
1
49
【CEDEC2024】『鉄拳8』32キャラ分のアセット制作と同時進行の映像制作におけるFlowPT活用術
bandainamcostudios
PRO
0
21
【CEDEC2024】『鉄拳8』の揺れもの表現を支えた内製クロスシミュレーション
bandainamcostudios
PRO
1
61
【CEDEC2024】圧倒的キャラクター数×カスタマイズ数をゲームエンジンで実現~『鉄拳8』キャラクターグラフィックス事例~
bandainamcostudios
PRO
0
54
【CEDEC2024】鉄拳8で進化した補助骨とその応用例の紹介
bandainamcostudios
PRO
1
48
【CEDEC2024】Application of USD to Game Assets
bandainamcostudios
PRO
0
130
BLUE PROTOCOL の AI 実装 ~企画意図をふるまいに反映させるために行ったこと~
bandainamcostudios
PRO
3
4.5k
「サウンドクリエイター新人研修の改革」インストラクショナルデザインの活用
bandainamcostudios
PRO
0
2.1k
ゲーム開発インフラのDXを推進するCCoEとプラットフォームエンジニアリング
bandainamcostudios
PRO
1
920
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Code Review Best Practice
trishagee
65
17k
Writing Fast Ruby
sferik
628
61k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Fireside Chat
paigeccino
34
3.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
How to train your dragon (web standard)
notwaldorf
89
5.8k
Done Done
chrislema
182
16k
Transcript
USDのゲームアセットへの応用について バンダイナムコスタジオ 多田 航
自己紹介 主に関わったタイトル ・ACE COMBAT6 ・ACE COMBAT ASSAULT HORIZON ・テイルズ オブ
カードエボルブ ・アイドルマスター ミリオンライブ! ・ポッ拳 ・New ポケモンスナップ 過去の講演 ・CEDEC2011 ACE COMBAT ASSAULT HORIZONにおける継続的インテグレーション ・CEDEC2011 「エースコンバット アサルト・ホライゾン」インゲームカメラ制作事例 ・CEDEC2015 ポッ拳におけるゲームエディタの設計と実装 ・CEDEC2019 家庭用ゲーム開発におけるゲームエディタの基礎設計と、安定かつ高速なアセット管理について ・CEDEC2019 DirectX Raytracingを用いたライトベイカーの実装について ・CEDEC2021 『New ポケモンスナップ』におけるライティング ・CEDEC2022 MaterialXとStandard Surfaceのゲームグラフィックスへの応用について ・CEDEC2023 DCCツールを用いた広色域テクスチャワークフロー など 多田 航 Wataru Tada
アジェンダ • 概要 • USDライブラリの組み込みについて • ツール例 • USD Toolsetの使用
• まとめ
USD(Universal Scene Description) • USDはPixarによって開発されたシーングラフ記述用のファイ ルフォーマットと制御ライブラリ • USDはグラフィックス用途に強いが、汎用的なフォーマットと して設計されており、グラフィックス用途に限定されるもので はない
• 今回の講演は、jsonなどが使われることが多いゲームアセット について、USDを応用する例を解説する https://openusd.org
jsonを使ったゲームアセットフロー ゲームランタイム 開発環境 (ゲームエディタなど) { "Mission": [ { "name":"Mission1", “Comment”:“テストミッション",
"ID":1 } ] } バイナリファイル json バイナリファイル
USDを使ったゲームアセットフロー 開発環境 (ゲームエディタなど) #usda 1.0 def "Mission" { def "Mission_1"
{ custom string Comment = "テストミッション" custom int ID = 1 } } バイナリファイル USD ゲームランタイム バイナリファイル
ゲームアセットにUSDを採用するメリット • ゲームアセットにUSDの機能を使うことができる • コンポジションが使用可能になる • DCCツールとの相互運用性(Interoperability)が向上する • USD Toolset(USD公式ツール)が使用可能になる
コンポジション • 複数USDファイルを合成することが出来る • アセットコンバーター内部でUSDをコンポジションし、 バイナリファイルに出力する ゲームアセットA.USD ゲームアセットB.USD ゲームアセットC.USD ゲームアセット
コンポジション バイナリファイル アセットコンバーター
コンポジションを使う • ゲームアセットがコンポジションアークに従ってファイル分割 されている必要がある • subLayers (レイヤー) • inherits (継承)
• variantSets (バリエーション) • references (参照) • payloads (ペイロード) • specializes (特殊化) キャラクター共通パラメータ.USD 個別キャラクターパラメータ.USD 参照 コンポジション例
DCCツールとの相互運用性 • DCCツールのUSD入出力機能によって、ゲームアセットがDCC ツールで扱える Houdini SolarisやMayaのUSD Importer/Exporterなど DCCツール ゲームアセットUSD
USD Toolsetが使用可能になる • USDは公式ツールとしてUSD Toolsetを提供している • ゲームアセットがUSDで作られていると、ゲームアセットに USD Toolsetを適用できる usdview
usdcat https://github.com/PixarAnimationStudios/OpenUSD/tree/release/pxr/usd/bin
アジェンダ • 概要 • USDライブラリの組み込みについて • ツール例 • USD Toolsetの使用
• まとめ
USDライブラリ • USDはファイルフォーマットとしてのUSD(.usdなど)を扱うた めにライブラリが提供されている • 本講演ではUSD 24.05 Windows版をMonolithic Libraryとして ビルドしたものを使用している
(コンソール移植を行っていない) →ゲームランタイムではなくツールでのみUSDを扱っている https://github.com/PixarAnimationStudios/OpenUSD USD Windows開発環境 ゲームランタイム バイナリ
C#からのUSDアクセス • USDライブラリはC++とPythonがサポートされているが、今回は C#からUSDにアクセスする事とした →USDライブラリのマーシャリング用C++DLLと、USDの各クラス をオブジェクトとして扱えるようにしたC#ライブラリを作成した (C#でのUSDアクセスについては、usd-unity-sdkの様にUSDライブ ラリの解析機構を作っている例もある) USDアクセスライブラリ C#
(DLL) C++ (DLL) usd_ms.dll C#ツール マーシャリング用のライブラリ インターフェース
C#ツール • USDアクセスライブラリによって、C#ツールからUSDファイルが読み書き 出来るようになった • USDは必要なものを必要な時に読み込む方式だが、 USDアクセスライブラ リではUSD読み込み時にアトリビュートを一括で読み込む様にした C#オブジェクト (USDスキーマごとにC#クラスを定義している)
USD
USDシリアライザ/デシリアライザ • C#オブジェクトをUSD出力する時はアセットの種類ごとに USDスキーマ設計を考える必要がある • アセットの種類が増えたときに、USDスキーマ設計を簡略化す るため、シリアライザを作成する事にした →リフレクションを使い、C#オブジェクトを自動でUSDにシリ アライズする C#オブジェクト
USD シリアライザ USDスキーマ設計 C#オブジェクト UsdGeomXform? UsdGeomScope? UsdPrim?
C#オブジェクト • C#オブジェクトはPrimを使って表現する • クラス名をUSDのAttributeに記録しておくことで、デシリアラ イズ時にAttributeからクラスを復元出来る →Json.NETの$typeと同様の機能 C# USD クラス名
基本型 • 基本型はUSDで用意されているので、C#の型を変換できる C# USD bool bool char uchar int,sbyte,short
int uint,byte,ushort uint long,decimal,nint int64 ulong,nuint uint64 float float double double string string C# USD bool[] pxr::VtArray<bool> char[] pxr::VtArray<uchar> int[],sbyte[],short[] pxr::VtArray<int> uint[],byte[],ushort[] pxr::VtArray<uint> long[],decimal[],nint[] pxr::VtArray<int64> ulong[],nuint[] pxr::VtArray<uint64> float[] pxr::VtArray<float> double[] pxr::VtArray<double> string[] pxr::VtArray<string> 基本型 配列
USDに用意されていない型 • USDにはPrim配列は用意されていないので、C#のオブジェクト配列はPrimのSdfPathに連番を付 けて表現する (Relationshipを使っても配列を表現することは出来る) • その他USDに用意されていない型は独自のPrimを作成する List、ObservableCollection、Dictionary、HashSet... 配列型 C#
USD SdfPathはValue_番号 C# Dictionary型 Key Value USD SdfPathの予約語(.や/)を避けて定義する
シリアライズ例 • C#オブジェクトをUSDにシリアライズ出来るようになった • USDスキーマ設計を行わなくても良いシンプルなアセットにシ リアライザを使用する (手動でUSDスキーマ設計を行う場合に比べて、DCCツールとの 相互運用性は下がる) C#オブジェクト USD
アジェンダ • 概要 • USDライブラリの組み込みについて • ツール例 • USD Toolsetの使用
• まとめ
各種ツールのUSD対応 • C#からUSDを読み書きでき、シリアライザも用意したので、 様々なツールからUSDが扱えるようになった • Excel • モデルコンバーター • コリジョンコンバーター
• ゲームエディタ
Excel • ゲームパラメータなど、大量のデータを扱う時にExcel(スプレッド シート)を扱うことがある • C#ツールでExcelファイルを読み取って、USDファイルを出力する USDファイル バイナリファイル Excel
ゲームパラメータExcel • Excelの行をPrimとして、列をAttribute(またはCustom Data)と して表現できる USD (Attributeで変数を表現) Excel USD (Custom
Dataで変数を表現) パラメータ
ゲームパラメータUSD • AttributeやCustom Dataにjsonを入れる事も出来る (jsonとなっている文字列にはコンポジションなど、USDの機能は使え ない) USD Excel Custom Dataにjsonを入れている
ゲームパラメータUSD • USDにスキーマを設定すると、DCCツールとの相互運用性が向上する (DCCツール側でスキーマのアトリビュートを使った機能が作れる) • 汎用パラメータにはUsdGeomScopeが使用できる USD Excel UsdGeomScope
ゲームパラメータUSD • ゲームパラメータに座標情報が含まれている場合は UsdGeomXformが使用できる USD Excel UsdGeomXform 座標情報
ゲームパラメータUSD USD(シリアライザを使った例) json • 前述のUSDシリアライザを使うとjsonと似ている出力となる
コンポジション(参照) • コンポジションにより、ゲームパラメータは他のパラメータを参照す ることが出来る • 例えばキャラクターの共通パラメータを設定しておいて、個別のキャ ラクター情報が共通パラメータを参照するといった使い方が出来る キャラクター共通パラメータ 個別キャラクターパラメータ USDファイル
USDファイル 参照 バイナリファイル 参照
参照を使ったUSD キャラクター共通パラメータUSD キャラクターパラメータUSD コンポジション結果 (usdcatでのプレビュー) バイナリ ファイル 参照 キャラクター共通パラメータの値が反映されている
カメラブックマークExcel • Excelにカメラ座標を記入し、USDファイルに出力することで、 DCCツールやゲームエディタからExcelのカメラ座標を参照できる →スクリーンショットの自動撮影などに使用できる カメラブックマークExcel DCCツール ゲームエディタ USDファイル
Houdiniでのカメラブックマーク使用例 • Asset ReferenceノードからカメラブックマークUSDを指定し て、カメラを設定する UsdGeomCamera カメラ座標 Houdini カメラブックマークExcel USD
ライティングプリセットExcel • Lookdev用ライティングとしてHDRIと太陽光の情報をExcelに 記述しておく →USDを介してDCCツールやゲームエディタからExcelのライ ティング情報を参照できる ライティングプリセットExcel DCCツール ゲームエディタ USDファイル
Houdiniでのライティングプリセット使用例 • Asset ReferenceノードからライティングプリセットUSDを指定すると、ライ ティングが反映される • Houdiniではライティングアーティストが設定したExcelを変更できないので、 意図していないライティング変更を防ぐ事が出来る HDRI (UsdLuxDomeLight)
太陽光(UsdLuxDistantLight) USD ライティングプリセットExcel HDRI (UsdLuxDomeLight) 太陽光(UsdLuxDistantLight) Houdini
モデルコンバーター • HoudiniからUSDを出力し、モデルコンバーターでバイナリファイルにす ることで、USDをHoudiniのエキスポーターとして使用出来る →モデルコンバーターはUSDを読み込み、UsdGeomMeshをバイナリファ イルに入れる Houdini USD モデルコンバーター ゲーム
divideノードなどを使用して faceVertexCountsは3に設定 バイナリ ファイル
Custom Dataの使用 • ゲーム固有のパラメータなど、USDスキーマに含まれていないパラ メータをUSDに埋め込むにはCustom Dataを設定する →モデルコンバーターでCustom Dataをバイナリに埋め込むことで、 ゲーム側からHoudiniで設定したパラメータを利用することが出来る ConfigurePrimitiveノードでCustom
Dataに RenderPass(描画パス)の文字列を設定 ゲーム側ではHoudiniで設定された モデルの描画パスに従って描画 USD
データデバッグ • モデルデータにUSDを使用していると、HoudiniのScene Graph Treeやusdviewでデータデバッグが行える Houdini usdview
コリジョンコンバーター • コリジョンアセットをUSDで扱うことで、ゲームエディタでの 編集の他、DCCツールでも編集可能なアセットとなる コリジョンアセットUSD Houdini ゲームエディタ Maya バイナリ ファイル
コリジョンモデルはUsdGeomMeshを使用 ゲーム中で必要な追加パラメータはCustom Dataに設定 (草や地面といったコリジョン種別など) ポリゴン判定用にfaceVertexCountsは3に設定
コリジョンアセットUSDのファイル分割 • コンポジションを利用すると、コリジョンアセットUSDは複数 ファイルに分割出来るので、複数人数での同時編集が可能となる Houdini コリジョンアセットUSD コンポジション結果 sublayersで コンポジション バイナリ
ファイル
複数ツールの組み合わせ • USDは複数のツールから出力出来るので、DCCツールで出力した USDの一部パラメータを、Excelから出力したUSDで上書きできる Houdini USD Excel USD コンポジション結果 バイナリ
ファイル コリジョン識別値を Excel値で上書き
レベルアセットUSD • レベルエディタでUSDが扱えると、レベルアセットにUSDを適用 できる レベルアセットUSD レベルエディタ usdviewでのプレビュー
レベルアセットUSD • レベル構造はサブレベルとEntityのツリー構造なので、USDのツ リー構造を利用する ルートレベル サブレベル サブレベル Entity Entity レベルツリー
Entity Entity USD Layer Layer Layer Prim Prim Prim Prim レベルファイルUSD
サブレベルの参照 • コンポジションの参照機能を使って、別ファイルになっているサブ レベルを参照出来る サブレベル
ゲームパラメータの参照 • コンポジションを使うことで、レベルデータUSDからゲームパ ラメータUSDを参照出来る ゲームパラメータUSD コンポジション結果 レベルエディタ Excel レベルデータUSD 参照
バイナリ ファイル
アジェンダ • 概要 • USDライブラリの組み込みについて • ツール例 • USD Toolsetの使用
• まとめ
USD Toolset • USDはUSD Toolset(USD公式ツール)を提供しており、データ デバッグなどに活用できる 名前 概要 usdedit テキストエディタでのデータ編集
usdcat .usdaの文法チェック usddiff diff表示 usdview 階層構造のプレビュー usdrecord usdresolve usdtree 階層構造のテキスト表示 名前 概要 usdzip .usdzの作成 usdchecker usdstitch 複数USDのマージ usdstitchclips usddumpcrate sdfdump SdfPathやTfTokenの調査用 sdffilter
usdeditやusdcatを使った.usdaの使用 • アセット内を文字列検索したい時や、usdviewでは表示出来な い変数を確認したい時に、usdeditやusdcatを使って.usdファ イルを.usdaファイルに変換する usda usdview Custom Dataが見切れている usdcat
usdstichを使ったマージ • usdstitchを使うと複数USDをマージ出来る 引き数の順序によってUSDのマージ優先順位が決まる usdstich test1.usda優先 test2.usda優先 追加 上書き 追加
usddiffを使ったオブジェクト差分 • PerforceのDiffツールなどに登録して、USDのオブジェクト差分 を見ることが出来る Perforce usddiff
アジェンダ • 概要 • USDライブラリの組み込みについて • 応用例 • USD Toolsetの使用
• まとめ
ゲームアセットにUSDを採用するデメリット • pythonなどの環境整備が必要になる • アセットがUSDの仕様の制限を受ける • USDはLinux版を基準に開発されているので、Windows版かつ MSVCを使ったビルドでは問題が出やすい → 都度githubにて報告する
https://github.com/PixarAnimationStudios/OpenUSD
アセットがUSDの仕様の制限を受ける • Primはユニークなパス(文字列)を設定しなければならないので、数字(ID) ベースでアセットを管理しているとパスの生成処理が必要になる • USDスキーマに存在しないものを表現しにくい →線を表現したいが、UsdGeomLinesが無いので、UsdGeomBasisCurves を使うなど カスタムスキーマはアセットの前方互換性やDCCツールの相互運用性が下 がるので使用しにくい
• 何かを切り替えるという機能にはVariantが使えるが、 Variantで選択して いないPrimの情報を取得しにくい(Variantの切り替えが必要になる)
まとめ • USDライブラリを使用したツールを作ることでゲームアセットをUSDと して扱うことが出来る • ゲームアセットをUSDで扱うと、コンポジションが使えたり、DCCツー ルとの相互運用性が上がるなどのメリットもあるが、アセットがUSDの 仕様の制限を受けるなどのデメリットもある • USDに適しているゲームアセットとしては、コンポジションを行うア
セットや、DCCツールとの連携を行うアセットが挙げられる • 単純な文字列リストファイルなど、USDを使用するメリットが少ないア セットはjsonやxmlなど、従来のファイルフォーマットが適している
References • https://openusd.org • https://github.com/PixarAnimationStudios/OpenUSD • Academy Software Foundation Slack
• [CEDEC 2017] Pixar USD 入門:新たなコンテンツパイプラインを構築する • [CEDEC 2022]『グランツーリスモ7』開発におけるUSD活用事例