執筆者:森田
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きなお寿司は鉄火巻き。
TECH BLOG
こんにちは。モノリスソフト テクニカルアーティストの森田です。
HoudiniにはパラメトリックUV(ParametricUV)というものがあります。
primuv関数やxyzdist関数でよく使われます。
今回はパラメトリックUVの簡単な解説とその可視化を行ってみます。
このUVについて詳細は他サイトに多くの情報がありますので譲りますが、簡単に説明すると「プリミティブ(ポリゴン)一枚毎にあらかじめ設定されている編集不可能なUV座標」です。
「ポリゴン表面の座標」を指定するprimuv関数などではこのパラメトリックUVが有用になってきます。
サンプルファイル(monolithtech_parametricuv.zip 10.5 KB)はこちらです。
可視化の最終結果はこちら
ファイルをご覧いただきながら下の解説を読み進めてください。
enumrate1 順番に番号をつける
後に使用するためenumrateノードでプリミティブ毎に番号(index)をつけていきます。
wrangleで色付け
Wrangleノードを作成し、RunOverをvertexにして以下のコードで頂点毎に色をつけることで可視化が完了します。
xyzdist(0, "@index=" + itoa(@primnum), @P, i@prim, @Cd);
ここでは指定した座標に最も近いメッシュ上の点でのプリミティブ番号とパラメトリックUVを返してくれる「xyzdist関数」を使っています。
引数を順番に解説すると
0 で、wrangleの1番インプットに刺さっているものを対象にしています。
"@index=" + itoa(@primnum) で、プリミティブグループに数式を指定しています。(こちらの記事の「Groupには数式を入力することができます」の部分です。)
意味としては「index+現在のプリミティブ番号」になります。
結果としてはプリミティブ毎に@index=0、@index=1、@index=2...となっていきます。
TIPS:
RunOverがVertexのWrangleは頂点毎に処理するわけですが、
ここで@primnumと指定すると今現在処理しているVertexが所属しているプリミティブ番号が返ってきます。
@P で、今のポイント座標を指定
i@prim にはプリミティブ番号が返ってきます。(新規作成するアトリビュートです)
@Cd にはパラメトリックUV座標が返ってきます。(新規作成するアトリビュートです)
つまり、この一行で「プリミティブグループ(index)が同じ頂点の中で@Pに最も近い(@Pと同義の)プリミティブ番号とパラメトリックUV」が返ってくるという処理です。
ここで、@CdにUV座標を割り当てたのでRとGに座標値が入っています。
ここまでの処理で、プリミティブ毎に綺麗にUV座標が設定されているのが可視化できていると思います。
ここで仮に、プリミティブ一枚で確認してみますと、以下のようになります。
| ポイント番号 | パラメトリックU座標 (Rチャンネル) |
パラメトリックV座標 (Gチャンネル) |
|---|---|---|
| 0 | 0.0 | 0.0 |
| 1 | 0.0 | 1.0 |
| 2 | 1.0 | 0.0 |
| 3 | 1.0 | 1.0 |
例えばパラメトリックUV座標(0.5,0.5)とすると、上のプリミティブのちょうど真ん中あたりを指定できます。
パラメトリックUVを用いればポリゴン表面のどの場所でも簡単に指定できることがわかると思います。
Houdiniヘルプ、プリミティブのパラメトリック空間(暗黙的なUV)
執筆者:森田
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きなお寿司は鉄火巻き。