カテゴリー別アーカイブ: VOP/VEX

VEX ウェビナーのビデオ

この間あったWrangleノードでVEXを使うウェビナーのレコーディングが公開されたので、興味ある人は見てみてください。英語ですがサンプルファイルの中にPDFも入っているのでゆっくりと勉強できると思います。

VEX/VOPs ウェビナー
サンプルファイル

いろんな事を説明していましたが、大まかにまとめると以下のことを説明していました。

  • アップストリームで特定のアトリビュートがないときにある変数を作り初期化
  • Wrangleノードの別インプットを@opinput1_P などでアクセス
  • VEXの変数名とグループ名のオートバインド
  • Enforce Prototypesについて
  • pcfind()によるポイントクラウドの使い方。

 

機会があったらそれぞれ詳しく書いていこうと思います。

VEX関数のヘルプの見方 1

篠島です。

Wrangleノードを勉強していてVEX関数のヘルプを見る際に、プログラミングの経験が無い人だとヘルプが何を言っているのか非常にわかりにくいと思います。そこでプログラミング未経験の人でも分かるようにVEXのヘルプの読み方を説明しようと思います。

続きを読む

VOPとVEX

こんにちは、篠島です。

VOPとVEXは非常に似ていてます。VEXはHoudini独自のプログラミングの言語であり、そのVEXの関数をノードとして視覚的に組み合わせられるのがVOPだと思って大丈夫だと思います。

VEXの日本語のヘルプはこちら。
http://sidefx.jp/doc/vex/index.html

VOPで組み上げたネットワークはWrangleノードを使ってVEXコードを書く事で同等の処理をさせる事が可能です。Attribute VOP やAttribute Wrangle は両方共マルチスレッド対応になります。

続きを読む

0-1の範囲

篠島です。

オブジェクトの何かのプロパティを0-1 (0%から100%)の範囲に収めることは重要です。例えばスプラインの長さを0から1で表す。オブジェクトの高さやパーティクルの寿命を0-1で表す。0-1の範囲にあるものはRampによって自分で値を調整できるので便利です。
Fit Range VOPで無理やり0-1の範囲にすることもできますが、ここではスマートに計算して0-1範囲に収めます。

続きを読む

簡単なVOPの説明 (SOP)

こんにちは、篠島です。

VOPネットワーク内でVOPノードを組み合わせていろんな事をすることが出来ます。普通のノードはマルチスレッド対応してなかったりしますが、VOPネットワークを自分で組むとマルチスレッド対応なので処理速度も普通のノードよりも早いです。

続きを読む

Houdini14で追加されたVOPノード

配列や文字列の処理に関するVOPが増えています。

