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ということになるのだと思われる。



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

2011年10月27日木曜日

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

Basic: Attributes I by Peter Quint


- 変数
- グローバル変数と標準(スタンダード)変数
- いつ変数を使う事が出来るのか
- 変数とアトリビュート
- グループとオペレーションをコントロールするためにアトリビュートを使う
- アトリビュートのプロモーションとトランスファー


------------------
sphere(SOP)のRadiusYに以下のエクスプレッションを入力して説明
フレームを進めると球体がY方向にスケールされる。
$FF

$:変数を示す
F:Floating Number(浮動小数点数)
F:フレームナンバー

$FFは変数であり。フレームナンバーを示す。、ジオメトリのアトリビュートとは一切関係ない。


--------------
<どうすれば利用できる変数を知ることが出来るのか?>

ヘルプでチェックする。
1)現在使用しているノードのヘルプを見て目的の変数を見つける。
2)そこになければローカル変数を使ってみる。。使えるときもあるし、そうでないときもある。
(ローカル変数は各ノードのヘルプのページに書かれている。)

Global expression variables
内容別に使える変数がリストされている。

Standard Variables
ジオメトリのアトリビュートで利用できる変数
これはどこでも使えるアトリビュートではない。
たとえばSphereSOP内のRadiusYで、ポイントポジション(TX)を参照することは意味がない。


例:Sphere(SOP)のアウトプットにTransform(SOP)を接続
ヘルプでTransformノードを見てみる。
Local Variablesというセクションがある。
それらが使う事ができる変数である。
ここをみると$TXのStandard Variablesは使う事ができないが、$CEXなどは使えることがわかる。

例:Sphere(SOP)のアウトプットにpolyextrude(SOP)を接続
TranslateZに以下のエクスプレションを入力(ビデオではYに入力しているがZのほうが見やすい)
$PR*0.01
$PRはPrimitive Numberであり、polyextrudeのローカル変数である。





--------------
<アトリビュートは自分で作成できる:カスタムアトリビュート>
例:Sphere(SOP)のアウトプットにattribcreate(SOP)を接続
Name:myvar
Class:Point
Type:Float
Value:rand($PT)

$PTはポイントナンバー。
attribcreate(SOP)のローカル変数でもあり、スタンダード変数でもある。
このケースでは上位にSphere(SOP)があり、そこからPointの情報があるので、そのインプット情報を利用してランダム数を生成している。
Details viewでmyvarの値を確認することが出来る。

attribcreate(SOP)をネットワークからはずしてみるとわかるが、インプット情報がないと$PTは機能しない。
(このノードは調理できずエラーとなる)

--------------
<自作したアトリビュートをどのように使うのか?>
例:attribcreate(SOP)のアウトプットにgroupgeometry(SOP)を接続
Entity: Points
Operation: Group by Expression
Filter Expression:$MYVAR > 0.5
0.5より大きな$MYVAR値をもつポイントをグループ化する。


変数名は大文字になっている。
これはgroupgeometry(SOP)のLocal Variableを空欄にした場合、デフォルトでは、Name入力した名前を大文字にして変数名となる。groupgeometry(SOP)をMMBクリックで表示される情報からもそれがわかる。



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

2011年10月24日月曜日

Houdiniブートキャンプ

先週の木曜日~土曜日の3日間、SataMonicaにあるSideEffects社のトレーニングルームで、Houdini Boot Campに出席してきた。

有料($300)のコースだが、3日間でやる内容は以下の通りで非常に多岐にわたるモノとなっていた。
たくさんあるが、一通りどんなものかを説明するという趣旨のコースである。

1日目:
1)ライティング、シェーディング、レンダリング、シーンのライティング。
2)アトリビュートと変数の説明。カスタムアトリビュートの説明。
3)SOPソルバー:サンプルファイルを使っての作業。

2日目:
1)ダイナミックス:リジッドボディー・ダイナミクス、RBDの理解とコントロール
2)Flipソルバー:Flipフルイドの理解。フィールドの作成。
3)PyroFX:PyroFX入門。フィールドを作って作業する。

3日目:
1)VOPs VOPsの理解と使い方。
2)Houdini Digital Assets(HDAs):HDAの作成と理解。
3)質疑応答


