UV Layout ノード
ノードの用途

環境
Houdini21.0.596
概要
Houdini Document | UV Layout
https://www.sidefx.com/docs/houdini/nodes/sop/uvlayout.html
HoudiniのUV Layoutノードは、UVアイランドをUV空間に効率的に**パッキング**(配置)するためのSOPノード。
…なのだが対象アトリビュートを変更すればどんな平面空間でも値に応じたパッキングを行うことができる。

主要な用途
UVレイアウト
UVアイランドの形状を解析し、指定されたUV空間内に隙間なく詰め込む。
レイアウト時に
- 3D表面積に応じたサイズ調整
- 最大で回転する角度の大きさ
なども決められる
覚えておくべきパラメータ
触ればすぐ判る物以外の、知っておくと良さそうなパラメータ
Scale Island to Match Their Surface Area
UVを、該当領域が割り当てられている大きさとジオメトリの大きさが一致するようにリサイズしてくれる
後述の「Packing/Scale」もサイズを変更する設定だが、先にこちらのサイズ調整が反映される


Axis Alignment
変形の前に事前に長辺がUV平面に水平になるようにUV島を回転させる。
「Scale Island to Match Their Surface Area」同様、パッキングの事前処理として実行される。
回転させたくないのであればRotationだけではなく、こちらもNoneにする必要がある

Packing/Scale
パッキングする際のスケール設定。
MaximumはサイズがフィットするようにUVアイランドがリサイズされ、Fixedはリサイズを行わず、FixedScaleパラメータで全体のサイズを調整できる。


IslandtoPack/UV Attribute
パッキングで参照するアトリビュートを変更することができる。
これを設定することでUVレイアウトノードをUVパッキング以外の用途で利用できる。

Targets/Pack Into
パッキングする領域を指定できる。
デフォルトでは指定された矩形で、UDIMに変更したり第2入力のジオメトリが持つアトリビュートの島を参照させるようにすることができる。

Advanced/Iterations、Advanced/ RandomSeed
Iterationsは詰め込み精度をより高めるための試行回数だが、Iterationsが2以上の際、詰込みの配置をランダム化するためのSeedを設定できるようになる。
後述の、UV以外の詰込みを行うような場合は詰込みのランダム化に利用できる。

Overrides/ Variable Scaling/ Islands Scale Attribute
アトリビュートを指定することでそのUVアイランドに対してのスケール係数として利用することができる。
後述の、AmbientOcculusionによるUVスケーリングのような利用ができる。
なおドキュメントには「マイナスが無視される」と書いているが0も無視されるので注意。

テクニック
AmbientOcculusionによるUVスケーリング
UVレイアウトノードはUVアイランドの比率をアトリビュートで指定できる。
以下はmaskbyfeatureで作成したAOに合わせてUVスケールを変更する例。
- maskbyfeatureでAOからmaskアトリビュートを作成

- remapで値の調整とiscaleアトリビュートにリネーム
この時、UVレイアウトのIsland Scale Attributeは0で無視されてしまうので下限を正の値にしている

- attribpromoteでiscale(元mask)をprimアトリビュートに変更
- split uv seamでUVごとにprimを分離し、For Each Connected Piece でUVごとにループ処理
uvそれぞれでiscaleをprim→detail→primと変換してUVごとにiscaleの平均を取得

- uv layoutのvariable scalingでアトリビュートに合わせてUVサイズをスケールできる。アトリビュートに合わせたスケールとパッキングを同時に行うと領域全体にスケーリングされないので1つ目でアトリビュートに合わせたスケーリング、2つ目でパッキングしている

Pアトリビュートによるジオメトリのパッキング
公式ドキュメントにも記載されているテクニックで、UVAttributeを平面空間でのパッキングに利用する
1. Island to Pack/ UV Attribute と Targets/UV Attributeの設定をPに設定
2. Targets/ Pack IntoをSecound Inputに設定すると
3. Advanced/ Iterationsを2以上にすると Advanced/ Random Seedで配置をランダム化できる

領域への詰込みは色々な用途があるので、UVレイアウトでできることを知っておくと便利かと思います。

fish_ball
プロシージャル魚類