本チュートリアルは下記を元にしています。
Quick VDB Clouds from Entagma on Vimeo.
それでは早速雲を作成します。
雲はポリゴンジオメトリを基にしています。そのため、Geoノードを作成し、ポリゴンのSphereを作成、Frequencyを24に設定します。分割数が多い三角ポリゴンで作成されたSphereが作成されます。
Moutainを追加し、ノイズの高さ、周波数、ノイズの種類を調整します。このポリゴンモデルが雲の形の大元になります。
Transformノードを追加し、Scale Yに少し縮小することで形を整えます。
Cloudノードを追加し、Volumeデータに変換します。
このノードは、既存のポリゴンまたはポイントクラウドのソースジオメトリを取得し、ボリュームを作成します。 必要に応じて、追加の二次詳細を作成して、より雲のような外観を作成することができます。高速な結果を得るためにシミュレートすることなく、雲を生成することを目的としています。そのため、Houdini Coreでも雲のボリュームを作成することができます。
オプション、設定の説明は後で行うため、このままノードを追加していきます。
Cloud Noiseノードを追加します。
雲のような外観を作成するためにボリュームフィールドにノイズパターンを追加します。 さまざまなノイズ形状作成オプションとマスキングコントロールが用意されています。
ここまでの結果にVolume Sliceノードを追加します。
ボリュームスライス操作は、入力したボリュームから2次元スライスを抽出します。注力したい特定の平面を取り出して、3Dボリューム内で何が起こっているのかを視覚化するのに役立ちます。
現在のグリッドサイズにどのような状態でボリュームができているのか確認できるため、このVolume Sliceノードは大変役に立ちます。
雲ボリュームデータはディティールを出すために、むやみにグリッドサイズをあげるとあっという間に使用メモリが大きくなってしまいます。効率よくディティールを追加するために更に先に進みます。
Volume Sliceのオプションを確認する、AttributeがDensityになっているため現在は、Volumeの密度がランプで表示されていることになります。
ここで、Vizualization RampをGreyscaleに変更し、グレイスケールランプで雲の形を確認できます。
さらに、Visualization Rangeの最大を10に増やし、現在の結果がグラデーションで確認できるようにします。
それでは、Volume Sliceで確認しながら、Cloudノードでボリューム設定を調整します。
Cloudノードを選択し、Volumeタブを開きます。
ここでは、このボリュームのグリッドサイズが定義されています。ボリュームのボクセルは立方体で定義すると効率がよく、Uniform Samplingを使用することでサイズと解像度のフィールドを一致させることなく、ボリュームの解像度を指定できます。
Uniform SamplingがMax Axisの場合、数値が除算に使用されます。
Uniform SamplingをBy Sizeに変更すると、Voxel Sizeで指定することになります。
下記はBy Size=0.1としてした場合です。
Max Axisに戻し、Uniform sampling Divsを100に設定すると、50に比べて、ボクセルサイズが細かくなったことがわかります。ボクセルが細かくなると、情報が増えるため使用されるメモリも増えます。50から100に変えると、ボクセルがほぼ4分の1になるのでメモリも約4倍に増えるかもしれませんので要注意です。
次にCloudノードのScatter Shapeタブを開きます。
Visualize as Polygonsを有効にすると、ボリュームデータにしたものを再ポリゴン化して表示することができます。
Fill Sourceをオンにすると、球体でインプットしたジオメトリを充填することができます。もこもこした雲の場合、このオプションが役立ちそうです。が、今回はオフにします。



Typeでノイズタイプを変更することもできます。
Amplitudeを再度0.1に戻し、Advection(移流)タブを開きます。
Advectionを調整する前に表示をVolume Sliceに戻します。これでGridとボリュームの状態をみながら調整することができます。
AdvectionのAmplitude=0.1(デフォルト)
AdvectionのAmplitude=0.5
Advection Noiseはメインとなっているノイズにオフセットを追加して、ディティールを入れることができます。全体的な形状は保ちつつ、ディティールが追加されていることがわかります。
Advection NoiseのAmplitudeは0.1に戻し、NoiseタブのAmplitudeを0.4にします。全体的な形状にノイズによる変化が追加されます。
表示をCloud Noiseにすると、下記のような状態にVolumeがなっています。
ここで、グリッドサイズを更に細かくするのではなく、Volume VOPを使用して、ディティールを追加します。Volume VOPは、一連のボリュームプリミティブに対してCVEXを実行します。 CVEXシェーダは、.vflファイル、shop、またはこのノード内にCVEX VOPネットワークを構築することで定義できます。
Cloud Noiseの下にVolume VOPを作成します。このノードを追加しただけでは、結果は変わりません。
それではvolumevopノードをダブルクリックして中に入ります。
現在は、入力されたDensityがそのまま出力されています。
ここで関係演算子としてCompareを追加します。
CompareノードではTestで関係演算子としてGreater Than(>)を設定し、比較する値を0.05とします。
出力されるのはTrue(1)、False(0)です。
Compareの後をSwitchに接続します。Switchは入力が0の場合、Input1を出力し、入力が1の場合、Input2を返します。
そこで、Input1にConstantノードで0を設定します。これで、0.05より小さい場合は、0を出力することになります。
Input2には、入力VolumeのPositionを追加したAnti alias noiseに接続し、それをInput2に接続します。
そして、Switchの出力を、VolumeVopOutputに返します。
ここまでの結果をみると、このような感じになります。
anti alias noiseの結果をFit Rangeに通します。
Fit Rangeでは下記のように設定します。Destination Maxは結果がわかりやすいように一時的に10という高い値に設定します。
Fit Rangeの結果をRamp Paramterに接続します。
RampはデフォルトのRamp TypeがColor RampになっているのでこれをSpline Ramp(float)に設定します。
いったん上のネットワークに戻り、Volume Vopノードを選択するとRampが追加されていることがわかります。
再度、Volume vop内に入ります。
先ほど設定したFit RangeのDestination Maxを1.0に戻します。
Rampの出力をmultiply constantに接続します。このノードはシンプルな演算子で2つ目の入力を必要とします。このノード内部で乗算する値を決めることができます。今回はMultiplierを10にします。
ここまでの結果となります。
最初の状態は下記になります。比較すると、グラデーションが追加されていることがわかります。
これを実際のボリュームで確認するとデフォルトのまま
Volume Vopで修正した結果
ディティールが追加されていることがわかります。
更に上のネットワークに戻り、Volume VopのRampを調整します。
更にディティールが追加されました。
ここまでの結果をopenVDBで出力します。
このVolume Vopの上でマウスの右クリックからSave>Geometryを選択します。
出力先をきめ、拡張子を.vdbとします。Acceptをクリックすると、指定した場所にVDBファイルが出力されます。
VDBファイルが出力されたら、次に実際にVDBファイルを読み込んで見ましょう。
新しいGeoノードを作成し、そこに出力したVDBファイルをロードします。
きちんとVDBファイルが生成されました!
最後に今回はRedshiftでレンダリングしてみました。
※ダウンロードファイルのレンダリング設定はMaterialおよびLightがRedshiftで設定されています。Mantraでレンダリングする場合は、MantraShaderおよびLightを設定してください。