スクリーンショット 2025-08-09 123102.png

出力設定

マテリアルが壊れる

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)