この記事では、Houdini 21の新機能である コペルニクスの「Cop Pyro 」を使用した所感と1つのエフェクトを例に挙げて設定方法とUnreal Engine の Niagara へ組み込むまでの一連のフローをご紹介します。
対象読者
・エフェクトデザイナー
・Houdini の基本的な操作を理解している方
・Unreal Engine の基礎的な操作を理解している方
環境
・Unreal Engine 5.6
・Houdini 21.0.440
目次
コペルニクスとは
コペルニクス(Copernicus)とは、ノードベースで画像作成が処理を行う事が出来る仕組みで、複数のノードを組み合わせる事により様々な表現を作る事が出来ます。 またGPUで動いている為旧COPより動作が軽いようです。
簡単な作り方
①ネットワークビューの obj 階層で「Tabキー」を押し【cop】と入力すると「COP Network」という項目が出てくるのでそれを選びます。(obj だけではなくgeo ノードの中や img / out 階層内でも作れます)

ちなみに COP Network -Old は旧世代の Compositing用ネットワークでコペルニクスではないのでご注意ください。

②cop net が作られるのでその中に入り「Tabキー」を押し【 fractal noise 】を入力するとすると以下の様に fractal noise ノードが作られ同時に Scene View , Composite View に反映されます。
③再度「Tabキー」を押し、今度は【 bright 】ノードを追加します。先ほど作った fractal noise の出力にある「noise」をマウスドラッグすると線が伸びるので、それを bright ノードの入力にある「source」に接続します。次にこの ノードを選択すると parameters ウィンドウに該当ノードのパラメーターが表示されるので変更しディスプレイフラグを入れると変更された結果を確認する事が出来ます。

コペルニクスを使ったテクスチャ作成についてはこちらでも紹介していますので、よろしければどうぞ
Cop Pyro について
Houdini21 からこのコペルニクスに Cop Pyro というCop 内で流体シミュレーションが出来る仕組みが追加されました。これによりリアルな炎や煙などが作れる様になっています。 公式ドキュメント
7つのプリセットが揃っています
Cop Pyro が複雑なノード構成になっているので、慣れるまではHoudini に予め登録されているプリセットを使う事をおススメします。こちらは「Tabキー」を押し【 pyro configure 】と入力すると出てきます。

プリセット「Pyro Configure Billowy Smoke 」の中身を触ってみます。
今回は pyro Configure Billowy Smoke を例に上げてご紹介していくので、選択して作成します。

