USD の material:binding
ようわからん...
##https://openusd.org/release/wp_usdshade.html#usdshade-material-assignment
基本
rel
(Relationship) でマテリアルノードのパスを指定します.
def Mesh "bora" {
rel material:binding = </Material/diffuse>
}
ターゲットとなるパスは一個だけです.
ちなみに USDA 上では相対パスも指定できますが(e.g. <../diffuse>
), USDC(crate binary)では絶対パスしか扱えないため, 読み込み時に絶対パスへと変換されます(USDA でよんで USDA で print(e.g. usdcat)すると絶対パスになっています)
variant?
rel material:binding:preview = </Material/diffuse/preview>
のように suffix でプレビュー用マテリアルなど設定できます.
collection
material のターゲットパスを複数持てます.
rel material:binding:collection:boras = [</Material/diffuse/bora1>, </Material/diffuse/bora2>]
material:binding:collection:NAME
で NAME
はトークンのみでさらなるネームスペースを追加するのはできないです.
評価順(Strength)
def Xform "muda" {
rel material:binding = </Material/specular>
def Mesh "ari" {
}
def Mesh "bora" {
rel material:binding = </Material/diffuse>
}
}
のように親(祖先)の Prim にマテリアルをアサインすることができます. この場合親で定義されているが子で定義されていない場合(ari
), 基本は親の設定を見ますが, これを bindMaterialAs
で親が強いようにするのもできるようです.
Collection とか instance を考えての対応のようです.
詳細は UsdShade Material Assignment の URL にある GetBoundMaterial の pseudo code を参照ください