On this page |
概要 ¶
-
SOP Import LOPは、LOPネットワーク内でSOPジオメトリをUSDステージに取り込みます。このLOPには、ジオメトリを変換するためのたくさんの設定があります。
-
Scene Import LOPは、
/obj
レベルのノードをLOPネットワークに取り込みます。Pythonプラグインを使用すれば、オブジェクトからUSDへの変換の挙動をカスタマイズすることができます。例えば、プロプライエタリなレンダラーで使用されている特別なカメラオブジェクトやライトオブジェクトを取り込むようにカスタマイズすることができます。 -
USD Configure SOPは、SOP Import LOPの設定に呼応したアトリビュートをSOPジオメトリに作成します。 SOP Import LOPで(存在すれば)各アトリビュートを使用するように設定、または、そのLOPノードのパラメータを明示的に設定してそれに呼応するアトリビュートをオーバーライドすることができます。
SOP Import LOPとUSD Configure SOPのパラメータだけでなく、以下に載せている様々なSOPアトリビュートを使って、インポーターがジオメトリを変換する方法に影響を与えることができます。
階層 ¶
SOPレベルでは、根本的にHoudiniジオメトリは、階層関係を持っていません(Houdiniでは、モデル間の階層関係はオブジェクトレベルで定義します)。
パスを定義するアトリビュートがない場合:
-
すべてのポリゴンフェースが
mesh_0
という名前の単一ポリゴンメッシュになります。 -
USD Primsと等価なSOPプリミティブ(例えば、SphereやVolume)は、自動的に付けられた名前(例えば、
sphere_0
やvolume_0
)で兄弟として取り込まれます。
パックプリミティブやAlembicプリミティブなどの一部のジオメトリタイプは、階層内のそのジオメトリの位置を示したアトリビュートを持っている場合があります。 そのようなアトリビュートが存在すれば、インポータはそのアトリビュートを使用します。
ジオメトリがUSDに取り込まれた時に階層関係を制御できるように、SOPを使って具体的にアトリビュートを追加することもできます。 Path Attributes パラメータは、パス情報を含んだSOPプリミティブアトリビュートのリストを指定することができます。
取り込まれたPrimにパス情報がなくて(mesh_0
のように)自動的に名前が付けられた場合、または、パス情報があるもののそのパスが(/
で始まらない)相対パスだった場合、ノードが自動的に Import Path Prefix のパスを名前/パスフラグメントの頭に付けます。
これが、単一ブランチ下で“パスなし”Primsの構成を維持する方法です。
例えば、 Import Path Prefix に/world/geo
を設定した場合に、異なる名前/アトリビュート値を持ったPrimsがどのようにシーングラフツリーにマップされるのかを以下のテーブルに示します:
名前/アトリビュート値 |
Import Path Prefix |
取り込まれる場所 |
---|---|---|
|
|
|
|
|
|
|
|
|
-
アトリビュート値の中の無効なパス/文字は、有効なパスになるように変換されます。通常では、これは無効な文字がアンダースコアに置換されます。
-
互換性のないジオメトリタイプが同じパスアトリビュート値を持っていた場合、インポータは、名前の後に数値を追加して固有な名前にします。
例えば、
/foo/bar
の場所に球とポリゴンメッシュの両方を配置しようとした場合、インポータは、これら2つのPrimsを別々の名前(例えば、/foo/bar_0
と/foo/bar_1
)で作成します。
マテリアル ¶
-
usdmaterialpath
アトリビュートを追加することができ、SOP ImportとSOP Createはマテリアルバインドを作成することができます。これらのノードは、見つからないMaterial Primsを作成したり、既存のマテリアルバインドを無効にすることもできます。USDパックPrimをSOPジオメトリにアンパックすると、usdmaterialpath
も生成されます。詳細は、マテリアルのバインドを参照してください。 -
GeomSubsetを使用すれば、Mesh Prim上のフェースに対してマテリアルを割り当てることができます。このGeomSubsetは、 Subset Groups や Partition Attributes で指定されたプリミティブグループやプリミティブアトリビュートによって作成することができます。
ボリューム ¶
-
デフォルトでは、すべてのSOPフィールドが単一の
volume_0
Prim下に取り込まれます。 -
usdvolumepath
という名前のSOPアトリビュートをボリュームに割り当てることで、そのボリュームのフィールドの取り込み先となるUSDシーングラフパス指定することができます。 -
フィールドがそのボリューム下の既存フィールドと同じ名前だった場合、インポータは、(
volume_1
のように)新しいボリュームPrimを追加して、そのPrim下にそのフィールドとその後のフィールドを格納します。これは、2つのPyroシミュレーションを結合した場合にインポータは
density
、vel
、temperature
のフィールドの2つのシーケンスを2つの別々のボリュームPrimsにグループ分けすることを意味します。 -
usdvolumesavepath
という名前のSOPアトリビュートを割り当てることで、USD ROPを使用した時のボリュームファイルの保存先のカスタムパスを指定することができます。 このアトリビュートは、USDフィールドPrim上のHoudiniSavePath
メタデータに変換されます。
SOPパックプリミティブ ¶
-
Packed Primitives パラメータを“Create Point Instancer”に設定すると、パックプリミティブに
usdinstancerpath
という名前のSOPプリミティブ文字列アトリビュートを割り当てることができます。このアトリビュート値には、作成したいインスタンサーのUSDシーングラフパスを指定します。 -
SOPパックプリミティブには、LOD Visibility設定の
viewportlod
Intrinsicアトリビュートがあります(例えば、Packed Properties SOPで Display As を“Hidden”に設定することができます)。 インポータは、自動的にこの設定をUSD Visibilityメタデータに変換します。 アトリビュートパターンパラメータ内でvisibility
トークンを使用することで、Visibilityデータの編集方法を制御することができます(例えば、 Attributes パターンに^visibility
を追加するとvisibilityの編集がスキップされます)。 -
入れ子化されたパックプリミティブをNative Instancesとして取り込んだ場合、新しいマテリアルを作成する時は
usdmaterialpath
を相対パスにする必要があります。
サブディビジョンサーフェス ¶
-
Treat Polygons as Subdivision Surfaces パラメータを使ってすべてのポリゴンをサブディビジョンサーフェスに変換しなくても、
osd_scheme
Primitive文字列SOPアトリビュートの値に基づいて選択的にフェースをサブディビジョンサーフェスに変換することができます。指定可能な値は、
catmullClark
、loop
、bilinear
、none
です。(Unpack USD SOPは、USDからSOPにアンパックして、それを再度USDに戻せるようにするために、このSOPアトリビュートを作成します。)
-
ポリゴンをサブディビジョンサーフェスに変換する時、インポータは、Subdivide SOPで認識できるSOPアトリビュート(例えば、
creaseweight
、cornerweight
、osd_vtxboundaryinterpolation
、osd_fvarlinearinterpolation
、osd_trianglesubdiv
、subdivision_hole
プリミティブグループ)も使用します。
アトリビュートの変換 ¶
-
以下の共通Houdiniアトリビュートのどれかを取り込んだ場合、インポータは、自動的にそれらのアトリビュートを、それに呼応する異なる名前のUSDアトリビュートまたはPrimvarsに変換します:
P
USDでは
points
アトリビュートになります。N
USDでは
normals
アトリビュートになります。v
USDでは
velocities
アトリビュートになります。w
USDでは
angularVelocities
アトリビュートになります(Point Instancer Primを編集する時のみ)。accel
USDでは
accelerations
アトリビュートになります。id
USDでは(ポイントまたはPoint Instancer Prim上で)
ids
アトリビュートになります。uv
USDでは Translate UV Attribute to ST パラメータ設定に応じて
primvars:st
になります。Cd
USDでは
primvars:displayColor
になります。Alpha
USDでは
primvars:displayOpacity
になります。width
,widths
,pscale
これらすべては、USD
widths
アトリビュートに変換されます。 -
Houdiniは配列アトリビュートに対応していますが、USDにはそれと等価のネイティブな表現がありません。
foo
配列アトリビュートを持ったジオメトリを取り込むと、インポータは、2つのUSD Primvarを作成します:foo
(すべての配列を連結した作成されたリスト)とfoo:lengths
(配列長のリスト)。例えば、
bar
配列値が[1,5]
と[2,6,8]
の2個のポイントは、2つのPrimvarとして変換されます:bar=[1,5,2,6,8]
とbar:lengths=[2,3]
。
他の特別なSOPアトリビュート ¶
-
usdvisibility
文字列SOP Primitiveアトリビュートを作成することで、呼応するUSD PrimのVisibilityメタデータを制御することができます。この値には、invisible
またはinherit
のどれかを指定してください。インスタンサーを作成した場合、このVisibility情報は
invisibleIds
USDアトリビュートに変換されます。 -
usdpurpose
文字列SOP Primitiveアトリビュートを作成することで、呼応するUSD PrimのPurposeを制御することができます。この値には、default
、render
、proxy
、guide
のどれかを指定してください。 -
usdactive
整数SOP Primitiveアトリビュートを作成することで、呼応するUSD Primのアクティベーションを制御することができます。この値には、0(非アクティブ)または1(アクティブ)のどれかを指定してください。 -
USD Configure SOPは、SOPジオメトリ上にインポータ設定を表現したグローバル(Detail)アトリビュートを作成します(このノードのパラメータを有効にすることで、そのアトリビュートを上書きすることができます)。 このアトリビュートの名前は、
usdconfig
で始まるインポータパラメータの名前にマッチします。例えば、usdconfigattribs
Detailアトリビュートには、インポートするSOPアトリビュートの文字列パターンを指定します。Note
プリミティブまたはポイントレベルで
usdconfigotherprims
アトリビュートを作成することで、プリミティブ単位でアトリビュートを指定することができます。 -
SOPポイントに
usdprimtype
文字列Pointアトリビュートがあれば、それはUSD Primとして取り込まれます。 インポータは、ポイントの位置と標準のインスタンスオリエンテーションアトリビュートを、新しいPrimのトランスフォームに変換します。 ポイントにもusdkind
文字列アトリビュートがあれば、それはPrimのKindとして使用されます。 他にも、usdapischemas
文字列配列Pointアトリビュートを使用することで、Primに適用されるAPIスキーマを複数指定することができます。これを使用することで、
path
、usdprimtype
、usdapischemas
、usdkind
のアトリビュートを持ったポイントのSOPsでUSD Primsの階層を表現することができます。
パラメトリックシェイプ ¶
-
インポータは、Houdini球プリミティブをUSD Sphere Primsに変換します。
-
両端を蓋して片側半径を0にしたHoudiniチューブプリミティブを取り込むと、インポータはそれをUSD Cone Primに変換します。
両端を蓋してテーパーのないHoudiniチューブプリミティブを取り込むと、インポータはそれをUSD Cylinder Primに変換します。
それ以外の構成のチューブプリミティブは、サブディビジョンメッシュに変換されます。
Tipsとメモ ¶
-
USDのデフォルトは右手向きメッシュであるのに対して、Houdiniは左手向きメッシュです。あなたのメッシュが右手向きの場合、SOPsでそのジオメトリを編集する時は Reverse Polygon Vertex Ordering を有効にしてください。
-
SOPジオメトリをUSDに変換する時、できるだけ効率的に変換されるように試みてください。デフォルトでは、アトリビュートはタイムサンプルになるのですが、アトリビュートを Set Default Values に追加することで、それらのアトリビュートをタイムサンプルにしないように指定することができます。
他にも Topology Attributes を“Static”に設定することで、アトリビュートをタイムサンプルにしないようにすることができます。
USD(と特にHydra)は、たとえ値が単一タイムサンプル値であったとしても、値がタイムサンプルになっていると処理が重くなります。 セットアップの規模が小さいと、おそらくその違いはわからないですが、大規模シーンになると、かなり違いが出ます。