On this page | |
Since | 17.0 |
概要 ¶
USDは、複数の名前が付いたプリミティブの バリアント をプリミティブ上に保存することができます。 バリアント毎に異なるアトリビュート、リレーションシップ、子Primsを持たせることができます。 レイヤー別に異なるバリアントでプリミティブを切り替えることができます。 各プリミティブは、名前の付いた バリアントセット 内に複数のバリアントのグループを保存することができます。
以下にバリアントの一般的な使用方法を載せています:
-
異なるジオメトリのファミリー(例えば、異なるタイプのツリーを切り替えることができるプリミティブ)。
-
Levels of Detail(同じジオメトリを段階的に解像度を下げたバージョンをバリアントとして保存し、カメラまでの距離に基づいて切り替える)。
Houdiniには、このワークフローを自動化するためのCreate LODノードとAuto Select LODノードが入っています。
-
マテリアルの割り当て(異なるマテリアルを割り当てたバリアントを保存することで、プリミティブのルックを簡単に切り替えることができます)。
以下に、owner
という名前のバリアントセットを含んだレイヤーのサンプルを載せています。
各バリアントのカラーは、そのボールを所有するストーリー内のキャラクタに呼応しています:
#usda 1.0 () def Sphere "toyBall" ( variants = { string owner = "blake" } append variantSets = "owner" ) { double radius = 1 variantSet "owner" = { "andy" ( ) { color3f[] primvars:displayColor = [(1, 0, 0)] ( interpolation = "constant" ) } "blake" ( ) { color3f[] primvars:displayColor = [(0, 0, 1)] ( interpolation = "constant" ) } "sally" ( ) { color3f[] primvars:displayColor = [(0, 1, 0)] ( interpolation = "constant" ) } } }
PixarのUSD用語集のバリアントセットを参照してください。
How to ¶
-
“メイン”ステージをこのノードの1番目の入力に接続します。
-
Primitive Path にバリアントの追加先となるPrimのパスを設定し、そのバリアントを追加するPrim上の Variant Set の名前を設定します。
このノードは、指定したパスでPrimとその親Primが存在しなければ、それらのPrimを作成します。 Primitive Kind パラメータと Parent Primitive Type パラメータは、この場合に作成するPrimのタイプを制御します。
-
追加したいバリアントPrimを含んだステージを2番目の複数入力に接続します。
たいていの場合、この“variant”入力には“フル”ステージを接続するのではなくて、SOPネットワークから取り込んだジオメトリの結果、または、ディスクからUSDに取り込んだ結果を接続します。
バリアントとして使用したいPrimブランチが既に“メイン”ステージ上に存在した場合、その“メイン”ステージをこのノードの1番目と2番目の両方に接続しても構いません。
-
追加するバリアントを定義したPrimのパス(これは2番目の入力のシーングラフツリー内のパスです)を Variant Path に設定します。
-
パラメータエディタの下部にあるテーブル内で、入力ノード名の右隣の列をダブルクリックして、バリアントセット内のこのバリアントの名前を入力します。
(名前を指定しなかった場合、 Variant Name Default パラメータ内のエクスプレッションによって自動的に名前が付けられます)
2番目の入力からバリアントセットへコピーされたバリアントには、 Variant Path で指定されたPrim とそのすべての子Prims が含まれます。
Note
最後の3つの手順を繰り返すことで、指定したバリアントセットにもっとバリアントを追加することができます。 これは、 Variant Path が各バリアント入力内で同じ場合にのみ動作します。
Tips ¶
-
このノードは、各入力をクックした時に定義されているバリアントの名前を
VARIANT
コンテキストオプションに設定します。これによって、入力ノードをこのノードに設定されたバリアント名に反応させたり、同じ入力ノードをこのノードに複数回接続して、バリアント名毎に固有の出力を生成することができます。The node also sets the context optionVARIANTINPUT
to the input number of each variant as each is cooked. This allows per-variant responses which don’t depend on the variant name directly. -
2番目の入力に接続されたステージのレイヤーは、バリアントを定義したすべての情報をアクティブレイヤーにコピーできるように、常に単一レイヤーに“平坦化”されます。
-
平坦化されたレイヤーの内容は、コピー処理によってまったく変更されないので、定義されたPrimsがバリアント内に定義され、
over
Primsはそのバリアント内でもover
Primになります。 -
USDは、バリアントの内容に何も制限を課しません。 Primitive Path で指定されたPrimとその子Primに対してさらにオピニオンを表現する場合、(バリアントが現在選択されているかどうかに関係なく、後で表現したオピニオンが正しく“適合”するように)各バリアントのデータの構造に一貫性を持たせたいでしょうが、それは完全に任意です。
-
Level of Detail用のバリアントを使用したいのであれば、Create LODノードとAuto Select LODノードを調べてください。
-
異なるマテリアルアサインメントを切り替えるバリアントを使用したいのであれば、各バリアントの内容をほぼ同じようにしてください。これらのマテリアルアサインメントのオーバーライドを編集する時は、そのオーバーライドを使ってバリアントを作成する前にその場でこれらのマテリアルアサインメントの効果を確認できるようにしたいことでしょう。
典型的には、すべてのバリアントを同じ入力LOPノード(ほとんどの場合、このAdd Variantノードの1番目の入力に接続された同じLOPノード)から分岐させます。
各マテリアルアサインメントの前にLayer Breakノードを使用することで、平坦化時にそのLayer Breakノードよりも上流のすべての情報を取り除くことができます。 その結果、バリアント入力別にそのマテリアルアサインメントのオーバーライドのみがバリアント定義にコピーされます。
-
指定したPrim上の指定したバリアントセット内に指定した名前が既に存在していても、このノードは、その既存のバリアントを無視して、バリアント入力からPrimsをコピーします。既存のバリアントがアクティブレイヤー内で定義されていた場合、それらの既存のPrimsの一部またはすべてがオーバーライドされます。既存のバリアントがアクティブレイヤー以外のレイヤー内で定義されていた場合、その新しいバリアントの情報が既存のPrimsよりも強いレイヤーとして構成されます。
-
2番目の複数入力を使って何もバリアントを追加しなかった場合、このノードは、1番目の入力のステージをそのまま通過させます。
-
USD Prim上のバリアントを選択するには、Set Variant LOPを使用してください。
-
バリアント内で表現されたオピニオンは、ローカルレイヤースタック内で表現されたオピニオンよりも弱いです。この強度順によって、Prim上でそのバリアントの効果が現れないようにすることができます。 Warn of Weak Variant Opinions を有効にすると、この状況が検出された時にこのノードに警告を追加します。この場合、最も単純な解決方法は、別の Source Primitive の使用を有効にすることです。 Source Primitive には Primitive Path の現行値を設定し、 Primitive Path にはその Source Primitive の参照を使ってバリアントが作成される新しいパスを設定します。バリアント内で表現されたオピニオンは、参照で表現されたオピニオンよりも強いので、バリアント内のオピニオンが期待通りにステージ上で構成されます。
入力 ¶
First Input
バリアントの格納先となるPrimを含んだステージ。このステージは、このノードによって加えられた変更と一緒に出力に通過されます。
Second Input (Multi-Input)
接続した各入力は、1番目の入力内のPrim上にバリアントとして追加したいPrimを含んだステージを表現します。
Note
一度に複数のバリアントを追加するのは、すべてのバリアントがそれぞれのシーングラフツリー内の同じ Variant Path にある場合にのみ動作します。
パラメータ ¶
Primitive Path
新しいバリアント情報の追加先となるPrimのパス。
Source Primitive
バリアントが編集されるベース定義となるPrimのパス。 このPrimは、バリアントが定義されるPrimパスにおける新しいPrimで参照されます。 この間接的な参照によって、バリアント内のオピニオンがそのSource Primitive上の既在のオピニオンよりも強くなります。
Warn of Weak Variant Opinions
バリアントのオピニオンが既存のオピニオンよりも弱い場合に警告を追加します。 各バリアントが追加されると、このオプションは、そのバリアントを選択して合成されたステージかどうかを検証します。 バリアントによって追加されたオピニオンが合成ステージ上で一番強いオピニオンでない場合、警告を追加します。 この状況の検証によるパフォーマンス負荷を回避したいのであれば、このオプションを無効にしてください。
Primitive Kind
指定したPrimitive PathにPrimが存在しなかった場合、且つ、このノードが指定した場所に新しいXform Primを作成しなければならない場合、 このパラメータは、この新しいPrim上で編集されるKindを制御します。
Parent Primitive Type
指定したPrimitive Pathに何もPrimが存在しなかった場合、且つ、このノードがその位置に新しいPrimを作成する場合、 このパラメータは、最終Primを作成する前に作成する必要のある親PrimsのPrimタイプを制御します。
Create Options Block
通常では、このパラメータを手動で設定または変更する必要はありません。 このノードが“Variant Block”の一部である時(“Add Variants to Existing Primitive”ツールで作成した時)には、このパラメータを有効に設定します。 このノードがスタンドアローンな時(“Add Variants to New Primitive”ツールで作成した時)には、このパラメータを無効に設定します。
(このノードは、複数入力に接続されている各ノードをクックする時、作成される現行バリアントの名前を含んだコンテキストオプションを設定します。 これを 無効 にすると、このコンテキストオプションは、入力チェーン内のすべてのノードで利用可能です。 これを 有効 にすると、このコンテキストオプションはスタック上に積み上げられ、そのブロックの頭にあるBegin Context Options Block LOPは、そのスタックからコンテキストオプションを取り出し、入力チェーンの上流にあるノードほどそのコンテキストオプションが隠れます。)
Variant Set
このノードによってバリアントが追加されるバリアントセットの名前。
Variant Set Strength
バリアントセットが新しい場合、このPrim上の他のバリアントセットと相対的なこのバリアントセットの強さを指定します。 リファレンスと同様に、バリアントセットは明確に定義された順序で適用されるので、強いバリアントセットのオピニオンが弱いバリアントセットのオピニオンよりも常に優先されます。
Variant Source Primitive
各バリアント入力のシーングラフからバリアントにコピーされるPrimsのルートのパス。
Variant Name Default
各バリアント入力は、バリアントセット内で作成されるバリアントの名前を制御することができます。 このバリアント名は、接続入力リストを表示したインターフェース内の2番目の列で設定します。 Variant Name Defaultパラメータは、接続入力リストを表示したインターフェース内の2番目の列に何も名前が明示的に設定されていない場合のそのバリアント名を制御します。
このエクスプレッション内では、@input
ローカル変数($IIDX
は廃止されました)を現行入力のインデックス(複数入力の左から右に向かって1から始まる番号)として使用することができます。
Set Variant Selection
これを有効にすると、このノードは、最後に追加されたバリアントも 選択 します(Primをそのバリアントに切り替えます)。 これを無効にすると、このノードは、現在選択されているバリアントに影響を与えません。
(他には、Set Variant LOPを使用することで、バリアントを選択することができます。)
See also |