On this page |
概要 ¶
ボリュームには空間内の“ボクセル”(3次元ピクセル)の値を保存することができます。これは、雲、煙、炎などの現象を表現することができ、さらに、Velocityフィールド(ボクセル毎にVelocityを保存し、その値を使って他のジオメトリを移動(移流)させます)、Collisionフィールド(オブジェクトの“衝突可能な3D領域”を符号付き距離フィールドとして保存します)、その他のフィールドなどのシミュレーションのメタデータを保存することもできます。
Houdiniは、ポリゴン、NURBSサーフェスなどのプリミティブだけでなく、ジオメトリレベルで2種類のボリュームプリミティブをサポートしています。その2つのボリュームタイプは用途別に調整されていますが、Houdiniのツールは、通常ではどちらでも動くようになっています。
Tip
ポイントを操作するサーフェスノード(例えば、VOP SOP)を使うには、ボリューム固有のノードを使って実際のボリュームを操作する必要があるときがあります(例えば、Volume VOP SOP)。
ボリュームのレンダリングも参照してください。
標準のHoudiniのボリューム ¶
標準のHoudiniのボリュームは、位置、サイズ、方向を持ったボックスであり、このボックスは ボクセル で3Dグリッド状に細分化されていて、各ボクセルに値が保存されています。このタイプのボリュームは、モデリング(SOP)とシミュレーション(DOP)で使われます。
異なるタイプのボリュームには、異なるタイプの情報がボクセルに保存されています:
Scalar Field (density)
各ポイントに1個の数値を記録します。各ポイントの値は、そのポイントの位置における煙の濃度を表現するのに便利です。
Sign Distance Field (SDF)
流体を表現するのに使います。各ポイントに流体の表面までの距離を数値として記録します。マイナスの値は流体の内側、プラスの値は外側を意味します。
Vector Field
各ポイントにベクトルを記録します。このフィールドは実際には3つのScalarフィールド(例えば、Cd.r
、Cd.g
、Cd.b
)を使って表現されますが、Houdiniはそれらのフィールドを単一のボリュームとして扱います。
このフィールドタイプは主にガスシミュレーションの Velocityフィールド として使われ、各ポイントのベクトルの値は、その位置でのガスの方向/速度を意味します。
(VDB Vector Mergeノードを使って3つのScalar VDBフィールドを単一のVector VDBに結合することができます。)
OpenVDBボリューム ¶
OpenVDBボリュームは、OpenVDBライブラリを使って、まばらなボリュームを非常に効率よく表現します。 VDBボリュームは、基本的には“空っぽ”のボクセルにはメモリを使いません(技術的には、ボクセルは“背景の値”と同等です)。 このボリュームタイプは、雲や薄い煙などのまばらなボリュームをモデリングするのに役に立ちます。
このボリュームタイプはメモリ内で表現されるので、ボリュームを格納するボックスを指定する必要がありません。つまり、ボリュームを無限に広げることができます。 それにも関わらず、VDBは全体の空間にボクセルの3Dグリッドを定義しています。
OpenVDBボリュームは、Houdiniバージョン12.5で追加されました。
OpenVDBボリュームをbgeo
ファイルに書き出して、それを標準のHoudiniのボリューム/ジオメトリと同様にMantra Delayed Loadプロシージャルを使ってレンダリング時に読み込むことができます。標準のHoudiniのボリュームとOpenVDBボリュームを一緒にレンダリングして、適切に混在させることができます。
“VDB”と一緒にサーフェスノードは、VDBボリュームを扱うことができます。VDB From PolygonsとVDB From Particlesのノードを使ってジオメトリをVDBボリュームに変換することができます。VDBノードを使って空っぽのVDBボリュームを作成することができます。他の“VDB”ノードは、VDBボリュームを編集することができます。
標準のボリュームを操作するほとんどのSOPは、VDBボリュームでも機能します。ノードのヘルプでボリュームノードがVDBボリュームで動作しないのか確認します。
標準のHoudiniボリュームを操作するVEX関数、HOM関数、HScriptコマンドは、VDBボリュームでも動作するはずです。
Note
現在のところ、シミュレーションでVDBプリミティブを使うことができません。
グループフィールドでボリュームを指定 ¶
ボリュームを操作するノードでは、入力ジオメトリに複数のボリュームを指定できる場合があり、ノードが影響を与えるボリュームを、ノードの Group パラメータを使って選択することができます。
ジオメトリにdensity
という名前のボリュームプリミティブがある場合、それはグループでなく、density
に設定したname
アトリビュートを持つプリミティブです。グループフィールドにdensity
とタイプしても、それを選択することはできません。
その代わりに、 Group パラメータに 名前で単一ボリュームを選択する には、@name=name
(例えば、@name=density
)の構文に一致するアトリビュートを使います。
ジオメトリネットワーク内のボリュームの取り扱い ¶
Tip
SOPでボリュームを作成するとき、 Name パラメータにはボリュームの目的がわかるような名前を入力しておいてください(例:煙の濃度であればdensity
)。そうしておけば、SOPとDOPで作業するのが楽になります。
To... | Do this |
---|---|
ビュー内でボリュームコンテナの外形を見る |
ハルの表示をオンにします(ビューアの右側にあるディスプレイツールバーのDisplay primitive hullsアイコンをクリック)。 ワイヤーフレームモードでボリュームの外形を見ることができます。 詳細は、ビューを変更する方法を参照してください。 |
既存ジオメトリから標準のボリュームを作成する |
|
既存のジオメトリからVDBボリュームを作成する |
VDB From PolygonsまたはVDB From Particlesノードを使います。 |
空っぽまたは均一なボリュームプリミティブを作成する |
Tip Volume SOPとVDB SOPはカメラの位置と被写界深度に基づいてボリュームを作成することができます。これにより、効率的にボリュームをシーンの可視領域に制限することができます。 |
陰関数でボリュームを作成する |
Iso Surface SOPを使って、 Build Volume をオンにします。 Implicit Function フィールドにエクスプレッションを入力すると、各ボクセルのボリュームの値を定義することができます。例えば、均一なボリュームを作成するならば 1を入力します。 球形状を作成するには、 |
ボリューム内の値を編集する |
|
標準のボリュームとVDBボリューム間を変換する |
Convert VDB SOPを使います。 |
標準ボリュームからジオメトリを作成する |
|
VDBボリュームからジオメトリを作成する |
Convert VDB SOPを使います。 |
コンテナ内部の実際のボリュームの境界ボックスを取得する |
Scatter SOPを使ってボリューム内にポイントをばらまいて、そのポイントをBound SOPに接続します。 |
ボリュームを使って他のジオメトリを編集する |
Volume analysis、Volume Bound、Volume Break SOPは、色々な方法でボリュームから他のジオメトリを作成することができます。 |
ノード内のボリュームプリミティブをボリュームファイルとして受け取る |
Volume Sample from File VOPのようなノードは、ボリュームファイルを利用します。ボリュームファイルの代わりに、 |
流体/ガスシミュレーションからボリュームプリミティブとしてデータをインポートする |
シミュレーションデータのインポートとエクスポートの方法を参照してください。 |
ボリュームをシェーディング、レンダリングする |
ボリュームのレンダリングを参照してください。 |
ボリュームの結合 ¶
-
通常のMerge SOPを使って2つのボリュームプリミティブを結合しても、その出力には別々のボリュームプリミティブが入るだけです(以下の個々のボリュームプリミティブを参照する方法を参照してください)。
-
Volume Merge SOPまたはVolume Mix SOPを使うと、2番目の入力のボリュームすべてを1番目の入力のボリュームに結合します。
Volume Merge/Volume Mixを使う時、あなたが必要なサイズと解像度の空っぽのボリューム(Volume SOPで作成)を1番目の入力に接続し、結合したいボリュームすべてをMerge SOPで結合したものを2番目の入力に接続するのが、良いやり方だと思います。
あなたが結合したいボリュームの合計サイズを空っぽのボリュームのサイズに設定するには、結合したいボリュームをMergeノードで結合し、その出力をVolume SOPの入力とVolume Merge/Mixノードの2番目の入力に接続します:
Tip
ボリュームの解像度は、新しい解像度で作成した空っぽのボリュームに結合することで変更することができます。
Volume Merge/Volume Mixノードの Merge/Mix Method パラメータは、合成する2つのボリュームの値をどのようにするのか制御します。
-
単純に2つの値を上書きするには、“Maximum”を使います。正規化(0-1)ボリュームで“Add”を使うと、値が1より大きくなる場合があります。
-
Volume Mixノードの Mix Method を“Difference”に設定すると、ボリュームの形状を別のボリュームで削ります。
特別なエフェクト ¶
-
ボリュームノードを使って、ジオメトリをボリュームに変換して、そのボリュームを編集し、そしてサーフェスジオメトリに戻すことで、サーフェスジオメトリを編集することができます。これは、中身のあるモデルを滑らかに結合するのには良いテクニックです。そして、Volume VOPとVolume Wrangleのサーフェスノードなどの強力なツールを使って、全体的にプログラムチックな制御も可能です。
-
Iso Offsetノードを使ってジオメトリをボリュームに変換します。
-
ボリューム編集ノードを使ってボリュームを編集します。
-
Convert Volumeノードを使ってボリュームをサーフェスに変換します。
-
-
Attribute From Volumeサーフェスノードは、ボリュームの値を近くのジオメトリにコピーします。これは、雲を通過したオブジェクトの色を変更する特別なエフェクトに役に立ちます。
See also |