10:00-17:00のスケジュールで、これらをシーンファイルを使いながら、説明していくのだが。
食事時間や小休憩を含むと実質時間は、5時間半ほどで一日、三つのカリキュラムをこなそうとするので、
一つに使える時間が2時間弱となる。
非常に早い、スピードで説明され、あえていうなら通常のビデオチュートリアルの2倍ぐらいの速度で進んでいく。
パラメータの位置などを探すためにまごまごしていると、3ステップぐらいすでに進んでいるような状況だった。

このコースに参加するにはHoudini基本操作は迷わずできるぐらいは、最低限でも必要と思われる。
また一通りの作業はやっていることが望まれる。
ソフトに依存しない理解においてはある程度の基礎知識がないとちんぷんかんぷんになってくる。
よって入門者やCG初心者には少々きつい内容ではある。

反面、カスタムシェーダーやVOPsなど結構ローレベルな操作もしていくので、その辺りを知りたい人やCGプログラミングをする人などには、けっこううれしい入門コースではないかと思う。


スピードに無理がある点は、教える側も理解しており、
全ての内容はステップ毎のシーンファイルが準備されており、途中で見失ってもそれをみればわかるようになっている。
また授業の内容は音声を含めて記録されており、後ほどチュートリアル動画としてコース参加者はダウンロード可能となる。
言ってしまえば、ビデオチュートリアルとステップ別のシーンファイルを渡しますが、それをとりあえず手っ取り早く説明しますねというほうが正しいかも知れない。


前もってシーンファイルなどをわたしてもらい予習を家でやり、その後にこのコースに参加すれば
理解はおそらく2倍以上になっていたのにと思う、もう少しやり方を考えてほしいところ。


--------------
さてコースの中身についての感想だが、

正直、まだまだ入門レベルの自分にはきつかった。
先に述べたようにスピードが速いので、どのノードを使ってどういうことをやるかというのをじっくり理解しているような時間はなかった。
このコースでやったことをどれか一つでもやって見せてくれと言われても多分できない。

とりあえず、何かやりたいことがあり、それはどういう考えをもって進めていけばいいのかということの概略をつかむことに集中した。
それもおそらく理解度は10-20%ぐらい...。


まぁ転んでもただでは起きるつもりはない。
自分なりに得られたモノは、ある。

1)まず、通常のチュートリアルではここまで入り込まないだろうというようなディープなところまで入って操作している所。
これから先、自分で勉強しているときに、おそらく選択肢として考える幅というか目をつけることの出来る領域は広くなったと思う。

2)つぎに、自分にはまだまだ覚えなくてはいけないことがたくさんあると言うこと。
今回のコースで作ったシーンは、比較的簡単なモノが多い。
それなのについて行けてない。
それは知らないHoudiniのノードであったり、知らないパラメータや、しらない接続の仕方だったりする。
いいかえれば、Mayaでできていたことができるようになるまでにも覚えるべき事がたくさんあるし、
Houdiniならできるだろうと思っていたことが出来るようになるまでにもまだまだ時間が必要と言うことだ。

3)Houdiniは非常に低いレベルのデータを直接扱える。
そしてそれゆえに非常に柔軟性がある。
Mayaだとノードの働きとその使い方、組み合わせを覚えることが作業を進めていく上で鍵となることがある。
Houdiniもそうなのだが、ちがいとしてはノードの中身を低いレベルまで細かく分割してみていくことができ、ノードを自作したりカスタマイズすることも可能。
プラグインがないという理由がわかる。
VOPsなどで使われるノードは、それ自体がスクリプト言語一つ一つをノード化したようなもので、
電子ブロックのような感覚で、自作ノードを作ったりノードを操作することが出来るようになる。


4)(上記と内容的にダブってはいるのだが...。)
どんなアトリビュートを利用できるのか非常に柔軟性のある考えをあたえてくれる。
これはチュートリアルをやってても感じる事が出来るHoudiniの一つの特徴だが、BootCampで自由自在にパラメータを接続し、エクスプレッションで加工し使っているのを見て、まさにそれがHoudiniを使う理由の大きな一つだと思った。

それゆえ、変数とか、Int、Vecといった変数の種類とか、CGの要素がそれぞれどんな種類の値を持っているのか(たとえばポリゴンフェイスは、Point、Normal、Colorなど)を明確に知っておくことがHoudiniでの作業の柔軟性を高める上で重要だと思った。
Houdiniでのデータの加工というのは、ポリゴン、カーブ、ポイント、シェーダー、ダイナミックスの境界を自由に越えていると思った。