Add Steer Force steerweightアトリビュートでステアリングフォースを乗算して、合計のsteerweightで正規化します。
Adbect by Volumes ディスクファイルに保存したボリュームプリミティブのセットによって位置を移流させます。
Agent Clip Catalog エージェントアトリビュートに読み込んだアニメーションクリップすべてを返します。
Agent Clip Length エージェントのアニメーションクリップの長さ(秒)を返します。
Agent Clip Names エージェントプリミティブの現行アニメーションクリップを返します。
Agent Clip Sample 特定の時間でのエージェントのアニメーションクリップをサンプリングします。
Agent Clip Times エージェントプリミティブのアニメーションクリップの現行時間を返します。
Agent Clip Weights エージェントプリミティブのアニメーションクリップのブレンドウェイトを返します。
Agent Convert Transforms エージェントプリミティブのアニメーションクリップのトランスフォームをローカル空間とワールド空間で変換します。
Agent Layer Bindings エージェントのレイヤーにある各形状とバインドされているトランスフォームを返します。
Agent Layer Name エージェントの現行レイヤーや衝突レイヤーの名前を返します。
Agent Layer Shapes エージェントプリミティブのレイヤーが参照する形状の名前を返します。
Agent Layers エージェントプリミティブに読み込まれたレイヤーすべてを返します。
Agent Rig Children エージェントプリミティブのリグのトランスフォームの子トランスフォームを返します。
Agent Rig Find エージェントプリミティブのリグのトランスフォームのインデックスを検索します。
Agent Rig Parent エージェントプリミティブのリグのトランスフォームの親トランスフォームを返します。
Agent Transform Count エージェントプリミティブのリグのトランスフォームの数を返します。
Agent Transform Names エージェントプリミティブのリグの各トランスフォームの名前を返します。
Agent Transforms エージェントプリミティブの現行ローカルまたはワールド空間のトランスフォームを返します。
Append 項目を配列または文字列に追加します。
Arg Sort ソートされた配列のインデックスのリストを返します。
Array Length 配列の長さを返します。
CHOP Input VEX CHOPに接続された4つの入力CHOPのどれかのサンプル値を返します。
Character to String ユニコードのコードポイントをUTF8文字列に変換します。
Compute Lighting PBRを使用してライティングを評価します。
Find 配列や文字列から項目を検索します。
Float to Matrix2 浮動小数点値をMatrix2値へ変換します。
Float to Vector2 浮動小数点値をVector2値へ変換します。
Get Element 配列から指定した項目を取得します。
Get Matrix2 Component 2×2のMatrix2コンポーネントを抽出します。
Get Vector2 Component Vector2コンポーネントを抽出します。
Import Detail Attribute ディスクに保存されたジオメトリからアトリビュート値を取得します。
Import Point Attribute ディスクに保存されたポイントからアトリビュート値を取得します。
Import Primitive Attribute ディスクに保存されたプリミティブからアトリビュート値を取得します。
Import Vertex Attribute ディスクに保存された頂点からアトリビュート値を取得します。
Insert 項目、配列、文字列を配列や文字列に挿入します。
Intersect All 光線とジオメトリのすべての交差を計算します。
Is Alphabetic 文字列のすべての文字がアルファベットなら1を返します。
Is Digit 文字列のすべての文字が数値なら1を返します。
Join Strings 配列の文字列すべてを区切り文字を挿入して連結します。
Matrix2 to Float 2×2のMatrix2を4つのコンポーネントに展開します。
Matrix2 to Matrix3 2×2のMatrixを3×3のMatrixへ変換します。
Matrix2 to Matrix4 2×2のMatrixを4×4のMatrixへ変換します。
Matrix3 to Matrix2 3×3のMatrixを2×2のMatrixへ変換します。
Matrix4 to Matrix2 4×4のMatrixを2×2のMatrixへ変換します。
OpenSubdiv Face Count サブディビジョンハルのフェースの数を返します。
OpenSubdiv First Patch サブディビジョンハルの指定したフェースで生成された最初のパッチの番号を返します。
OpenSubdiv Limit Surface サブディビジョンサーフェスの境界上のPointアトリビュートを評価します。
OpenSubdiv Patch Count サブディビジョンハルのパッチの数を返します。
Output Variables and Parameters シェーダネットワークの書き込み可能な出力変数となる入力を用意します。
Physically Based Hair(Primary Reflection) ヘアーのプライマリ反射のレンダリング用のBSDFを生成します。
Physically Based Hair(Secondary Reflection) ヘアーのセカンダリ反射のレンダリング用のBSDFを生成します。
Physically Based Hair(Transmission) ヘアーの透過のレンダリング用のBSDFを生成します。
Point Bounding Box 指定したジオメトリの境界ボックスの最小と最大のコーナーを意味する2つのベクトルを返します。
Point Cloud Find ファイルから最近接ポイントのリストを返します。
Point Cloud Find Radius ファイルから半径を考慮した最近接ポイントのリストを返します。
Pop 配列の最後の要素を削除して、その要素を返します。
Regex Find 文字列から正規表現を検索します。
Regex Find All 文字列から正規表現の該当項目をすべて検索します。
Regex Match 全体の入力文字列が正規表現に合致すると1を返します。
Regex Replace 検索した正規表現の該当項目を指定した正規表現で置換します。
Regex Split 正規表現に基づいて文字列を分割します。
Remove Index 配列から指定したインデックスの項目を削除します。
Remove Value 配列から項目を削除します。
Reorder 配列や文字列の項目を並べ替えます。
Reverse 配列の順序を逆にします。
Sample Sphere 最大角度の方向の範囲で、単円、球、超球の内側または表面をサンプリングします。
Set Agent Clip Names エージェントプリミティブの現行アニメーションクリップを設定します。
Set Agent Clip Times エージェントプリミティブのアニメーションクリップの現行時間を設定します。
Set Agent Clip Weights エージェントプリミティブのアニメーションクリップのブレンドウェイトを設定します。
Set Agent Layer エージェントプリミティブの現行レイヤーまたは衝突レイヤーを設定します。
Set Agent Transforms エージェントプリミティブのトランスフォームを上書きします。
Set Element 指定したインデックスにエレメントを設定します。
Set Matrix2 Component 値をMatrix2のコンポーネントのどれかに割り当てます。
Set Vector2 Component 値をVector2のコンポーネントのどれかに割り当てます。
Shading Layer Parameter VOPネットワーク(VOPNET)で定義されたVEX関数のシグネチャに表示させるパラメータを作成します。
Slice 文字列や配列のサブ文字列またはサブ配列をスライスします。
Sort 昇順でソートされた配列を返します。
Split String 文字列をトークンに分割します。
String Ends With 文字列が指定した文字列で終わっていれば1を返します。
String Length 文字列の長さを返します。
String Starts With 文字列が指定した文字列で始まっていれば1を返します。
String to Character UTF8文字列をコードポイントに変換します。
Strip 文字列の先頭と後尾にある空白を取り除きます。
Subnet Input Connector 親のVOPサブネットの入力を表現します。
Subnet Output Connector 親のVOPサブネットの出力を表現します。
Surface Color ポイントカラーやカラーマップで付けられた色から基本カラーを生成します。
Swizzle Vector2 Vector2のコンポーネントを並べ替えます。
Title Case 入力文字列をタイトル文字に変換します。
To Lower Case 入力文字列を小文字に変換します。
To Upper Case 入力文字列を大文字に変換します。
UV Coords 定義しているものに応じてテクスチャ座標やジオメトリのs,t座標を返します。
Vector to Vector2 ベクトルをVector2に変換し、そのベクトルの3番目のコンポーネントを返します。
Vector2 to Float Vector2を2つのコンポーネントに展開します。
Vector2 to Vector Vector2をベクトルに変換します。
Vector2 to Vector4 1組のVector2をVector4に変換します。
Vector4 to Vector2 vector4を1組のVector2に変換します。

