2011年11月3日木曜日

メモ:Basic: Attributes III (ビデオチュートリアル)by Peter Quint


Basic: Attributes III by Peter Quint




sphere(SOP) - atttribcreate(SOP)

sphere(SOP)
PrimitiveType: Polygon Mesh
Radius:1, 2, 1

atttribcreate(SOP)
Name: myvar
Type: Float
Size: 3

マルチコンポーネント・アトリビュートの作成方法
ここでSizeが1であると下のValueでは1つ(左端)しか使えない。
しかしSizeを3にすると3つのコンポーネントをもたせる事が出来る。
myvar[0], myvar[1], myvar[2]

TypeをVectorにしても同じくコンポーネントは三つになる。
ただし myvar[x], myvar[y], myvar[z]

----------
point(SOP)を追加
Add Color $MYVAR1, $MYVAR2, $MYVAR3
Details Viewをみると、
myvar[0], myvar[1], myvar[2]の値がそれぞれ入っているのがわかる。

--------------
attribcreate1(SOP)のアウトプットにattribcreate(SOP)を別フローで追加。
Name: myvec
Type: Vector
Value:1, 1, 1


※カスタムDisplayオプション
シーンビューでdキーを押してディスプレイオプションを表示する。
Customの横にある三角ボタンを押してCreate Attrib Vectorで追加する。
できたオプション名を右クリックして詳細設定。

表示されるのはvectorとなる。
たとえばxyzが1,1,1であるならそのポイントを0,0,0の起点とした1,1,1に向かう線で表示される。

--------------
objレベルへ移動し、上記のカスタム表示のベクトルが上を向くようにSphereを回転させる。
この状態でアトリビュート血を見てもmyvecの値は1,1,1で変わっていない。

しかしシェーダーなどに適用される場合、このベクトル値はトランスフォームされた値になる。
ObjレベルでGeometryノードを作成
内部に入りobjectmerge(SOP)を作成。

object1にSphereを設定。
/obj/sphere

この段階ではTransformが適用されていない。
objectMergeノードのTransformは
デフォルトでは「into Specific Object」
これはその下のTransform Objectにオブジェクトを指定する必要がある。

「into This Object」に変更すると
このオブジェクトにトランスフォームが適用される。


myvarは1,1,1という風にカスタムアトリビュートの設定値が表示されている。
myvecは0.0860114,1.72959,-0.0334987という風にトランスフォームが適用された値となっている。
これがベクターと、3floatコンポネントの違いである。
(要するにローカルとワールドの違いか)


--------------
sphere1 - attribcreate1だけのネットワークにする。

attribcreate1
Name: myvar
Class: Detail
Type: Float
Size: 1
Value: 1234

attribPromote(SOP)を接続
(attribPromote: アトリビュートを異なるレベルへとコピーする方法)
Original Class: Detail
Original Name: myvar
New Class: Point
Promotion Method: First Match



---------------
<myvar(Primitive)でのテスト>
Change New Name: On
New Name : 空欄
Attrib Promoteが機能せず、Promotion Methodはスルー。
名称は元と同じ、アトリビュートは元のクラスの位置に表示される。
例:myvar(Primitive)はDetails Viewの「Primitive」に表示される。


Change New Name: On
New Name: newvar
AttirbPromoteは機能し、Promotion Methodで処理される。
名称は新しく入力した名前になり、アトリビュートは新しいクラスに表示される。
例:myvar(Primitive) --> newvar(Point)は「Point」に表示される。


Change New Name:Off
New Name: (無効)
AttirbPromoteは機能し、Promotion Methodで処理される。
名称は元と同じ名前になり、アトリビュートは新しいクラスに表示される。
例:myvar(Primitive) --> myvar(Point)が「Point」に表示される。


<Detail --> Point 変換の例>
-- attribCreate1--
Class: Detail
Type: Float
Size: 1
Value: rand($PT)
[Details View] : myvarの値はDetailクラスに0.641601と表示されている(一行のみ)

