$30 off During Our Annual Pro Sale. View Details »

【CEDEC2025】HoudiniによるUI作成について

 【CEDEC2025】HoudiniによるUI作成について

Houdiniを使用したUIの作成方法について解説します。
ワークフローとしてはHoudiniのSOPでUIのメッシュを作成し、LOPでUIをレイアウトしてUSDに出力します。
その後ゲームランタイムはUSDを読み込みUIを描画します。
この方法ではUIを3Dで描画するため、従来の2D UIでは表現できなかったUIを表現することができます。
また、Houdiniはプロシージャルで処理を行うため、ローカライズ時の各言語用のUIを自動的に作成することが出来ます。

Avatar for Bandai Namco Studios Inc.

Bandai Namco Studios Inc. PRO

December 22, 2025
Tweet

More Decks by Bandai Namco Studios Inc.

Transcript

  1. 自己紹介 2 2005年ナムコ(現バンダイナムコスタジオ)入社 主に関わったタイトルは ・ACE COMBAT 6 解放への戦火 ・ACE COMBAT

    ASSAULT HORIZON ・テイルズ オブ カードエボルブ ・アイドルマスター ミリオンライブ! ・ポッ拳 ・New ポケモンスナップ など 2007年バンダイナムコゲームス(現バンダイナムコスタジオ)入社 主に関わったタイトルは ・ACE COMBAT 5 THE UNSUNG WAR ・ACE COMBAT 6 解放への戦火 ・ACE COMBAT ASSAULT HORIZON ・ACE COMBAT INFINITY ・ACE COMBAT 7 SKIES UNKNOWN など 講師関連記事 Monotype社共同オンラインセミナー第2回「ゲームのためのタイポグラフィ」 バンダイナムコスタジオ リードUIアーティスト三品幸彦 × 欧文書体デザイナー大曲都市 https://www.youtube.com/watch?v=mmDPWk_PEy0 CGWORLD.JP『エースコンバット7 スカイズ・アンノウン』~ 作中世界の"OS"を表現するGUI ~ https://cgworld.jp/feature/201908-gg2019-ace7.html 過去の講演としては ・CEDEC2011 ACE COMBAT ASSAULT HORIZONにおける継続的インテグレーション ・CEDEC2011 「エースコンバット アサルト・ホライゾン」インゲームカメラ制作事例 ・CEDEC2015 ポッ拳におけるゲームエディタの設計と実装 ・CEDEC2019 家庭用ゲーム開発におけるゲームエディタの基礎設計と、安定かつ高速なアセット管理について ・CEDEC2019 DirectX Raytracingを用いたライトベイカーの実装について ・CEDEC2021 『New ポケモンスナップ』におけるライティング ・CEDEC2022 MaterialXとStandard Surfaceのゲームグラフィックスへの応用について ・CEDEC2023 DCCツールを用いた広色域テクスチャワークフロー ・CEDEC2024 USDのゲームアセットへの応用について など
  2. タイトル画面 ロゴ 15 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  3. タイトル画面 ロゴ 16 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  4. タイトル画面 ロゴ 17 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  5. タイトル画面 ロゴ 18 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  6. タイトル画面 ロゴ 19 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  7. タイトル画面 ロゴ 20 Houdini(SOP) [file] .epsをインポート [group] pointsをグループ化 [color] 色を設定

    [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  8. タイトル画面 テキスト 23 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  9. タイトル画面 テキスト 24 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  10. タイトル画面 テキスト 25 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  11. タイトル画面 テキスト 26 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  12. タイトル画面 テキスト 27 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  13. タイトル画面 テキスト 28 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  14. タイトル画面 テキスト 29 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  15. タイトル画面 テキスト 30 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  16. タイトル画面 テキスト 31 Houdini(SOP) [font] フォント/テキスト設定 [AttributeWrangle] エクスプレッションで逆向きを検出 [split] 2つのストリームに分岐

    [reverse] 頂点順を逆転 [boolean] 2つのオブジェクトを合成 [AttributeExpression] 色と不透明度を設定 [polyextrude] 押し出しで立体化 [divide] ポリゴンを三角形化 [Null] 出力名を設定
  17. タイトル画面 ボタン 34 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  18. タイトル画面 ボタン 35 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  19. タイトル画面 ボタン 36 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  20. タイトル画面 ボタン 37 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  21. タイトル画面 ボタン 38 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  22. タイトル画面 ボタン 39 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  23. タイトル画面 ボタン 40 Houdini(SOP) [grid] 四角い平面を作成 [mountain] 凸凹を作成 [polywire] ワイヤーをポリゴン化

    [divide] ポリゴンを三角形化 [UIcolor] マウス OFF [UIcolor] マウス ON [UIcolor] ヒットエリア [Null] 出力名を設定
  24. 他のUSDを参照する • メッシュはSOP Importだけではなく、別のHIPから出力したUSDを Asset Referenceノードで参照する事も出来る • UIパーツごとに担当アーティストを分ける時に使用する 124 UIメッシュ用HIPファイル

    (Crosshair.hip) レイアウト用HIPファイル Asset Referenceノード (Crosshair.usdを参照) USD ROPノード (Crosshair.usdを出力) Crosshair.usdのメッシュが表示されている
  25. USD Custom Data • UI描画にはメッシュ形状やレイアウト以外にも様々な情報が必要となる • USDのスキーマに存在しない情報はUSDのCustom Dataに書き込む • 主にConfigure

    Primitiveノード使ってCustom Dataを設定する (Custom Dataは文字列の他、jsonを設定することもある) 128 Configure Primitiveノード Custom Dataが設定されている usdview
  26. アンカー • 可変解像度対応のため、ゲームランタイムはアンカー機能に対応している • Custom Dataにアンカー名を設定し、ゲームランタイムがアンカー名を 使って描画する 129 Custom Data

    Name = Anchor (アンカーを使用する) Custom Data Value = AnchorBottomRight (右下のアンカー基準点を使用) Configure Primitiveノード 右下に表示する数字UI
  27. アニメーション • USDはフレームアニメーションに対応しているので、Houdiniから全 フレームのデータをUSDに書き込んでいる (USDのtime varying dataを使用) • ゲーム用カメラ情報もアニメーションに対応している 136

    フレーム1 メッシュ フレーム2 メッシュ フレーム3 メッシュ USD Houdini https://openusd.org/release/tut_xforms.html フレーム1 カメラ フレーム2 カメラ フレーム3 カメラ
  28. アニメーションフレーム制御 • Custom Dataにアニメーションフレーム制御情報を設定し、ゲーム ランタイムがアニメーションフレームを制御する • 制御情報はAdobe Animate(旧Macromedia Flash)の ActionScriptを参考に実装している

    (GoToAndPlayの他、GoToAndStopやStopなどが設定出来る) 137 Custom Data Name = GoToAndPlay_Menu_btn3_10 (Menu.usdのbtn3メッシュの10フレーム目に到達したらGoToAndPlayを実行) Custom Data Value = Menu_btn3_1 (Menu.usdのbtn3メッシュの1フレーム目から再生する) Configure Primitiveノード
  29. ボタン処理 • ボタンの処理をCustom Dataに設定すると、メッシュはボタンとして機能する • Custom Data Nameにはマウスをクリックした時の他、マウスカーソルがメッ シュに重なった時、マウスカーソルがメッシュから離れた時などが設定できる 140

    Configure Primitiveノードの設定例 Custom Data Name = MouseEnter_btn3 (btn3メッシュにマウスカーソルが重なった時) Custom Data Value = btn3_13 (btn3メッシュを13フレーム目から再生する) マウスカーソルがbtn3メッシュに重なると フレームアニメーションによって点滅する
  30. ボタン例(画面遷移) • Custom DataにUSD名を記載すると、ゲームランタイムはボタン メッシュ上でクリックされた時に、 Custom Dataで記載されたUI に遷移する 141 Configure

    Primitiveノードの設定例 Custom Data Name = MouseDown_btn1 (btn1メッシュをマウスクリックした時) Custom Data Value = GoToAndPlay_Title_camera1_1 (Title.usdに遷移し、camera1を1フレーム目から再生する) QUITと書かれているbtn1メッシュをクリックすると、別のUSDに遷移している
  31. ボタン例(カメラ変更) • Custom Dataにはメッシュ名だけでなくカメラ名も設定出来る • マウスクリックによってカメラを変更するといった事が出来る 142 Configure Primitiveノードの設定例 Custom

    Data Name = MouseDown_btn1(btn1メッシュをマウスクリックした時) Custom Data Value = camera1_96 (camera1を96フレームから再生する) btn1メッシュをマウスクリックするとカメラが動いている
  32. マテリアル • マテリアルはArnold Standard Surfaceを使用する →Material LibraryノードでArnold Standard Surfaceマテリ アルを作成する

    • 基本的にはEmissionとOpacityを設定するが、他のパラメータも 使用することがある 147 Arnold Standard Surface
  33. USD出力 • USD ROPノードでUSDを出力する • PerforceでUSDを管理しやすくするため、Save StyleはFlatten All Layersを設定し、出力USDを1ファイルにまとめている 151

    • アニメーション出力のため、Valid Frame Rangeは Render Specific Frame Range • USDを1ファイルにまとめるため、Save Styleは Flatten All Layers • 全フレームの情報をUSDに書き込むため、Flush Data After Each FrameはON USD ROPノード
  34. 不具合の切り分け • Scene Graph PathやusdviewでUSDに不具合が見つからな かった場合、不具合はプログラムが原因だと分かる • USDはusdviewなどのツールによって、中身を数値で確認出来る ので、データデバッグがしやすい •

    usddiffでアセット差分を調べることも出来る 170 Houdini (Scene Graph Path) usdview アセットコンバーター ゲームランタイム プログラムが不具合原因 アセットが不具合原因
  35. 独自バイナリファイル • USDとほぼ同じ構造になっており、頂点データやマテリアルパラメータ、 カメラ情報、 Custom Dataが入っている • variantは全variant setがバイナリファイルに入っている 174

    USD 独自バイナリファイル メッシュ頂点データ カメラ メッシュ頂点データ カメラ マテリアルパラメータ マテリアルパラメータ Custom Data Custom Data
  36. まとめ(アーティスト) • Houdini + USD によるUI開発環境は無限の可能性 • 数式やルールに基づいて自動的にデータやコンテンツを生成する手法はUI 制作向き •

    手作業による詳細な設定を最小限に抑え、複雑なパターンや大規模なデータ を効率的に作成可能 • UIを3D空間で扱うことができるようになり表現の幅が拡大 • 他のアートセクションと同じ言語を使うことで、表現手法の相談や知見の共有 が可能 ・3DCGの知識が必要 • 3D描画、カメラ、ライティング、マテリアル、レンダラー、USD… 184
  37. まとめ(アーティスト) 185 LITTLE BIG UI TRAINING https://www.sidefx.com/tutorials/little-big-ui-training-promo/ SCI-FI VISUALIZATIONS IN

    HOUDINI https://www.rebelway.net/sci-fi-visualizations-houdini ゼロから始めるHoudini https://www.youtube.com/watch?v=w7EtvfGokZs HARD EASY NORMAL • おすすめチュートリアル
  38. 参考 • https://www.sidefx.com/docs/houdini • https://openusd.org • CEDEC2020: 信頼性の高いHDRI作成術 • CEDEC2022:

    MaterialXとStandard Surfaceのゲームグラフィックスへの応用について • CEDEC2024: USDのゲームアセットへの応用について 187