こちらの記事では、「Labs Fire Presets」「Labs Motion Vectors」ノードの概要および各ノードのパラメータについてご紹介します。SideFXLabsツールのノードは、SideFX社のホームページで紹介されています。併せてご覧ください。
SideFXLabsツールのインストール手順
SideFX Labsツールセットのインストール手順については、以下の記事をご参照ください。
●Houdiniの内部システムからの直接インストール
●Githubからの手動インストール
Labs Fire Presets Objectノードとは
炎のシミュレーションを素早く生成、レンダリングし、トーチのような小さなものから大小高さ1mまで様々なサイズをプリセットで設定できます。ソースジオメトリの設定とボリューム化、シミュレーションとビジュアライズ、シェーダーノードなど、基本的な炎の作成に必要なノードのパラメータを抽出し、Object階層から制御可能としたアセットノードです。
パラメータとタブについて
Labs Fire Presetsのパラメータは大きく分けて5つの操作項目があります。
1.Cache
キャッシュファイルを書き出すための設定と作成する炎のタイプを[Presets]から選択できます。
2.Simulation Tab
シミュレーションに必要なボクセルサイズや、形状や炎の高さなどを制御するためのパラメータが用意されています。
3.Source Tab
ソースボリュームを作成するためのソースジオメトリの設定を行います。
4.Visualization Tab
シーンビュー上におけるルックを調節します。
5.Transform Tab
ソースジオメトリの位置やピボットを調節します。
各パラメータについて
1 Cache
1.Load from Disk
一度書き出したscファイルを読み込む場合はチェックを入れます。
2.Reload Geometry
scファイルの再読み込みを行います。
3.Geometry File
scファイル書き出し先のパスを指定します。
4.Save to Disk
Geometry Fileパラメータで指定した出力先に、scファイル形式でジオメトリを保存します。
5.Save to Disk in Background
バックグラウンドでHoudiniのコピーが起動し、そのコピーがジオメトリを処理して保存します。
6.Valid Frame Range
ファイルを書き出すモードを指定します。
7.Start/End/Inc
書き出すフレーム範囲(開始フレーム、終了フレーム、増分値)を指定します。
8.Render with Take
レンダリング時に特定のテイクの設定を使用します。レンダリング時に現行テイクを使用する場合は、 Currentを選択します。
9.Presets
炎の生成パターンを指定します。
2 Simulation Tab
1.Reset Simulation
シミュレーションキャッシュ全体をクリアします。
2.Division Size
ボクセルのサイズを調節します。これによって、指定したサイズのボックスに合うボクセル数が計算されます。
3.Display Simulation
シミュレーション結果の表示/非表示を切り替えます。
Source
4.Scale Source Volume
fuel field と temperature fieldに加えるスカラーボリュームのスケールを調節します。
Pyro Solver
5.Flame Height
炎に対するスケール係数を調節します。値が高いほど背の高い炎に、値が低いほど背の小さい炎になります。
6.Dissipation
Smoke(Density)を時間軸で消失させます。値が低いほど煙の消失が遅くなり、値が高いほど煙の消失が速くなります。
Shape
7.Disturbance
シミュレーションの全体的な動きや形状を変更することなく、特定のサイズのディテールを煙や炎に取り入れます。
8.Shredding
Heatフィールドの勾配に基づいてVelocityフィールドを操作する際の度合いを調節します。
9.Turbulence
Velocityフィールドに乱流を追加します。
10.Turbulence Swirl Size
Swirl(旋回)のおおよそのサイズを設定します。
Advanced
11.Use OpenCL
マイクロソルバに対してGPUアクセラレーションを有効にします。
12.Min Substep
サブステップの最小値を調節します。
13.Max Substep
サブステップの最大値を調節します。
3 Source Tab
1.Display Source
ソースボリュームの表示/非表示を切り替えます。
2.Half Sphere
デフォルトのソースジオメトリ(sphere)を使用する際に、ブーリアン演算を使用してソースジオメトリを半分にカットします。
3.Source Geometry
自身で用意したソースジオメトリを使用する場合、ソースジオメトリまでのパスを入力します。
4.Method
入力ジオメトリのサンプリングで使用するメソッドを選択します。
各種メソッド
Build SDF From Geometry :
入力されたボリュームプリミティブから Laser Scan または Minimum Distance のいづれかを使用し、SDFを構築します。
このメソッドは、サーフェス化したジオメトリに対して使用することができます。
Stamp Points :
入力データが点群の場合に使用可能なメソッドです。サンプリングしたPointアトリビュートからボリュームを作成します。
Sample Volumes :
入力データがSDFボリュームの場合に有効なメソッドです。
Source Size
5.Scale
ソースジオメトリのスケールを調節します。
6.Uniform Scale
ソースジオメトリのUniform Scaleを調節します。
7.Container Padding
シミュレーション領域の余白を調節します。
Noise
8.Cell Influence
Cellular(細胞状)ノイズの影響度を調節します。
9.Pulse Duration
ノイズが動く速さを調節します。値が高いほど、移動が遅くなります。
10.Offset
Turbulenceパターンをオフセットします。
11.Element Size
ソースボリュームの初期要素サイズを調節します。
4 Visualization Tab
1.Volume Resolution
現在のシミュレーションで使用されているボリュームの解像度を確認することができます。
2.Density Scale
ボリュームの不透明度を制御するdensity fieldの表示濃度を調節します。
3.Shadow Scale
ボリュームをライティングに使用する際、Density Scaleの後に適用されるdensity fieldに対する追加乗数を調節します。
4.Set Max Res
Max Vis Resパラメータを使用可能にします。
5.Max Vis Res
表示するボリュームの解像度を調節します。デフォルトでは、ボリュームは各側面に対して最大128ボクセルに制限されます。
Smoke
6.Density Field
ボリュームプリミティブの値をnameアトリビュートとマッチさせ、Density Fieldの可視化を行います。
7.Mode(Density)
ランプのモードを変更します。
8.Density
Density Rampの形状を変更します。
9.Density Ramp
Density Fieldパラメータに設定されたフィールドに対して、マッピングする数値を調節します。
10.Diffuse Field
カラーとして使用するフィールド名を設定します。
11.Diffuse Range
Diffuse Rampに割り当てる値の範囲を設定します。
12.Mode(Diffuse)
ランプのモードを変更します。
13.Diffuse
カラーランプによる色の割り当てをメニューから変更できます。
14.Diffuse Ramp
可視化するフィールドの色合いを調節します。
Emission
15.Emission Scale
可視化した際の発光度合いを調節します。
16.Emission Field
発光箇所を設定するための勾配として使用するフィールドを設定します。
17.Emit Range
発光に使用する範囲の数値範囲を設定します。
18.Mode
Emission Ramp のモードを変更します。
19.Emission
Emission Ramp の形状を変更します。
20.Emission Ramp
発光箇所をRampパラメータによって任意にマッピングします。
21.Emission Color Field
疑似的な色の割り当てに使用するフィールドを指定します。
22.Emission Color Range
Emission Color Rampに割り当てる値の範囲を設定します。
23.Mode
Emission Color Rampのモードを切り替えます。
24.Emission
カラーランプによる色の割り当てをメニューから変更できます。
25.Emission Color Ramp
可視化するフィールドの色合いを調節します。
5 Transform Tab
こちらの各パラメータは、Geometry ObjectノードのTransformタブ内のパラメータと同じものになります。発生させた炎オブジェクトに対して、ワールド座標を移動させる際に使用できます。
■補足:Transformタブの使用について
こちらでは、下画像のようにシミュレーションを開始し、炎の位置のみを移動させる例について紹介します。
TransformタブのTranslateパラメータのX座標値に3を入力します。
こちらでは、シミュレーションの途中で座標値を変更したため、計算領域の位置も変更され、再シミュレーションが必要です。
SimulationタブのReset Simulationボタンを押して、再度シミュレーションを計算します。
すると、下画像のように、炎の位置が移動していることが確認できます。
Transformタブは名前の通り、Transformを行う際に使用するパラメータが格納されたタブになります。
Labs Fire Presets Objectノードの機能
次に、Labs Fire Presets Objectノードの機能についてご紹介します。今回は、Houdini18.0.532を使用しています。
Houdiniを起動後、SideFX Labsツールが正常に読み込まれていることを確認します。Object階層にLabs Fire Presets Objectノードを作成します。
Labs Fire Presets Objectノードには、炎のシミュレーションを容易に行うことができるように、予めいくつかのプリセットが用意されています。
プリセットの切り替えは、Presetsパラメータからプルダウンメニューを開き、選択することができます。
Presetsパラメータから切り替えができるモードのうち、choose、1m_wide_high、1m_wide_lowの3つのモードで作成した炎を下の動画で示します。
Presetsパラメータから切り替えができるモードのうち、[torch_fire]、[small_fire]、[1m_wide_hight_preview]の3つのモードで作成した炎を下の動画でご紹介しています。
[torch_fire]、[small_fire]については、かなり小さい炎が作成されます。
[1m_wide_high_preview]は、[1m_wide_high]の解像度を少し下げたモードになります。
Presetsパラメータから切り替えができるモードのうち、[1m_wide_low_preview]、[torchl_fire_preview]、[small_fire_preview]の3つのモードで作成した炎を下の動画でご紹介しています。[1m_wide_low_preview]は、[1m_wide_low]の解像度を少し下げたモードになります。
その他、2つのモードについても同様に、[torch_fire、small_fire]の解像度を少し下げたものになります。
Labs Fire Presets ObjectノードのSourceタブ内に、[Half Sphere]と[Source Geometry]という項目があります。これが、発生源の切り替えを行うパラメーターになります。
Labs Fire Presets Objectノードの内部は、発生源となるオブジェクト、DOP Network Objectノード、Material Networkノードなどが用意されています。
fire_sourceの内部には、デフォルトで用意されている発生源(Half Sphere)と、独自に用意した発生源(Source Geometry)を切り替える仕組みが用意されています。この内部では、下画像のようにSwitch SOPノードを使用して切り替えます。
この切り替えは、Labs Fire Presets ObjectノードのSourceタブ内に用意されているSource Geometryパラメータにパスを入力することで実行できます。
下の例ではTest Geometry : Pig Headを作成して、読み込んでいます。
Labs Fire Presets Object ノードについての紹介は以上です。
サイズの異なる炎の表現をシミュレーションするために一から作成した場合、ボクセル数と各パラメータとのバランスの調節を行う必要があり、時間が掛かる場合があります。
Labs Fire Presets Objectノードは、予めベースとなる数値が設定されているため、容易に炎を作成することができます。
Labs Motion Vectors ROPノードとは
速度フィールドまたはポイントアトリビュートを基に、シェーダーでモーションのリタイミングを可能にする2Dモーションベクトルを生成します。
各パラメータについて
1.Render
レンダリングを開始します。
2.Start/End
書き出しの開始フレームと終了フレームを指定します。
3.Export Node
object階層内にある出力用のジオメトリノードを指定します。
4.Camera
レンダリング用のカメラを指定します。
5.Output Picture
連番ファイルの出力先を指定します。
6.Motion Vectors Map
アトラス化された連番ファイルの出力先を指定します。
7.Image per Line
タイリングする際の一列あたりの連番ファイルの枚数を指定します。
8.Atlas Resolution
アトラス化された画像ファイルの解像度を指定します。
9.Raw Multiplier
出力された画像の1ピクセル当たりの動きを調節します。Material Function Codeに記載されているコードをUnreal Engine 4にコピーした後、Unreal Engine 4側のFlipBook_MotionVectorsノードに用意されているRaw Multiplierに対して乗数として入力する数値が表示されます。
Material Function
10.Material Function Code
FlipBook_MotionVectorsノード内部のMaterial Functionエディタ内で組まれているネットワークをコード化したものになります。
Labs Motion Vectors ROPノードの機能
次に、Labs Motion Vectors ROPノードについてご紹介します。今回は、Houdini18.0.532を使用しています。
Motion Vector Mapを出力する対象となる爆発のシミュレーションについては、予め用意されていることを前提として解説していきます。爆発シミュレーションデータの作成方法については、こちらの記事をご覧下さい。
こちらでは、下の動画のようなシミュレーションを使用します。
Houdiniを起動後、SideFX Labsツールが正常に読み込まれていることを確認します。Output階層もしくはObject階層内に用意したROP Network内にMotion Vectors ROPノードを作成します。
次に、シミュレーションを書き出しているGeometryノードまでのパスをExport Pathパラメータに入力します。
書き出す際に使用するカメラを指定します。
連番ファイルの書き出し先と、Motion Vector Mapの書き出し先を指定します。
連番ファイルをタイリングする際の一列あたりの画像枚数をImages per Lineパラメータを使用して設定し、Motion Vector Mapの画像解像度をAtlas Resolutionパラメータで設定します。
デフォルトでは、一列あたり8枚の画像が並び、1024×1024の解像度に設定されています。
Renderボタンを押してレンダリングを開始します。
書き出し先のフォルダを確認します。デフォルトでは、Hipファイルが保存されているフォルダと同じ階層内に、renderフォルダとexportフォルダが作成されます。
exportフォルダの中に、Motion Vector Mapが入っています。
また、Unreal Engine 4上で動作を確認するため、Motion Vectors Mapとは別でColor Mapを作成します。
■Color Mapの作成方法について
Houdiniを使用して連番ファイルのタイリングを行う場合、SideFX Labsツールの1つであるLabs Texture Sheets ROPを使用する方法と、Composite オペレーターを使用してユーザー側でタイリングを行う方法があります。
その他のアプリケーションを使用する場合、Photoshopのコンタクトシートの作成機能が最も手軽です。
こちらでは、Compositeオペレーターを使用した、タイリングについてご紹介します。
最初に、Object階層上で、COP2 Networkノードを作成します。
COP2 Networkノードの中に入ります。Network Viewの右上をみると、「compositing」と表示されていることが分かります。
この表示があるネットワークでは、コンポジット処理を行うことができます。また、処理結果を確認する場合は、Scene Viewではなく[Composite View]を使用する必要があります。
次に、Network View上で、File COPノードを作成します。SOPノードと同様に、Tabキーやマウスの右クリックからメニューを開き、ノードを作成することができます。
このFile COPノードのFileパラメータから、mantraなどのレンダラーで書き出した連番ファイルを読み込みます。
File COPノードの下に、Mosaic COPノードを接続します。このCOPノードによって、タイリングを行います。今回、書き出した連番は64枚あるので、8×8でタイリングしています。
Images per Lineパラメータで一列に並ぶ連番画像の枚数を指定し、Max Images/Frameパラメータで、一枚のシート作成に使用する連番画像の枚数を指定します。
この状態では、画像を単純に並べているだけなので、画像サイズが8192×8192ピクセルとなっています。これを1024×1024ピクセルに修正します。
Mosaic COPノードの下に、Scale COPノードを接続します。これによって、画像全体の解像度を縮小します。Scaleパラメータを、[To Fraction]から[To Resolution]に変更し、Image Sizeパラメータに、横×縦の解像度を入力します。
最後に、ROP File Output COPノードを接続し、出力します。現在、64フレームの画像を1枚にまとめているので、Valied Frame Rangeパラメータは、Render Current Frameに設定して下さい。
この状態で、Renderボタンを押します。
デフォルトでは、hipファイルの保存場所と同じ階層にrenderフォルダが作成され、その中に出力された画像が保存される設定になっています。
下画像の左側のColor Mapが作成できます。
また、下画像の右側は、Labs Motion Vectors ROPを使用して出力した、Motion Vector Mapです。こちらのタイリングは、Labs Motion Vectors ROP側で自動的に作成されるため、別途作業を行う必要はありません。
ここからは、出力したデータをUnreal Engine 4に読み込みます。
■Unreal Engine4での作業について
今回、使用しているバージョンは、4.24.4です。最初に、Unreal Engine 4のコンテンツブラウザに、書き出したMotion Vector MapとColor Mapの両方をドラッグして読み込みます。
Motion Vector Mapの圧縮設定を変更します。ここでは、[VectorDisplacementmap]を選択します。
コンテンツブラウザ上で右クリックをして、新規マテリアルを作成します。
作成したマテリアルをダブルクリックしてマテリアルエディタを開きます。マテリアルエディタ内でFlipBook_MotionVectorsノードを作成します。
FlipBook_MotionVectorsノードをダブルクリックし、マテリアル関数エディタを開きます。すると、既にネットワークが組まれていることが確認できます。
Labs Motion Vectors ROPのMaterial Fanction Codeに記述されているコードは、既に組まれているネットワークをコード化したものになります。そのため、Labs Motion Vectors ROPのコードをコピーして、Unreal Engine4のマテリアル関数エディタにペーストすることで同じネットワークを生成することができます。
このような機能がSideFX LabsのLabs Motion Vectors ROPで用意されています。
マテリアルエディタに戻ります。
FlipBook_MotionVectorsノードにいくつかのパラメータノードを接続し、ノードを制御します。今回、用意したパラメータは下の画像の通りです。また、サンプルファイルを用意しましたので、ご興味がありましたらダウンロードをして試して下さい。
再生スピードを落とした場合でも、動きが滑らかであることが確認できます。
Labs Motion Vectors ROPノードについては以上です。
また、Unreal Engine 4上での読み込みや設定につきましては、過去の記事でもご紹介されているものがありますので、こちらも合わせてご覧下さい。