2011年12月31日土曜日

メモ:Basics : Volumes II (ビデオチュートリアル)by Peter Quint

Basics : Volumes II by Peter Quint


Houdiniのボリュームへの入門、第二部ではVolume Ramp(SOP)をボリュームの値を調整するために使います。
また同様にVOPコードを使うためにVolume VOPを使います。



--------------
<<Volume Ramp(SOP)>>
1)volumeramp(SOP)を作成
2)isoSurface(SOP)を作成
Implicit Function:  ($Y+1)*0.5
Build Volume: On

$Y値に伴う値の変化 
0 > (0+1)*0.5 = 0.5
1 > (1+1)*0.5 = 1.0
2 > (2+1)*0.5 = 1.5
3 > (3+1)*0.5 = 2.0
4 > (4+1)*0.5 = 2.5
5 > (5+1)*0.5 = 3.0
6 > (6+1)*0.5 = 3.5
7 > (7+1)*0.5 = 4.0
8 > (8+1)*0.5 = 4.5
9 > (9+1)*0.5 = 5.0
10 > (10+1)*0.5 = 5.5

これは下から上に向けての濃度グラデーションで表現される。

3)iso1(SOP)出力を、volumeramp1の入力へ接続
※iso1からのフローは1つのVolumeしなかいことに注意。

4)volumeramp1(SOP)
NewName:Cd
Scalar Ramp:適当に二つの山谷を作る。
(谷となったところは透明に山の所は濃くなる)
Use Color Ramp: オン

「User Color Ramp」をオンにしたことでここからのVolumeは3つになる。
Red、 Green、 Blueのカラーの3つのボリュームになる。
入力されるボリュームはカラースプライン(Color Ramp)にフィードされ、色情報が付加されて出力される。

--- カラーを確認するにはレンダリングする必要がある。
5)カメラとディレクショナルライトを作成して設定。
6)Material Paletteで「Basic Smoke」マテリアルを作成
7)/objレベルでgeo1を選択
Materialタブ
Material > Chooser > basicsmoke
8)Create Render Node >Mantra
レンダリングしてみる。

Color Rampの左側の色が下部に右側の色が上部に適用されることがわかる。


<<Volume VOP(SOP)>>
1)isoSurface(SOP)を作成
Implicit Function:  ($Y+1)*0.5
Build Volume: On

2)isosurface(SOP)のアウトプットに、volumeVOP(SOP)作成
※エラーが起きる。
Warning: Cannnot find primitive attribute 'name' , binding volume as 'density'.
これはisoSurfaceはデフォルトではname(名前)を持っていないからである。

3)isosurface(SOP)とvolumevop(SOP)の間にname(SOP)を作成
作成した時点でエラーは消える。
Group: 0 (現在入力されるプリミティブは1つで番号は「0」である)
プリミティブ番号「0」に以下のNameをつける)


もう一つの方法は、
4)volumevop(SOP)
Volume Bindingsタブ
Autobind by Name オフにする。
Number of Bindings: +ボタンをおして1にする。
primitiveはひとつなので、「0」を入力。
Name : density

これでプリミティブはDensityにバインドされる。
このDensityをベースに計算が行われ、ボリュームに対してフィードバックされる。
※Autobind by Nameはオンに戻して次へ進む

5)volumevop(SOP)にダイブする。
parameterノード作成
ノード名:myvol_in
parameter Name: myvol
Invisible: オン

6)myvlo_inノードをデュプリケート
ノード名:myvol_out
デフォルトでは同じパラメータ名(ここではmyvol)は一つのノード内では使えないので、myvol_outのパラメータはグレイアウトしている。

Use This Node to Set Parameter Attributes : オンにする。
Export: Never > Alwaysに変更

7)Turbulent Noiseノード作成
volumevopglobal1のポジション(p)を turbnoise1(Position)に接続

8)multiplyノード作成
turbnoise1のノイズ(Noise)をMultiply1の入力(inpupt1)に接続

9)myvol_inのmyvolをmultiply1のinput2へ接続

