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.rCd.gCd.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 PolygonsVDB 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アイコンをクリック)。

ワイヤーフレームモードでボリュームの外形を見ることができます。

詳細は、ビューを変更する方法を参照してください。

既存ジオメトリから標準のボリュームを作成する

  • FLIP Source SOPPyroエフェクト用とFLIPシミュレーション用のソースボリュームを作成するように設計されています。とはいえ、それを使ってフラットサーフェスを含む全種類のジオメトリから“中空の”ボリュームを作成することもできます。

  • Iso Offset SOPは密閉したサーフェスから“中身のある”ボリュームを作成することができます。 Output Type パラメータでボリュームタイプを選択して、 Uniform Sampling Divs で解像度を設定します。

既存のジオメトリからVDBボリュームを作成する

VDB From PolygonsまたはVDB From Particlesノードを使います。

空っぽまたは均一なボリュームプリミティブを作成する

  • 標準のボリュームに対しては、Volume SOPを使います。Volume SOPの入力には、ボリュームコンテナのサイズをそのコンテナに入っているジオメトリの境界ボックスとして指定することができます。

  • VDBボリュームに対しては、VDB SOPを使います。

Tip

Volume SOPVDB SOPはカメラの位置と被写界深度に基づいてボリュームを作成することができます。これにより、効率的にボリュームをシーンの可視領域に制限することができます。

陰関数でボリュームを作成する

Iso Surface SOPを使って、 Build Volume をオンにします。

Implicit Function フィールドにエクスプレッションを入力すると、各ボクセルのボリュームの値を定義することができます。例えば、均一なボリュームを作成するならば 1を入力します。 球形状を作成するには、1-($X*$X + $Y*$Y + $Z*$Z)を入力します。

ボリューム内の値を編集する

標準のボリュームとVDBボリューム間を変換する

Convert VDB SOPを使います。

標準ボリュームからジオメトリを作成する

  • Convert Volume SOPは、isovalueに沿ってボリュームからサーフェスを作成します。

  • Volume Surface SOPは、ボリューム内側のランダムなポイントから外側へサーフェスを広げた三角ポリゴンを作成します。

    このメソッドは、きれいなメッシュを作成しますが、繋がっていないボリュームでは、一部の箇所でしかメッシュが作成されません。また、入力となるボリュームによっては失敗します。このノードは、トポロジー的な穴(例:コーヒーマグカップの取手の部分)を結合します。

  • Convert SOPは、ボリュームをポリゴンに変換します。とはいえ、Convert Volume SOPのインターフェースの方が、ボリュームの変換により特化しています。

VDBボリュームからジオメトリを作成する

Convert VDB SOPを使います。

コンテナ内部の実際のボリュームの境界ボックスを取得する

Scatter SOPを使ってボリューム内にポイントをばらまいて、そのポイントをBound SOPに接続します。

ボリュームを使って他のジオメトリを編集する

Volume analysisVolume BoundVolume Break SOPは、色々な方法でボリュームから他のジオメトリを作成することができます。

ノード内のボリュームプリミティブをボリュームファイルとして受け取る

Volume Sample from File VOPのようなノードは、ボリュームファイルを利用します。ボリュームファイルの代わりに、op:構文(例:op:/obj/geo1/volume1)を使うと、SOPから“生の”データをつかむことができます。

流体/ガスシミュレーションからボリュームプリミティブとしてデータをインポートする

シミュレーションデータのインポートとエクスポートの方法を参照してください。

ボリュームをシェーディング、レンダリングする

ボリュームのレンダリングを参照してください。

ボリュームの結合

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 VOPVolume Wrangleのサーフェスノードなどの強力なツールを使って、全体的にプログラムチックな制御も可能です。

    1. Iso Offsetノードを使ってジオメトリをボリュームに変換します。

    2. ボリューム編集ノードを使ってボリュームを編集します。

    3. Convert Volumeノードを使ってボリュームをサーフェスに変換します。

  • Attribute From Volumeサーフェスノードは、ボリュームの値を近くのジオメトリにコピーします。これは、雲を通過したオブジェクトの色を変更する特別なエフェクトに役に立ちます。

See also

ジオメトリ

学ぼう

モデリング

地形

粉砕

破壊を参照してください。

次のステップ

導師レベル