Houdini14新機能~VEXとVOP~

VOP:

  • ParameterとRamp Parameterのノードで Scope を“Subnet connector”に設定して使用したVOPサブネット/アセットに対して入力と出力を定義するための新しいメソッド。
  • 新しいPoint in Groupノード。
  • CFL条件で制御されるVelocityボリュームによって正確な移流をするための新しいAdvect by Volumes VOP。POP Advect by Volumesは、内部的にこれを使用しています。
  • ポイントを動かすVOPに Update normals if displaced オプションが追加されました。これは、Pが変わってもNが変わらない場合に、ポイント法線と頂点法線を再計算します。
  • Nが存在しない時に、Attrib VOP, Geometry VOP, POP VOPに法線が用意されます。
  • VOPとWranglerで法線の自動計算が無効になりました。ノードは、Exportが*の時に@Pが変わったと見なし、法線を予期せずに再計算します。
  • Rest Positionノードは、Rest Positionをアトリビュートにバインドしたかどうかを示す新しい出力を持ちます。
  • VOPアセットとVOPサブネット内のParameter VOPノードを使用することで、入力と出力を定義することができます。Parameterノードのスコープを“Subnet connector”に設定してください。
  • Type Properties Editorは、Parameter VOPの入力と出力を扱えるように更新されました。
  • 新しいVEX文字列関数と同等のVOP。
  • Filter Step VOPの最初の2つの入力が逆になりました。

VEX:

  • 構造体とクラスのサポートを増やしました。
  • ネイティブのvector2matrix2のタイプ、2次元のvectorのバリアントとmatrix3が追加されました。2つのFloatのVEXノード上にパラメータがあれば、2つのFloat引数をVEXに生成し、3つのFloatが以前のように生成されません。
  • 文字列と配列のスライス
    “hello”[3:4] == “lo”
  • エスケープ特殊文字を必要としないPython形式の“raw strings”に対応しました。例えば、r"c:foo"
  • 新しい配列関数: sort, slice, reverse, find, append, pop。
  • 新しい文字列関数: chr, ord, slice, split, append。
  • 新しいsplineバリアントは、キー位置と値の配列を受け取り、キーが等間隔になっていなくても滑らかなカーブを生成します。
  • getbbox, getpointbbox, intersect, intersect_all, minpos, pcfind, relbbox, relpointbbox, xyzdistの関数で新しいグループサポート。
  • 新しいsetattribtypeinfo関数は、アトリビュートをベクトルまたはクォータニオンに変換します。
  • 確率分布のサンプリング用のVEX関数が追加されました。それらの関数名は、すべてsample_から始まります。例えば、sample_distribution_cone。これらの分布は、Attribute Randomize SOPでも利用可能です。
  • OpInputは、op:ではなくopinput:nをバインドしています。それらのバインドを適切に使用したこのVEX関数は、複数の出力を制御します。
  • 最適化された可変長引数のハンドリング。これは、非常に大きな可変長引数を持つCVEX BSDFシェーダで大きな効果があります。
  • CVEXが配列のバインドをサポートしました。
  • 最適化されたコンパイラ。
  • vcc -vまたはvcc --version`は、バージョン番号をプリントします。
  • vccは、-をファイル名として使用することで、stdinからIFDを読み込めるようになりました。
  • vccは、パラメータ上の#pragma hint hiddenを適切にハンドリングします。
  • #pragma optable vopを使用した時に新しく作成されるVOPノードから入力を隠す#pragma hint parm invisibleinputが追加されました。