10)multiply1の出力(product)をmyvol_outのinputへ接続

11)volumevopglobal1のdensityとvolumevopoutput1のdensityの接続を解除

12)ノードの接続をVEXコードで確認
turbnoise1ノードを右クリックして「View VEX Code...」を選択

View Code画面で
// Code produced by : multipoly1
myvol = noise * myvol;
となっている。



--------------
※ Volume マテリアルのボクセルについては
SideEffectsのMantra Master Classでカバーされている。


(注)このメモはビデオチュートリアルを見ての私的なメモで、完全な記録ではありません。
各自の利用は自己判断でお願いします。
抜け落ち、間違いの指摘は歓迎です。

2011年12月11日日曜日

メモ:Basics : Volumes I (ビデオチュートリアル)by Peter Quint

Basics : Volumes I by Peter Quint


HoudiniのVolumeに関する入門
まずVolumeを見ていきます。
- Volume IsoOffset(SOP)を使って作り、それらの値を調整します。



--------------
<Volume (SOP)>
簡単なボリュームの作成
1)Geometry(OBJ)ノード作成 
2)file(SOP)を削除
3)Volume(SOP)を作成
Name: myvol
Initial Value X:0.5


Rank
どのような種類の値をボリュームで使用するのか

「Uniform Sampling」はノード中クリックで表示される詳細にある「Volume Resolution」と同じである。

例:
Volumeのsizeが1,1,1のとき、Uniform Samplingが10のときVolume Resolutionは[10,10,10]となる
Volumeのsizeを1,2,1にして、Uniform Samplingを10にすると、Volume Resolutionは[5,10,5]になる。

※ようするに最大sizeの分割数がUniformSamplingと同じになる。


Rankを「Vector」にすると3つのボリュームをオーバーラップして持つことになる。
それぞれ違う名前をもつことになる。
0:myvol.x
1:myvol.y
2:myvol.z



--------------
<IsoOffset(SOP)>
ジオメトリをコンバートしてボリュームを作成する。
1)Sphere(SOP)を作成する
2)isooffset(SOP)を作成する。
デフォルトではサーフェイスを作るだけなのでボリュームにするにはOutput TypeでFog Volume, SDF Volumeを設定する必要がある。
(ここではFog Volumeを選択)

Fog Volume:オブジェクトの中にある各ボックスは値1、外のボックスは値0となる。

SDF(Sign Distance Field) Volume:中心から最も近いサーフェイスまでの距離の情報を使う。
サーフェイスから中はネガティブ値になり、サーフェイスから外はポジティブ値になる。
※内部がスフィアの形状に雲がない状態になるので外からはわかりにくい。


Offset:入力ボリュームのサーフェイスをオフセットする。

Laser Scan:カップなどの中がへこんだ形状では正しく計算されない。その場合はこれをOffにしてみる必要があるかも知れない。


--------------
<IsoSurface (SOP)> 
インプットジオメトリ無しでボリュームを作る事が出来る方法

実際には、入力ジオメトリを接続することは出来るが、ボリュームサイズは形状を使うことができるがいろいろと問題がある(ヘルプ参照)
例:
1)Isosurface(SOP)を作成
Implicit Function:noise($X,$Y,$Z)
Build Volumeをオンにしてボリュームを表示する。



--------------
<Volumemix(SOP)>
ボリュームを変更したり、結合する。

例1)二つのインプットがあるが1つだけのインプットでもいい。
1)先ほどのiso1(SOP)を左のインプットに接続
IsoSurfaceを
Mix Method:User
Value:$V(デフォルト)*0.5
ボリュームのノードを半減させる。

例2)二つのボリュームを混合することが出来る。
isooffset1を右のインプットに接続
Mix Method:Multiplay

結果としてノイズのボリュームがスフィア内部にだけ存在するようになる。



(注)このメモはビデオチュートリアルを見ての私的なメモで、完全な記録ではありません。
各自の利用は自己判断でお願いします。
抜け落ち、間違いの指摘は歓迎です。