2018年5月10日木曜日

Copy to Point の向きをUVでコントロール

今回は、Copy to Point の Tips を共有します。
UVの形状に応じて向きをコントロールする方法です。

サンプルファイルはこちら→リンク

物体の向きを定めるには

ある物体の向きを定めようとするときには「前」と「上」の2つの向きを指定すれば定まります。

Copy to Point で配置するオブジェクトもこれらを指定することで向きをコントロールすることができます。

Copy to Pointでの向きの制御

Copy to Point では「前」方向を指定するアトリビュートを@N、「上」方向を指定するアトリビュートを@upという名前にすることで、向きをコントロールします。
これらは方向を示すアトリビュートなのでベクトルのアトリビュートになります。
このとき配置オブジェクトにとっての「前」が+z、「上」が+yとなります。


サンプルファイルの場合でいうと、配置するオブジェクトを「鱗」、配置先のオブジェクトを「円柱」と呼ぶとして円柱側のポイントに@Nと@upを仕込むことになります。


UV に応じた向きの制御

UVの向きに合わせて向きをコントロールする方法ですが、簡単に言うと「前」を決める@NをUV由来のデータにすれば良いです。

「UV由来のデータ」とは何かというと「tangent」と「binormal」というベクトル情報です。これはHoudiniに限らずUVを持ったポリゴンモデルなら多分どのソフトのものでも持っている情報で、タンジェントスペースノーマルマップなどで利用されてる情報です。
UV回転させたりすると「tangent」と「binormal」合わせて回転します。
Houdiniでこれを取得するにはUVを持ったオブジェクトに続けてpolyframe SOP を接続すれば取得できます。

一方、配置時の鱗の「上」を決めるベクトル@upは、円柱の法線(ポイントノーマル)をそのまま流用します。これで「円柱の面の向き」=「配置時の鱗の上の向き」になります。
この法線情報もpolyframe SOPから取得できます。

で、Polyframe SOP の設定はこちら。

Normal Name の欄にupを記載(Nomalを@upに代入している)、Bitangent Name の欄にNを記載(Bitangentを@Nに代入している)します。※BitangetはBinormalと同じ意味です。
以上のように設定することで、今回の目的に沿った@up,@Nを作成することができます。

サンプルファイルでは赤のノードの部分です。

この後にCopy to Point を使うことでUVの向きに応じてオブジェクトを配置することができます。

Polyframe SOP より手前の工程の解説は簡単に、以下のとおりです。
UVを持った円柱を準備しているだけです。


サンプルではUVに対して波打つアニメーションを与えてますが、オレンジ色になっている Wrangle SOP で行ってます。
ここでコサイン関数を使ってUVを波状にしているのですが、この解説はまた別の機会にでも解説します。