CHOPS and Music Driven Animation I
A tutorial on the basics of Houdini chops, and then two examples of music driven animation. The first part looks at how to bring data into a chops network, and&
音に合わせたアニメーションチュートリアル
CHOPS and Music Driven Animation I
A tutorial on the basics of Houdini chops, and then two examples of music driven animation. The first part looks at how to bring data into a chops network, and&
音に合わせたアニメーションチュートリアル
An update to the earlier series of videos on compositing. Not a real field of expertise for me, so some errors crept in – these are corrected here. I also look at…
Houdiniのレンダーパスチュートリアル
VOP SOP
頂点を直接操作するためのノード
オブジェクトの変形などができるようだ
フルネームでアトリビュート名を表示する
Edit -> Preferences -> Network Editor, Nodes and Trees
で、以下のオプションをオンにする。
こんなかんじでフルネーム表示される。
アトリビュートの型
アトリビュート名の左右にあるボックスは、コネクタであり、値の型ごとにカラーが決まっている。このへんは他のDCCツールのノードエディタと同じ概念。
異なる型同士を接続sる場合は、変換ノードを間に挟む。
変換ノードには、Float to Vector等がある。
各コネクタの上にカーソルを置いて待つとコネクタの詳細情報がポップアップする
これは、型の確認に使える。
VOP SOPノードのボタン
ノードの右側にはボタンが有る。
左から順にデバッグ/バイバス/表示モード切り替え。
デバッグは後に説明がありそう
バイパスはそのノードを一時的に無効化する
表示モードは、全アトリビュート表示、コネクト済みアトリビュートのみ表示、全アトリビュート非表示を切り替えられる。
頂点移動の例
Noiseを使用してGridを変形する。
ここでやってること
1
入力されたメッシュであるglobal1が持つ頂点からそれぞれ Position(Vector)を取得し、Noiseノードに渡す。この時、特にグループなどが指定されていなければ、global1には入力されたメッシュ上にある全頂点が含まれる。
2
Noiseノードの計算結果をDisplacementノードに渡し、移動後の頂点位置を出力する。Displaced Position(Vector)
3
VOP SOPの計算結果を出力するためのOutputノードに、変形後の頂点位置を渡すことで、変形が完了する。
VOP SOPの使い方考察
見たところ、VOP SOP内ではトポロジの変更を行うノード(smoothやsubdivideなど)が作れないようだ。
よって、VOP SOPはすでにあるメッシュなどに対し、何らかの処理をするためのものだと思う。
トポロジ変更はVOP SOPの上流で完了させておく必要がありそうだ。
シェーダーネットワーク
shopでMaterial Shader Builderを作成
このノードの内側に入るとVOP SOPと同じ要領でシェーダーネットワークを編集できるようだ。
Global Variablesノード
出力したい内容に応じて使用する入力値が異なるので、Global Variablesノード内のアトリビュートを適宜切り替えて使用する。
VOPノードの動作は、このノードから出力される値をもとに行われるようだ。
Surface Modelノード
一般的なシェーディングノード。
だいたいこれを使っとけば問題ないらしい。
ダブルクリックすると中身を見ることができる。すでに複雑なネットワークが組まれていることがわかる。
既存のシェーダノード内にあるネットワークを編集する
ノードのラベル部分を右クリックして表示されるメニューから、Allow Editing of contentsを選択すると、ノード名が赤色になり、内部のノードネットワークが編集可能になる。
大体の流れとしては、Global Variable → 任意のチャンネルごとに見た目調整処理 → Surface Model → Surface Output → Collect の順にノードをコネクトすれば良さげ。
アトリビュートのPromote
Material Shader Builder内に存在する各ノードの中から、任意のパラメータへのエイリアスをMaterial Surface Builderノードへ持たせることができる。
外に出したいプラグを中ボタンクリックし、Promote Parameterを選択
こうすると、ノードのパラメータの左側に突起が出現し、Promoteされたことがわかる。
また、Material Shader Builderノードのパラメータを確認すると、パラメータが追加されたことがわかる。
また、Promoteは、パラメータリストに表示されている各パラメータの右端にあるボタンからも行える。
ノード内の未コネクトパラメータをまとめて外にだす場合は、ノードラベル右クリックから Create Input Parameters を選択する
Promote済アトリビュートのExpose
Promoteは、実際には、実体アトリビュートとアトリビュートへのエイリアスの間に値を中継するためのノードが挿入されて行われる。
ノードのPromote済みプラグを中ボタンクリックし、Expose Input Node を選ぶことで、中継ノードが表示される。
上図はdisplacementnml1のscaleアトリビュートはPromote済みで、それをExposeした様子。
この中継ノードを操作すると、値の範囲やタイプなど、パラメータの振る舞いを変更することができる。
Propertiesノード
任意のパラメータを持たせるためのデフォルトでは何のパラメータも持たないノード。Edit Parameter Interfaceで任意のパラメータを追加して使用する。
MaterialパラメータをGeometryノードに渡す
GeometryのMaterialパラメータ欄右端のプルダウンから以下のメニューを選択すると、geometry内のmaterialタブにシェーダが持っているパラメータのエイリアスがまとめて表示されるようになる。
この操作により外へ出されたパラメータは、マテリアル本体が共有されていても、値は共有されないようだ。
つまり、ひとつのシェーダを使いまわしてバリエーションを作成することができる。
これが、アトリビュートとチャンネルの違いということなのだろうか?
ちょっとぴんとこないので、あとで調べる。
オブジェクト内に直接シェーダーを埋め込む
オブジェクトの内側で SHOP Networkノードを作成するとオブジェクトに、シェーダーを埋め込むことができるようだ。
その後、GeometryノードのMaterialタブにて使用するシェーダーを選ぶ際、以下のようにオブジェクトツリー内のシェーダーが選択できる。
また、この時、Export Relative Path を選択してからマテリアル指定を完了すると、相対パスでマテリアルが指定されるため、Geometry自体が階層を移動してもマテリアルのアサインは保たれる。
Displacementの最適化
Displacementはデフォルトの設定では、欠けが発生するなどして、正しくレンダリングされない(チュートリアル中に理由が詳しく述べられているようだけど、よく聞き取れず)
これを回避するためには、Propertiesノードを作成し、レンダリング用の特別なアトリビュートを作成と、シェーダネットワーク末端のCollectノードへ接続する。
アトリビュートの追加はPropertiesノードで通常通りEdit Parameter Interface
For Renderingタブ → mantra → Shading → Displacement Bound
Displacement Boundの値を上げることで、精度が上がり、正しくレンダリングできるようになる。
それで出来た草シェーダ
VEXとVOP考察
VEXは、Vertex Expression?
VOPで作成するノードグラフは、実際にはVEXコードをグラフィカルに表示しているだけのようだ。
また、Material Shader Builderのパラメータを見ると Compilerの項目がある。これが意味するところは、リアルタイムにVEXがコンパイルされ、最適化された状態で常に使用されるということなんじゃないだろうか。
VEXのコードを表示するには
VOPの操作による処理を記述できるノードを右クリックし、View VEX Code を選択する