Advent Calendarの17日目に参加です。
ボリュームを捻じ曲げる方法です。
H19で追加されたVolume Deformer(SOP)を使わない、VOPを使った方法です。
そのうち書こうと思ってたらHoudiniの進化で過去の遺物になってしまったかもしれないネタ。
Volumeを変形させる方法はいろいろありますが、ここでは私が良く使うVolume Sample(VOP)を用いた方法をシンプルな例を用いて紹介します。
SampleFile・・・VolumeDeformSample.hiplc
使用バージョンはHoudini19.0431
VOPで煙を捻じる
こんな感じの煙を用意します。
シェルフのBillowy SmokeからWindを切って真上に煙が昇るだけのシンプルなものです。
これをVOPを使って捻じります。
ネットワークはこんな感じ。
ネットワークを見やすくするために、Billowy Smoke部分はSubNet化しています。
VolumeVOPノードの中で捻じる処理をしています。中身はこんな感じ。
この中で一番大事なノードは、右のほうにあるVolume Sample(VOP)です。
Volume Sample(VOP)の機能を一言でいうと、”指定した場所のボクセル情報を取得する”、です。
これを使って、本来のボクセル位置とは違うところにあるボクセル情報を取得することが出来ます。
「ホントはここにあるんだけ、あっちのボクセルからDensity情報を取ってきちゃおう」、ってことです。
イメージとしてはこんな感じ。伝わるかな?
VolumeVOPはすべてのボクセルに対して、内部の計算が適用されます。
上イメージをすべてのボクセルでやってる感じです。
なので、ボクセル毎に少しずつ捻った場所の位置情報を指定してあげれば、Volume Sample(VOP)が指定先の情報を取得してくれ、結果として煙全体を捻じることができるというわけです。
その処理をやってたのが、先に載せたVOPの中身です。
これを踏まえてVOPネットワークを見ていきましょう。
- Vector to Float(VOP)を使ってPositionからY情報だけ取り出す(Y方向を軸にして捻じるため)
- Y情報をFit Range(VOP)で0~1の範囲にRemap。最大値最小値が捻じる高さの範囲になる。
- Ramp Parameter(VOP)で再度Remap。好きに調整。
- 0~1の値を角度(360度のあれ)に変換します。人間が調整しやすいようにです。
- 実際の回転計算には弧度法(ラジアン)を使うので、Degrees to Radians(VOP)で変換します。
- Rotate(VOP)を使って回転用のMatrixを作ります。angle(角度)にこれまで作った値を、axis(軸)はY方向を指定してます。
- Multiply(VOP)を使ってPositionの値と⑥のMatrix情報を掛け算すると⑥情報の分だけ回転した、新しいPosition情報が生成されます。
- Volume Sample(VOP)の入力sampleposに⑦の結果を繋ぎ、パラメータを設定しDensityを参照すれば、捻じった先のボクセルにあるDensity値が取得できる。
- これをVolume VOP Output(VOP)のdensity出力につなぐことで、自身のボクセルのdensity値が別のボクセルので置き換わる。
これで捻じりの処理は完成です。
まだ解説してないノードがひとつあります。Volume VOP(SOP)ノードの上につないである、VDB Active(SOP)です。
VDB Active(SOP)
これは何のために使っているかというと、Volumeの領域を広げるために使っています。
ワイヤーフレーム表示にしてみると、ボリュームの枠が広がっていることが確認できます。
VDB Active(SOP)にあるExpandの機能を使って領域を拡張しています。
なぜこんなことをしているのかというと、変形先が元のボクセル領域からはみ出てしまうような場合、そこで切れてしまうからです。
上記の煙のサンプルだと、VDB Active(SOP)のON/OFFでこんな感じに。
左がそのまま変形させたもの、右がVDB Active(SOP)で領域を広げたものです。
左の方は、煙の出始めにブロック状の部分が散見されます。
参照先にボクセルが存在しない場合、そこが欠損してしまうのです。変形が大きくなるほど、領域を広げないと欠損が起きやすいです。
なのでVolumeを変形する際は、元よりも領域を少し広げておくのが鉄則です。
注意点
注意点があります。
他の方法
他にもVolumeの変形方法はいろいろあります。
Volume Deform(SOP)
最後にHoudini19で追加されたVolume Deform(SOP)。
VOPとか手法とか注意点とか気にせずにポチポチやってれば、Volumeを変形してくれる便利なノード。
これまでVolume Deformについて云々かんぬん書いてきましたが、正直これ使っとけば万事OKな気がします。
Volumeを変形させたいがために、幾多のフォーラムを渡り歩き、頭を抱えた日々が懐かしい。
それらの努力や工夫が進歩になぎ倒されて行くのはいつものこと。
Houdiniは知識の潰しが効くソフトです。
ここで紹介した方法が何らかの形で助けになってくれる日が来るかもしれない。
長々と書いてしまいましたが、ここまで読んでくれたあなたにそんな日が訪れますように。
以上!
ではまた。
コメント