More Related Content
Similar to 【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編 (20)
More from UnityTechnologiesJapan002 (20)
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
- 4. ⒸKLab inc.
● 佐々木洋太
● KLab株式会社技術統括部RRRグループ所属
○ ※RRR = RealTime Rendering Researchの略
● VFXシニアアーティスト
自己紹介
4
- 5. ⒸKLab inc.
● 来歴
○ アニメ制作会社、3DCG制作会社で主に2D・3Dのエフェクト・コンポジット・映像制作に多
数携わった後KLabに入社。
自己紹介
5
- 6. ⒸKLab inc.
● 入社後
○ 入社後は先端VFXの技術検証やテックデモ制作に携わりつつ、オリジナルRPGタイトルのカ
ットシーン制作に参加。
■ テックデモのLink
■ UnityKorea様で行ったテックデモのウェビナーLink
● 現在
○ 現在は主に映像・エフェクトの技術・アート両分野での「新規プロジェクトへの協力・高度
なVFXの技術検証及び社内導入・制作力向上への貢献・コンセプトやスタイルガイドの構
築」といった業務を行っています。
○ 技術検証・実践内容の一部は2020年のCEDECで登壇して紹介しています。
■ CEDEC2020の資料Link
■ SideFX社様のCEDEC紹介ページLink
自己紹介
6
- 7. ⒸKLab inc.
● リアルタイム・レンダリング・リサーチグループ(RRR)
○ KLabの3Dビジュアル研究開発グループ
○ 横断活動グループとしてプロジェクトサポート及び新規開発に関与
○ 2018年に結成
○ 現在は7人
■ 全員がそれぞれ違う得意分野を持っている人
■ 全員が「楽するための苦労をしたい」人
● <今の仕事を仕組化・効率化し、未来を楽にする。>という、KLabの大事にしている価値観の
一つでもあります。
自己紹介
7
- 8. ⒸKLab inc.
● 自主制作
○ 仕事だけではなく趣味でもプリレンダーやリアルタイムの映像・エフェクト・モーショング
ラフィックス制作をしています。
■ 先日ボーンデジタル様主催の『Houdiniで作るNPRエフェクト&After Effectsでのコンポ
ジット実践解説オンラインセミナー』という題で、趣味のNPRエフェクトの解説セミナ
ーを行いました。
○ 今回のUnity道場では、仕事及びこうした自主制作で培われたHoudiniとUnity連携のノウハウ
をご紹介致します。
自己紹介
8
- 12. ⒸKLab inc.
Houdini and Unity integration
● introduction
○ デモリールで紹介したようにHoudiniとUnityを使用した作例が色々とございます。
○ 今回はその中から「FlowMap」及び「Rigid Body Dynamics(RBD)」関係のノウハウの紹介
を主に行いたいと存じます。
○ 基本的には作業シーンを紹介しながらの説明になりますが、後で資料として読み返しやすい
ように要点はスライドの方にも記載させていただきます。
12
- 13. ⒸKLab inc.
Houdini and Unity integration
● 香盤表
○ 前編
■ introduction
● 自己紹介
■ Houdini and Unity integration
● Various uses for flowmap
○ 後編
■ Houdini and Unity integration
● Baking Rigid Body Dynamics
● その他Tips
13
- 14. ⒸKLab inc.
Houdini and Unity integration
● 使用しているツールのバージョン
○ Houdini
■ Houdini18.5.462
■ SideFXLabs18.5.462
○ Unity
■ Unity2019.3LTS:HDRP
■ Unity2019.4LTS:URP
■ Unity2020.2LTS:HDRP
■ Unity2020.3LTS:HDRP
14
- 17. ⒸKLab inc.
Baking Rigid Body Dynamics
● Rigid Body Dynamics とは
○ 略称は RBD。
○ 3DCGにおいては一般的には「硬い固体の物理シミュレーション(ビルやドアの破壊・落
石・金属の鎖の揺れ等)」のことを指します。
17
- 18. ⒸKLab inc.
Baking Rigid Body Dynamics
● Rigid Body Dynamics とは
○ また、破壊表現だけではなく添付gifのような固体の物理シミュレーションする要素全般の事
をRBDと呼びます。
18
- 19. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics とは
○ DCCツール上で作成したRBDをベイクしてコンバートし、ゲームエンジンで使用する手法の
ことを本セッションでは指しています。本セッションでは、主にこの内容について紹介した
いと思います。
■ 本セッションでは使用するDCCツールは「Houdini」、ゲームエンジンは「Unity」にな
ります。
19
- 20. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics の必要性
○ モバイルゲーム等ではゲームエンジン上の物理シミュレーションを多用すると処理負荷が高
く問題が生じるため、このような手法が適宜必要になります。
20
- 21. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics の作成方法
○ 基本的にはHoudiniの「RBDtoFBX」ROPを使用してアニメーションをベイクしたFBXとして
コンバートします。
○ ボーンを使わずベイクするので、Unity上ではMesh Renderer扱いになります。
○ VATとしても書き出せますが、そもそもモバイルゲームでの負荷対策が主目的なので、FBX
のアニメーションとして書き出せる手法を優先しています。
■ 最終出力の方法をVAT用のギミックにすれば同じアセットからVATを書き出せるので、
VATが必要な場合でも追加コストは殆どかかりません。
21
- 22. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics の利点
○ DCCツールで作りこんだRBDのディテールやアニメーションをそのままゲームエンジンに持
ち込めるので、アート性が高かったり、作りこんだ優れたビジュアルの素材を持ち込めます。
22
- 23. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics の利点
○ FBXアニメーションとして書き出すとトランスフォームのアニメーションになるので、添付
gifのような「動きの途中からスローモーション」のような表現もゲームエンジン上で簡単に
できます。
23
- 24. ⒸKLab inc.
Baking Rigid Body Dynamics
● Baking Rigid Body Dynamics の利点
○ 前述のとおりFBXアニメーションとして書き出すとトランスフォームのアニメーションにな
るので、レイトレーシング化でも安定して動作します。
■ 古典的で堅実な手法ゆえに、レイトレーシングと組み合わせるのが大変な手法で起こる
ような問題を気にしなくて済みます。
24
- 32. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:RBD Object:UV
○ HoudiniはPointでアトリビュートを扱う事が多いのですが、この手のRBDで扱うオブジェク
トのUVをPointで管理すると、画像のように偏りができるケースが珍しくありません。
○ Vertexの方が自動で均等にUVが設定されやすいので、ひとまずVertexに設定して作業するこ
とが個人的にはお奨めです。
32
- 33. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:RBD Object:UV
○ 基本的にUVはUDIMで作られるので、ゲームエンジンで扱いやすいように単一のUV空間に収
めます。ゲームエンジンを用いた映像制作でこの項目を気にしなくて良いという場合は気に
しなくても良いのですが、0-1の範囲に収めておくとHoudini・Unity双方で何かと調整がしや
すいので、できれば0-1の範囲に収めておくことをお奨めします。
33
- 37. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:RBD Object:Fracture
○ 断面のディテールやカット数はアートやパフォーマンスに合わせて適宜調整します。
○ デフォルトの割れ方のギミックは割れ方に偏りができやすいので、画像のようにInput4に
「Scatter」SOP等を繋いでPointを自分で追加すると偏りを回避できます。
37
- 42. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:RBD Object:Inside
○ SideFXLabsの「Auto UV」ノードで、簡単に破砕面をUVアイランド化したUVにすることも
できます。
○ ただし、自動でアイランド化されているのでそのままテクスチャを張ると画像のような見た
目になります。テクスチャペイントツールを使う場合はこれでも良いのですが、そうでない
場合は破砕面毎にアイランドを作るUV展開はあまりしない方が良いでしょう。
42
- 43. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:RBD Object:Pack
○ エクスポートする際にPackされたジオメトリである必要があるので、「Assemble」や「RBD
Configure」ノードでPackし、PackジオメトリにしてからRBDのSimulationを行います。
○ Simulationするジオメトリの下準備はこれで完了です。
43
- 50. ⒸKLab inc.
汎用素材:破壊プロップ
● シーン説明:Simulation
○ Simulationには「RBD Bullet Solver」SOPを使用します。複雑なSimulationの場合はDOPnet
でSolverを自作する事もありますが、基本的に「RBD Bullet Solver」で問題ない場合が多い
です。
○ Simulation全般に言えることですが、Simulationが上手くいかない時はSolverの問題よりもそ
こに至るまでの下準備が適切でない場合が多いです。そのため、Simulationが上手くいかない
と感じたらまずは下準備を見直した方が問題解決に繋がりやすいです。
50
- 66. ⒸKLab inc.
汎用素材:鎖
● シーン説明:前提
○ 鎖は何も考えずにsimulationを行うと、「バラバラになる・吹っ飛ぶ・変な動きになる・計算
が重すぎる」等の状態になることが多いです。
■ そのためスマートに作業するためには少し仕込みが必要になります。
● 細かく全てを解説すると非常に長くなりますので、要点を幾つか紹介したいと思
います。
66
- 70. ⒸKLab inc.
汎用素材:鎖
● 要点解説
○ この手の複数のジオメトリを複製して一繋ぎにする場合は、Houdini18.5で追加された
ChainSOPが使いやすくておススメです。
■ 始点・終点の設定や複数ジオメトリの配置、線路のような形状への応用もできて幅広く
使えるSOPです。
70
- 72. ⒸKLab inc.
汎用素材:鎖
● 要点解説
○ Simulation用の素材は、VDB化を利用して画像のように元の形状にシェイプを詰めます。
○ これは映像制作では馴染み深い手法で、こうすることで鎖のようなものでも低負荷で破綻の
ないSimlationを行う事ができます。
72
- 75. ⒸKLab inc.
汎用素材:鎖
● 要点解説
○ 最後に「TransformPieces」SOPでSimulationジオメトリを最終的に使うジオメトリに差し替
えます。きちんと差し替えが行えていれば、「RBDtoFBX」ROPで最終的に使うジオメトリ
のFBXアニメーションを問題なく書き出す事ができます。
75
- 77. ⒸKLab inc.
その他注意事項
● Export
○ 「RBDtoFBX」ROPでエクスポートする場合はジオメトリをPackしておく必要があります。
■ Packすることにより、それぞれのピースを単一のトランスフォーム情報に落とし込む
ことができます。
■ 「name」かそれに準ずるアトリビュートとピースの相関関係を参照するので、この性
質を利用することで鎖の項目で述べたような「Simlationジオメトリと全く別のジオメト
リをアサインする」というような事をしても、上手く書き出す事ができます。
77
- 78. ⒸKLab inc.
その他注意事項
● 頂点数の変化
○ 頂点数が変わると「RBDtoFBX」ROPでは上手く書き出せないことが多いです。
■ 動的に頂点数が変化するジオメトリをUnityに持ち込む場合は、「FluidVAT」や
「Alembic」といった手法で書き出さないと基本的には上手く書き出せません。
● そのため事前に全てのピースを割っておく必要があります。
● 映像制作でよく使う「破壊等で実際に物が割れるまで割れてるように見せないた
めに該当要素を削除したり隠したりするテクニック」を使うと頂点数の変化が起
こるので、「RBDtoFBX」ROPで上手く書き出せなくなります。
78
- 79. ⒸKLab inc.
その他注意事項
● Constraint
○ Constraintは使用しても問題ありません。下記の画像もGlueで割れ感を制御しています。
○ 前述の通り頂点数の変化は上手く書き出せない場合が多いですが、Constraintを使用すること
で段階的に壊れるような表現を「RBDtoFBX」ROPで書き出す事ができます。
■ Group等でアクティブ・非アクティブを分けるのも有効です。
79
- 83. ⒸKLab inc.
Other tips
● シームレステクスチャの作成方法
○ UnityGrenoble様のHPで、普通の画像からタイリング可能なシームレステクスチャを作成す
る機能が公開されています。
■ ツールのインストールも必要なく、知っておくと何かと便利な手法です。
83
- 84. ⒸKLab inc.
Other tips
● シームレステクスチャの作成方法
○ UnityGrenoble様のHPで、普通の画像からタイリング可能なシームレステクスチャを作成す
る機能が公開されています。
■ ツールのインストールも必要なく、知っておくと何かと便利な手法です。
84
・Before ・After
- 85. ⒸKLab inc.
Other tips
● Houdiniで画像からNormalmapを作成する方法
○ COPの「NormalFromGrayscale」ノードで簡単に画像からNormalmapを生成できます。
■ 「NormalLevels」ノードで法線の強弱も調整可能です。
■ 画像からNormalmapを作成する手段は他にもありますが、Houdiniだとアセット化や
PDGで効率化して作業ストレスや手数を軽減し易いです。
85
- 86. ⒸKLab inc.
Other tips
● HoudiniでSpriteSheetを簡単に作成する方法
○ COPの「Mosaic」ノードで簡単に画像からSpriteSheetを生成できます。
■ Normalmap同様SpriteSheetを作成する手段は他にもありますが、Normalmap同様に
Houdiniだとアセット化やPDGで効率化して作業ストレスや手数を軽減し易いです。
86
- 87. ⒸKLab inc.
Other tips
● VertexAnimationTextureフォルダの注意点
○ SideFX社様が提供しているShaderを使う場合、Unityのパッケージマネージャから該当デー
タをロードする事が多いと思います。
○ HoudiniのVertexAnimesionTextureノードに記されたパスはオリジナルデータのパスなので、
そのまま使用して中身を改変・削除等を行うと今後同様のパスを参照する要素全てに影響が
生じます。
■ オリジナルデータを誤って上書きしないためには以下のような対策が有効です。
● オリジナルデータのフォルダを参照するが、中に入っているShader等を複製して
使用する。
● パッケージマネージャで参照するフォルダ一式を別の場所にコピーし、そちらか
ら参照するようにする。
87
- 89. ⒸKLab inc.
Other tips
● Alembicについて
○ 映像制作利用想定の場合
■ 指標として、30~40万ポリゴン位のデータの場合、Unityでの再生時にそこまで重くな
ることもなく再生できます。
■ Alembicのファイルサイズも10GB~20GB位だと、初期の読み込みには少し時間がかか
りますがそれ以降はスムーズに扱って作業できます。
● 私はこれくらいのファイルサイズを目安にオプティマイズしています。
■ Github上にもLFSで問題なくアップできます。
● ただし、大容量のファイルをバージョン管理ツールで共有するかは会社やプロジ
ェクト次第なので、個々人の環境で各々判断が必要です。
89
- 91. ⒸKLab inc.
Other tips
● PolygonSoupに関する注意点
○ 2021年4月時点だと、「Sweep」や「ParticleFluidSurface」等のよく使うメッシュ生成ノード
のデフォルトがPolygonSoupになっている事が多いです。
○ PolygonSoupだとPolygonと比べて、見た目は一見変わらずにキャッシュサイズが半分位にな
ります。
■ 映像制作ではこれでも良いのですが、PrimitiveやVertexはPolygonSoup化されることで
アトリビュートの調整ができなくなり、それらを基にしたUVや頂点情報も正確ではな
くなるので、後からアトリビュートを調整したりゲームエンジンでの使用を想定してい
る場合はPolygonにする必要があります。
○ 「Convert」SOPでPolygonSoupからPolygonに変換できます。
■ ただし元データと比べてPolygonの順番が異なる場合があるので、ゲームエンジンで使
用するデータを作る場合は、PolygonSoupを使用しない方が安全だと思われます。
○ Pointの情報は殆ど維持され、Houdiniの作業時もPointを扱うことが多いので気づき辛いので
すが、作業の途中で意図せずPolygonSoupに変換され、後で気づいて問題になるということ
もあるので注意が必要です。
91
- 92. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ VertexAnimationTextureを使わないSoftbodySimulationのHoudiniからUnityへのコンバート手
法として、主にHoudiniの「SideFXLabs Skinning Converter」ノードを使用し、Unityに
SkinnedMeshRenderer扱いのボーンベースアニメーションに変換して持ち込む手法がござい
ます。
92
- 93. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ CEDEC2020でこの手法について登壇しましたので、興味のある方は弊社のホームページの方
で資料を一般公開しているのでご覧ください。
■ CEDEC2020の資料Link
93
- 94. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ 前述の「Skinning Converter」を使用した手法ですが、CEDEC2020登壇時のHoudini18の段階
では、「プロシージャルアセットにできてアプローチとしても有用ではあるが、当時のボー
ンの仕様も相まって少々使い辛い」という状態でした。
94
- 95. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ Houdini18.5になり、KineFXが登場したことでボーン周りの扱いが大幅に改善され、
「Skinning Converter」も大幅に使い勝手が向上しました。
○ Houdini18以前で作業する場合は私がCEDEC2020で登壇した手法で良いのですが、
Houdini18.5で作業する場合はバージョンアップした仕組みを使用した方が良い場合が多いの
で、Houdini18.5における「Skinning Converter」の使い方を簡単に紹介いたします。
95
- 97. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ Houdini18以前のSkinningConverter
■ ボーンへのベイク時にサブネットが生成されます。
■ KineFX以前のボーン仕様なので、ボーン用のノードがサブネット内に大量に生成され
ます。
■ エクスポート時は、この生成されたサブネットを指定する必要があります。
■ シーンファイル内にベイクされたデータを保持するのでデータサイズがHoudiniのシー
ンファイルにしては大きくなります。
97
- 99. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ Houdini18.5のSkinningConverter
■ 「SkinningConverter」ノードに直接ノードを繋いでメッシュやボーンを確認・エクス
ポートできます。
■ シーンファイルのサイズも、通常のシーンファイルと同等です。
99
- 100. ⒸKLab inc.
Other tips
● Skinning Converter in Houdini 18.5
○ まとめ
■ KineFX対応でバージョンアップしたHoudini18.5仕様の方が、総じて使いやすく個人的
にはお奨めです。
■ ただし、従来の仕組みも依然として有用です。
● そのため、諸事情によってHoudini18以前のバージョンで作業する必要がある場合、
SoftbodySimulationのベイクのアプローチとしては従来の仕組みも有効です。
100