Volume Gradient VOP


こんにちは、篠島です。前回はSDFについて説明したので、今回はSDFとVolume Gradient VOPを使ってちょっと遊んでみます。

 

今回のサンプルファイルです。
volume_sample.zip

 

まずVolume Gradient VOPは何をするかというと、指定したボリュームデータの中から、データが増加している方向のベクトルを返すノード、とヘルプには書いてありますが、要は SDFボリュームの表面から離れる様なベクトルを返すノードです。すなわち下の画像の例だと、赤い矢印の様なベクトルを得ることが出来ます。ちなみにGradientとは日本語に直すと傾きのことです。

1

 

試しにVolume Gradient VOPから得られたベクトルをNに繋いで表示してみると一目瞭然です。オブジェクトの表面から離れる方向にベクトルが向いているのが確認できます。

a

 

前回SDFのデータをサンプルするのに使ったVOPを変更して下のようにします。Volume Gradient VOP から得られたベクトルは表面から離れる方向へ向かっているので、(念のため) ノーマライズしてからNegate VOPによって向きを反転させます。表面から離れるように向かっていたクトルが、表面に向かうように変わります。
そしてVolume Sample VOP から得られた表面までの距離、Volume Gradient VOP を反転させたベクトル、この2つを掛け合わせることで、ボリュームをサンプリングしたポイントから表面までのベクトルが得られます。

2

 

一見は百聞にしかず。綺麗なまでにポイントから表面までのベクトルが得られました。このポイントにこのベクトルを足し合わせるとSDFボリュームの表面にポイントが移動します。

b c

 

Attribute VOPの中は下のようになっています。Mixノードによって、オリジナルのポイントの位置と、サーフェース上のポイント位置をブレンドできるようにしてあります。

3

 

複雑なオブジェクトで置き換えると面白い結果になります。これでどんなジオメトリでも無理やりSDFボリュームの表面にそってデフォームするエフェクトができました。

d