CGがCGたる所以はコンピュータでいろいろな操作をすることが出来るからである。
Houdiniはスクリプトを作らなくても、ユーザーがコンピュータを操作していることが実感できるソフトである。


5)その他
3DCGソフトのシミュレーションは物理的に正確なシミュレーションではない。
振る舞いを物理的に近いモノにできるが、アーティストが操作することでより自由度のある動きを作ることが出来るようになっている。

Houdiniでは何かの情報を色のパラメータに置き換える事がある。
これは情報を色のパラメータに格納しているだけである。
(要は変数と同じか)

Houdiniを勉強するためにSideEffectsのサイトにあるチュートリアルをお勧めしていた。

6)自分のメモ:
エフェクトにはシェーディングなどの知識は二の次でよいかというとそうでもなくHoudiniはありとあらゆるパラメータを自由につなげることができるのでシェーディング関係も知っていた方が自由度は高くなるように思う。


--------------
今回のブートキャンプは当初、日本人は自分一人だろうと思っていたが、バンクーバーから二人が参加していた。
そのうちの一人は、以前日本に一時帰国したときにあった八尋氏で、1年半ぶりの再開となった。
もう一人の学生さんも含めて、金曜の夜はLAエフェクト飲み会を開催、DDの五十嵐さんにも参加していただき、
たのしい飲みとなりました。
(五十嵐さんには、ずっと気になっていた、あのTronショットの秘密を教えていただき、その力業に驚くと共にやっぱりそうなんだ~と納得)



またこのブートキャンプで目についたのは業界経験者がいたことです。
中にはMaya歴14年(Houdini歴6ヶ月)という人も居ました。
質問の内容からしても、他の方も6~7年は経験している人達のような感じがしました。
やはり、Houdiniへスイッチしようとしている人は増えてきているという印象です。

今現在のトレーニングの状況からすると、Houdini売り手市場なのは、LAではあと1年ぐらいじゃないかなという勝手な推測をたてています。
それ以降になると、しっかりとしたHoudini経験がないとなかなか採用されないような状況がでてくるような気がします。(あくまでLA内です)


おどろいたのは今回バンクーバーから来た二人の話ではバンクーバーではHoudiniアーティストが必要な会社は多いのに教える学校が1つしかないと言うことです。

少し前にカナダ政府は地元のアーティストを雇うように圧力をかけたという話を聞きましたが、会社側では使えるアーティストがいないという声も目にする状況でした。
一体何が起きているのかわかりませんでしたが、なるほどアーティスト自体はいるのかもしれませんが、即戦力となる(Houdiniのい)アーティストは不足してそうですね。


最後に皆が気になる12は、「今年中には」 という事です。

2011年10月6日木曜日

ヘルプ翻訳: Dynamics ノード

Dynamics ノード

http://www.sidefx.com/docs/houdini11.1/nodes/dop/

ダイナミックスノードはダイナミックス/シミュレーションの状態とルールを設定する。

ノード・フラグ


Bypass: このノードが影響しないようにする。
Display: シミュレーション時にこのノードまでのネットワークを使用する。


入力と出力:

ダイナミクス・ノードはオブジェクト・インプット(灰色)、データ・インプット(緑色)もしくは両方(object and dataを参照)を持っています。灰色は灰色へ、緑色は緑色へ接続する必要があります。

一つのダイナミクス・ノードはオブジェクトのアウトプットまたはデータのアウトプットを持っています。
いくつかのノードでは、それらのアウトプットタイプを接続されたインプットを元にそれらのアウトプットを切り替えます。
これはDataノードを使うかわりにノードの接続に、より便利な方法「埋め込み(inline)」を受けつけます。


ディスプレイ・フラグ: 

Houdiniがシミュレーションを実行するとき、
オブジェクトとデータの関係を確立するためにディスプレイフラグが立ったノードまでのネットワークを料理します。
なのでディスプレイフラグが立っているノード以降に接続されたノードはシミュレーションに影響しません。

バイパス・フラグ:

バイパス・フラグがオンの時、このノードは影響力を持ちません。