・・・・凄い数のノードが作られましたね(汗
ただ、大丈夫です! 次にご説明していきます。
ノード群の説明(概要)
全ノードのご説明は今回割愛させて頂きますが、ノードの働きとして以下5つのグループに分かれています。
①発生源—– 炎、煙が発生する箇所を設定するグループ(画像の明度が高ければ高いほど、発生度が高くなります)
②密度—– 密度の発生率、消滅率の調整をするグループ
③速度(動きと乱流)—– 単一の動きや乱流(ノイズ)を与えるグループ
④温度—– 温度を調整するグループ
⑤ライティングと色—– 炎や煙等の色や濃さを調整、また煙に対してライティングをするグループ。それ以外に描画するカメラを設定する事が出来ます。

・ちょっとしたTips
またライトを複数組み合わせる事が出来るので下図の様に6way ライティング用の素材も出す事が可能です。

いくつか値を編集していきます
今回は ゲームエンジンで汎用的に使われやすい「1ショットでの煙」をこのプリセットから編集して作っていこうと思います。
発生源の調整
ではまず発生源の元になっているノード【sdfshape】を編集していきます。プリセットだとハートになっているので Shape Class を Basic にして Basic Shapes を Circle にします。 次に、Radius(半径)を1にして Translate の値を0にして原点位置にします。

また現状だと常に発生源が表示され煙が出続けている状態になっている為、その次にある【sdftomono】にある Shape に12フレームまでは1、13フレームで0になる様にキーアニメーションを設定します。

次に煙に厚みを付けたいので【pyro_sourcefromlayer】【layertovdbleafpoint】にある Thicknessを0.2に増やします。こうする事により奥に厚みが出るので発生範囲が広くなります。

速度回りの調整
発生源の調整が出来たので次は速度回りを調整していきます。③速度(動きと乱流)グループにある【pyro_unifromforce】で単一の動きが設定されているのですが、現状だと+Yに値が打たれている為、上方向に煙が動いてしまってます。

これだと意図した動きにならないので、Scale を5にして、Directionを全て0にしておきます。動きとしては放射状に広がる動きになって欲しいのでノードで方向を作っていきます。1から構築していってもいいのですが、他のプリセットからノードを移してこようと思います。 作業中のノード群と混在しない様にもう一つcop ノードを作りその中でプリセット【Pyro Configure Color Smoke 】を作り、以下赤枠内にある4つのノードをコピーして作業中の方ににペーストします。(コピーしたノード:ramp , slopedir , uvtorgb , inward_velocity)

移してきたノード群を調整していきます。まず【slopedir】の Angle が180になっているのでこれを0にします。

次に強度調整用に【bright】ノードを 【uvtorgb】と【inward_velocity】ノードの間に入れ、Brightness の値を100にします。

まだ本流のノードと接続されてない為、接続していきます。【pyro_block_begin】のアウトプット「v」を【inward_velocity】のインプット「vdb_ref」に繋ぎます。また、このノードのアウトプット「sample」を【pyro_uniformforce】のインプット「direction」に接続します。

この様に組む事により四方に広がる方向を設定する事が出来ます。
ベースの動きが出来たのでここからは細かい動きの調整をしていきます。まずは、pyro_uuniformforce ノードの横にある【pyro_disturblance】を編集していきます。ここでは乱流(空気のうねり)を制御しておりこの中の「Block Size」を 0.25に変更します。

個人的には良い流体の形を作れるかはここで決まる気がしているので、皆様の方でよい値を見つけてみて下さい。
温度の調整
動きの最後の調整として ④温度 グループにある【bright】の「Brightness」を10→1に変更します

密度の調整
あとは出力する位なのですが、煙が少し薄いので最後にあるノード【rasterizevolume】の「Density Scale 」を100に増やします。

煙自体はこちらで完成になります。
UE5用に出力とNiagara に組み込み
ではこの煙をUE5用にHoudiniから出力して Niagara に組み込んでいきます。
スプライトシートとして出力
シーケンス画像をゲームエンジンに持ってくる場合、スプライトシートという連番を1枚の画像に合成したものを出力する必要がありますので、一度シーケンスとして出力します。rasterizevolume ノードの後に【ROP Image Output 】ノードを作り繋げ出力します。

次に Cop を使い尺調整やスプライトシートを作っていくのですが、コペルニクスだと時間指定やシーケンスをタイル化出来ない為、ここは旧Cop を使用していきます。(これに関しては私が知らないだけの可能性もありますので、ご存じの方が居りましたら教えて頂けると幸いです)
obj階層で Tabキーから旧Cop【COP Network – Old】を作り中に入ります。

各ノードを作り設定していきますが、構成が複雑ではない為一覧した画像を元に説明していきます。
①File ノード — 前工程で出力したシーケンス画像を読み込んでいます。
②warp ノード — シーケンス画像に対してタイムストレッチを掛けています。1フレーム時→10枚目、36フレーム時→60枚目
③mosaic ノード — スプライトシートを作るノードです。今回は縦横6枚ずつ計36枚が収録された画像にしたかったので、「Image per Line 」を6、 「Max Image /Frame」を36にしています。
④scale ノード — 画像を拡縮する事が出来るノードです。解像度を直接数値で指定する事が出来ます。
⑤ROP file Output ノード — 画像を出力するノードです。

UE5にテクスチャ読み込みとマテリアル設定
ROP file Output ノードから出力出来たら。今度はUE5に読み込んでマテリアル設定をしていきます。
コンテンツブラウザからテクスチャをインポートして右クリックから「Material」を選択しアセットを作成します。

Blend Mode を「Translucent」に変更し以下の様に「Texture Sample」ノードと「Particle Color 」ノードを作成し「Multipy」で掛け算後 Base Color と Opacity に繋げています。

今度は同じくコンテンツブラウザから「Niagara System 」を作り以下を設定していきます。

今回は1つ1つのモジュールについては今回割愛させて頂きますが、スプライトシートをNiagara で扱う為には分割数と枚数送りが必要になりますので、⑤Sub UV Animation モジュールで枚数送りの設定、⑥Sprite Renderer にある「Sub Image Size 」で分割数を設定しています。
意図した絵になる様に値の調整が済んだら完成になります。

まとめ
今回はプリセットをベースに編集しながら作業を進めましたが、コペルニクスには多彩なノードが揃っていて、出力前に「絵画調にする」など遊び心のある表現も試せるのが面白いところだと感じました。今後の制作でも積極的に活用していきたいです。
一方で、旧COPでしか扱えないノードもまだ存在するため、それらをどう代替していくか(あるいは別ルートで同等表現を作るか)が、個人的な課題になりそうです。
以上で終わりたいと思います。ご一読いただきありがとうございました。

