読者です 読者をやめる 読者になる 読者になる

#memo

不正確な内容です、UE4についてが多い

Houdiniで作成したエフェクトをUE4で動かす(VertexAnimationTexture)

https://i.gyazo.com/402f56d844b1ee6c36d80903461e0c06.gif

先日のGDC2017での公演、Houdini側で頂点アニメーション用のテクスチャを生成してUEで読み込むことで、Houdiniで作成したエフェクトがUE内で表現できちゃうというものがあった

vimeo.com

UE側にプラグインを入れて云々というものではなく、あくまでHoudini側でこういったツールが用意されたという話で(去年からあったっぽいけど)、UEというよりHoudini側の話がメインです

今回はとりあえず爆発(煙)をやる、男の子は皆爆発が好きなので
あと自分用のメモ&Houdini普段そこまで触っていないため、上記の動画を見ながらやるのが一番正確です


概要

Houdini

  1. 適当なシミューレーションを作成
  2. Volumeをポリゴン化
  3. VertexAnimationTextureでジオメトリとテクスチャを生成、書き出し

UE4

  1. ジオメトリとテクスチャをインポート
  2. マテリアルを作成、適応
UE4 4.15.1
Houdini 16

ツール等、細かい説明は省いてます、必要最低限


準備

16は最初からGameシェルフとツールが用意されているけれど、動画で使用しているものとバージョンが違うので最新のものを用意する
これはgithubから最新のものをダウンロードする方法と、上記vimeo内にあるサンプルプロジェクトに同梱されているものを使用するのどちらかをやる

githubからダウンロードする
github.com

githubにあるDevelopmentBranchのzipファイルをダウンロード、wiki内にあるinstallationにしたがってファイルを移動させておく

サンプルプロジェクトのものを使用する
上記Vimeo内にUEプロジェクトとGaveDevelopmentToolsetが同梱されたzipファイルリンクがあるので、これをインストールする
ueプロジェクトは詰まったときに設定を参考にしたり、レベルを見ておくだけでも楽しいのでダウンロードしておいたほうがよいです


シミュレーション作成

とりあえずなので、適当にシェルフのExplosion辺りで済ませる、作成できたらGlobalAnimationOptionからEndは短めにしておく

/obj/pyro_import
https://i.gyazo.com/ff4055328ca210696c20d9721ff2ac52.png

  1. objチャンネルのpyro_importに入ってimport_pyrofieldsにdeleteノードをつなげる
  2. Groupでdensityを選んで、OperationをDelete Non-Selectedに変更、Density以外いらないので消しておく

ConvertVBDを二つつなげてVolumeからPolygonに変換する
https://i.gyazo.com/aec5fc0b3ded557744693fa4990c3a81.png
https://i.gyazo.com/3a2b5c8232f2f3c5d838a5f09cedf2d0.png

  1. Isovalueを調節して好みの形に整える

https://i.gyazo.com/d0a8269a28ea3c30cc146f46f5845f83.png

  1. PolyreduceノードのNumberでポリゴン数を固定、とりあえず5000くらいにしておく
  2. EqualizeEdgesを1にしておく

VertexAnimationTexture書き出し

outチャンネルに移動してVertexAnimationTextureノードを作成

https://i.gyazo.com/693af2ea389f7ce64879e089e0024ff4.png

Developerの方を入れていると、このようにBeta版がヒットして、そちらです

https://i.gyazo.com/0074bfc3246b64690928c8153cf5447b.png

  1. MethodはFluidに、トポロジーがぐちゃぐちゃ変わるものはこれっぽい
  2. ExportNodeは /obj/pyro_import
  3. TargetPolycountは先程Polyreduceで固定した数に
  4. EqualizeEdgesにチェック
  5. TargetTextureSizeは書き出されるテクスチャの横サイズ、縦は動的に変わるので1024でも2048でもなんでも良い?
  6. GeometryPathを適切なところに設定
  7. NormalizeDataTo0-1spaceにチェック
  8. PackNormalintoAlphaにチェック、1枚必要なテクスチャが減る
  9. Cd設定してたりならExportColorMapもチェック、今回はやってないのでパス

これで左上のRenderを押してテクスチャ、ジオメトリが書き出されるのを待つ、Houdiniでの作業はこれで終わりだけれど、あとでUEのマテリアル設定のさい数値を参照したりするのでつけっぱなしにしておく


UE4にインポート

UE4の適当なプロジェクトにいま生成された二つのファイルをインポートする、インポート設定は、インポート後に変更してからのリインポートでなんとかなるのでとりあえず適当に

https://i.gyazo.com/35ce889fda1834872f53682c004f7e75.png
インポート出来たらマテリアルを作成


マテリアル設定

マテリアルグラフを開いたら、ここで一度Houdiniに戻り、VertexAnimationTexturesノードの下部にあるFluidVertexAnimationUE4Codeをクリックする

https://i.gyazo.com/9a047b77201f725daa82d86cb92e3447.png

展開されると大量の文字列がありこれを全選択してコピーしておく
UE4のマテリアルグラフに戻り、ペーストするとネットワークが自動で生成されるので、コメントに従ってOutputにノードを繋いでいく

https://i.gyazo.com/36839439473c4146f91b7e49da07ec54.png

一番右側のコメントにもあるけれど、まずDetailタブからNumCustomizedUVsを3、TangentSpaceNormalをDisableにする必要があるので、先にやっておく

https://i.gyazo.com/2be2ab65b684afe58b0a6486d66c92fd.png

一通りノードをつなぎ終わったのを確認したら、エディタに戻り、今のマテリアルからマテリアルインスタンスを作成し、これを編集する

https://i.gyazo.com/33634ea5905e2ee4f2d5d9544418d689.png

ここでまたHoudiniをちら見する、以下の表に対応するように数値をコピペする

UE4 Houdini
Bouding Max BBOX MAX
Bouding Min BBOX MIN
num_franes Number of Frames
PositionMap インポートしたPosテクスチャ

最後に、インポートしたメッシュを開きいま設定したマテリアルインスタンスを適応する
この時点では90割くらいでグリッチが出まくっているはず、きれいな人はクリアです

まずLOD0にある設定を見る

https://i.gyazo.com/7508fc4a7e918bfedaa7d6cab1dd5c51.png

デフォルトだとUseFullPrecisionUVsにチェックが入ってないはずで、ここにチェックを入れたら下にあるApplyChanges、これで大抵全クリになるはずだけれど、大抵どこか間違ってておかしいので以下チェックリストになります

  • 動画をちゃんとみる
  • サンプルプロジェクト(Vimeoにあるもの)の設定と見比べる
  • シミュレーションやりなおすと大抵BBOXMaxMinも変わっている
  • 全体フレーム数はEndの数値ではない…
  • カクついてるように感じる時はMIでSpeedを上げるか、Houdiniのフレーム数を変えるかをする
  • テクスチャ設定はUE4デフォルトの物で良い

今回触っていない部分としては

  • カラーテクスチャ書き出しはフレームごとのCdが書き出される、temperature辺をUEに持っていくとEmissiveのマスクとして使える
  • 他にもトポロジが変化しない(布など)もの等のエフェクトを書き出せる

おわり