2011年10月28日金曜日

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

Basic: Attributes II by Peter Quint



前回までに作成したネットワーク
sphere(SOP) - atttribcreate(SOP) - groupgeoemtry(SOP)

sphere(SOP)
Primitive Type: Polygon

atttribcreate(SOP)
Name:myvar
Class:Point
Type:Float
Value:rand($PT)

groupgeoemtry(SOP)
Entity: Points
Operation: Group by Expression
Filter Expression:$MYVAR > 0.5

--------------
これにpeak(SOP)を追加する。
Group: 一つ上流のgroupgeometryで設定したgroupを選択する。
Group Type: Points
Distance: 0.8   

--------------
<AttribCreate(SOP)で作成したアトリビュートが利用可能かどうかはどうやってみわけるのか?>

polyextrude(SOP)を接続
TranslateZに $MYVARと入力しても何も起きない。(ビデオではTYに入れるがTZのほうがわかりやすい)
これはヘルプでPolyExtrudeのローカル変数を見るとわかる。
ここで利用できるのは$PRである。
PRはPrimitive Numberである。
$MYVARはPointクラスであるので、この変数は何も影響を及ぼさない。
試しに上流のattribcreate(SOP)のClassを「Primitive」に変えると、$MYVARがPolyExtrudeで機能することがわかる。


attribcreate(SOP)のアウトプットから別フロートしてpoint(SOP)を接続
AddAlphaにして、$MYVARを値として入力する。
Details ViewでみるとポイントにAlpha値が表示されている。
$MYVARはPrimitiveクラスのままだがポイントとして使えている。

この理由は二つ
1)Point(SOP)がポイントを扱う(ヘルプでローカル変数にPT(PointNumber)がある)
http://www.sidefx.com/docs/houdini11.1/nodes/sop/point
2)attribCreate(SOP)のClassで指定したその下位レベルの情報を利用可能である。
例1:Detailは、「Detail,Primitive,Point,Vertex」を利用できる。
例2:Primitiveは「Detail」は利用できないが、「Primitive、Point、Vertex」は利用できる。
例3:Pointは「Detail、Primitive」は利用できないが「Point、Vertex」は利用できる。


--------------
<処理におけるノードの種類>
1)1度だけ処理するノード
2)ループ処理するノード

Point(SOP)はループ処理のノード。
どのループであれIndexをもっている。
Indexは毎回のループで利用可能である。

Pointの場合は$PT(PointNumber)がそうである。
各ポイントをそれぞれ処理する時に$PTを利用する。


--------------
Expression関数を使って変数にアクセスできる>

point():
prim():特定のノードのアトリビュート(プリミティブ・アトリビュート)の値を返す。

以下のエクスプレッションをPoint(SOP)のAddAlphaに入力
prim("../attribcreate1",$PR, "myvar",0)

"../attribcreate1" :SOPの名称

$PR :プリミティブの番号、ここでは変数を使用しているが例えば「1」と入れるとプリミティブ番号1の値を使用する。Details Viewで見ると、Alphaの値が全てこのプリミティブ番号「1」もつ値になる。

"myvar":アトリビュート名。attribCreate(SOP)で設定され出力されるアトリビュートmyvarを指定。

0:アトリビュートインデックス。(なぜ0なのか不明)


※(追記) アトリビュートインデックスは指定したアトリビュートがベクター値のように複数の値を持っている場合、どの値を使うのかを指定する。
例1:$P は位置なのでXYZの値を持つ 0:X、1:Y、2:Z
例2:$Cdは色なのでRGBの値を持つ  0:R、1:G、2:B
となる。
このチュートリアルでは$PR(プリミティブ番号)を使っているのでこれは値は一つしかない。
よって、0:Primitive Numberということになるのだと思われる。



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

0 件のコメント:

コメントを投稿