
Blender4.5.1 LTSとHoudini20.5.445では、MaterialX NetworkをONにするとSolaris側でテクスチャが読まれない。
→edit materialでマテリアルを解析する。
→OFFだとUSD Preview Surfaceだけ、ONだとPrincipled BSDF mtlx(Generic Shader)も出されるがこれがよくないみたい。
修正したマテリアルをusd_ropでusdとして出し、オリジナルのusdと比較。 blenderのusdのこれを
uniform token info:id = "ND_open_pbr_surface_surfaceshader”
以下のようにするとSolarisでもMtlx Standard Surface扱いとなる。
uniform token info:id = "ND_standard_surface_surfaceshader”
テキストエディタで.usdaを置換処理しても動くが、pythonノードを使うと便利。
from pxr import Usd, UsdShade
node = hou.pwd()
stage = node.editableStage() # ここが重要。stage() ではなく editableStage()
target_old = "ND_open_pbr_surface_surfaceshader"
target_new = "ND_standard_surface_surfaceshader"
# Shaderプリムだけを対象に安全に置換
for prim in stage.Traverse():
# 型チェック(UsdShadeShader)
if prim.IsA(UsdShade.Shader):
shader = UsdShade.Shader(prim)
id_attr = shader.GetIdAttr() # = "info:id"
if id_attr and id_attr.HasAuthoredValue():
val = id_attr.Get()
if val == target_old:
id_attr.Set(target_new)