-- attribPromote1--
Detail --> Point
[Details View] :  PointクラスにID毎に42行(0-41)表示、すべて同じ値。
Sum of Squares(Promote Method)では、0.411651
それ以外のPromote Methodは全て0.641601



<Point --> Detail 変換の例>
-- attribCreate1--
Class: Point
Type: Float
Size: 1
Value: rand($PT)
[Details View] :  PointクラスにID毎に42行(0-41)表示。
全て異なる表示。
0- 0.641601
1- 0.800464
2- 0.510895
3- 0.775474
4- 0.879506
5- 0.20504
......

-- attribPromote1--
Point --> Detail
[Details View] :  Detailクラスに1行のみ表示。
Promote Method毎に値は異なる。
maximum: 0.98474
minimum: 0.0382924
Average: 0.570707
Mode: 0.0382924
Median: 0.657865
Sum: 23.9697
Sum of Squares: 17.0393
Root Mean Square: 0.636944
First Match: 0.641601
Last Match: 0.0382924


--------------
Sphere1にMeasure(SOP)を接続
measure1(SOP) :プリミティブの特定の計測値を元にアトリビュートを作る
Type: Area (各ポリゴンの面積を計る)

[Details View] :  PrimitiveクラスにポリゴンID毎に80行(0-80)表示。
アトリビュート名:area
0: 0.1393
1: 0.1393
2: 0.1393
3: 0.165396
(...以下繰り返し)

このスフィア全体の表面積を求めるには
measure1にattribpromote(SOP)を接続
Original Class: Primitive
Original Name: area
New Class: Detail
Promotion Method: Sum

[Details View] :  Detailクラスのareaアトリビュートが表示される。(一行のみ)
スフィア全体の面積は 11.6659


--------------
sphere1(SOP) -- attribcreate1(SOP)

radiusY: 2


Name: myvar
Class: Point
Type: Float
Size: 1
Value: rand($PT)

sphere1(SOP)のアトリビュートをsphere2(SOP)を作りそれに移行する。

Primitive Type: polygon


左インプット:sphere2
右インプット:attribcreate1
Attribute: Other Attribute
Attribute Name: myvar


--------------
<異なる数のポイントを持ったジオメトリにアトリビュートを引き渡す>

radiusY: 2

 :ポイントを一つだけ作る
point0: チェックボックスオン

attribcreate1をadd(SOP)に接続
:上で作ったポイントにmyvarアトリビュートを追加する
Name: myvar
Class: point
Type: Float
Sizez : 1
Default: 0.01
Value: 1223

attribtransfer1(SOP)を作成: myvarアトリビュートをsphere1のポイントに引き渡す。
左インプット: sphere1
右インプット: attribcreate1


これによりadd1でつくられた1つのポイントにあるmyvarの値は、
sphere1(ポリゴン)の全ポイントに引き渡される。
[Details View] :   PointクラスにID毎に42行(0-41)表示。
すべてmyvarの値「1223」

ここでattribtransfer1のDistance Thresholdを操作してみる。

放射状のフィルター領域。
Sphereの直径は1で、縦方向が2
Addのポイントからの距離。
このThresholdの範囲内にある場合はmyvarのデフォルト値0.01を表示。

たとえば1.01でいくつかのxz平面に近いポイントのmyvarが1223の値になり、
2.1にするとすべてのポイントのmyvar値が1223になる。

これをたとえば0.9にしてaddノードをシーンビュー上で移動すると、addノードから0.9範囲の中にあるポイントだけが1223の値を持つことになる。

ちなみに1は今回のスフィアのxz面の直径で、2はY方向の長さである。


(追記)Vimeoのページに著者よりの追記があったので追加。
 このチュートリアルで3つのFlaotアトリビュートのローカル変数は「 $MYVAR1, $MYVAR2, $MYVAR3.」であることを述べているが、ベクターアトリビュートの変数については述べていなかった。
それは 「$MYVECX, $MYVECY, $MYVECZ」である。








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

0 件のコメント:

コメントを投稿