actionScript書きの日記

アラフォーFlashデベロッパのブログ。actionscriptやobjective-cを経て、現在はUnity、Spine、AfterEffectsがメイン。

Houdiniで作成したFlowMapの書き出しとUnityでの使用 その1

前提

HoudiniでFlowMapを作成し、必要なデータを書き出してUnityに読み込んで表示する。

 

作業内容の概要

  1. HoudiniでFlowMapを適用するためのジオメトリを作成。
  2. HoudiniでFlowMapを作成。
  3. FlowMapの画像を書き出し。
  4. ジオメトリをFBXで書き出し。
  5. 書き出したFBXをUnityにインポート。
  6. UnityでFlowMapを表示するためのシェーダーを作成し、読み込んだFBXに適用。

大体上記のような流れになる。

 

参考資料

以下の動画を参考にさせて頂いた。この場を借りて感謝申し上げる。

youtu.be

www.sidefx.com

便宜上、前者の動画を「Youtubeの動画」、後者の動画を「SideFXの動画」と呼ばせていただく。

SideFXの動画の方が説明がゆっくりで分かりやすいが、Houdiniのバージョンが16.5とやや古く、その分Youtubeの動画の方に分がある。Youtubeの動画の方も、いちおう主要なノードはパラメータを表示してくれているので、一時停止しながらゆっくり追えば理解はそう難しくはない。ただ一部の主要ノードのパラメータが表示されない部分はあるので、そこは頑張って埋めるしかないだろう。

 

FlowMapを適用するためのジオメトリの作成。

正直、面倒くさければGridノード一個で済ませてしまって構わない。上記に挙げた動画は2つとも、地形を作成してそこを流れる河の水面のジオメトリを作成し、そこにFlowmapを設定しようとしている。このプロセスもまた非常に面白いのだが、FlowMapには直接関係がないので詳細は割愛する。興味のある方は、Youtubeの動画の方の冒頭部分を是非ご覧頂きたい。

f:id:goodbyegirl1974:20211217153253j:plain

基本となる地形の生成は上記の構成。HeightField系のノードを使用して凹凸のある平面を作成している。

f:id:goodbyegirl1974:20211217153458j:plain

河として使用する平面の作成は上記の構成。Addノードによるポイントの追加は後々での修正対応を考慮したやり方だそうで、Curveノードで代用しても問題ない。生成済みの基本地形の凹みの部分に合わせて曲線を設定してResampleしてポイント数を増やす。その後、その曲線と元の基本地形をRayノードで対応させた後に、Sweepノードで平面化している。

f:id:goodbyegirl1974:20211217153942j:plain

ここで大切なのは、曲線を設定した状態でUVTextureを設定すること。上手のように、V軸方向に一本伸びるように設定する。

f:id:goodbyegirl1974:20211217154554j:plain

その状態でSweepノードを使用して平面を作成すると、上図のようにUV平面がV軸方向に伸びるようになる。このUV平面を、縦横ともに1に収めるように設定を行う。

f:id:goodbyegirl1974:20211217154726j:plain

Sweepのもととなるラインを設定した際に、ポイントNoに対応した変数を設定する。ここでは「PT_num」という名前で生成した。

f:id:goodbyegirl1974:20211217154938j:plain

ポイント数の合計はResampleノードの「segs」パラメータから取得できる。「Input Max」の欄に「ch("../River_points/segs")」と入力して、変数「PT_num」をAttributeRemapノードで0~1の間に収めるように設定する。

f:id:goodbyegirl1974:20211217155435j:plain

AttributePromoteノードで、Vertexに設定されているuvをPointに移行した上で、AttributeWrangleノードで「@uv.y = @PT_num;」と入力する。これでUVが0~1に収まるようになる。

f:id:goodbyegirl1974:20211217155630j:plain

ここまで設定した上で、FlowMapの作成に入るが、作成自体は非常にシンプルな構成となっている。まずFlowMap生成のベースとなるジオメトリに接続する形で「Labs Flowmap」ノードを作成し、そこに「Labs Flowmap Guide」ノードを接続する。この「Labs Flowmap Guide」の第2接続に繋がれたジオメトリに沿ってFlowMapが生成される。今回は河の平面を作成する際に使用した曲線を接続したが、新たにガイドを作成しても問題ない。SideFxの動画では、Curbノードで新たにガイドとなるジオメトリを作成している。

障害物を置きたい場合は「Labs Flowmap Obstacle」ノードを生成し、第2接続に障害物のジオメトリをつなげる。次に「Labs Flowmap to Color」ノードでFlowMapを色に変換した後、「Labs Maps Baker」ノードで書き出せば完成だ。

使用したジオメトリはFileメニュー内のExportから別途FBXで書き出しておき、全てUnityに持っていく。この後UnityでFlowMapを使用するにはShaderGraphなどでカスタムシェーダを作成する必要がある。こちらもまた、非常に丁寧な動画を上げてくださっている方がいるのだが、これに関しては記事を分けたい。本稿はここまでとする。