Python : シェーダがマテリアルに繋がっているか調べる

シェーダがマテリアルと繋がっているのかいないのかを調べる関数です。

7.5辺りから、Render Tree上でリフレッシュしても繋がっていないものが残るようになりました。
Material.GetAllShadersを使用すると、繋がっていない、ごみシェーダを取得してしまいます。

なので、本当に使われているのか?という判定に使えます。
GetShaderParameterTargetsを使います。
このメソッドは、シェーダのアウトプットに繋がっているパラメータコレクションを返してくれる便利なものです。


from siutils import sisel # Selection
from siutils import log  # LogMessage

# シェーダがマテリアルに繋がっているかを調べる
def IsConnect(oShd):
 # シェーダのアウトプットのパラメータコレクションを取得
 oShdTgt = oShd.GetShaderParameterTargets("")
 # パラメータコレクションの数が0(すなわち繋がっていない)の場合は、False
 if not oShdTgt.Count: return False
 for oTgt in oShdTgt:
  # パラメータの親、つまりシェーダかマテリアルかを調べる
  if oTgt.Parent.Type == "material":
   # マテリアルなら、繋がっている
   return True
  else:
   # マテリアルじゃないなら、再度そのシェーダのアウトプットを再帰的に調べる
   return False or IsConnect(oTgt.Parent)




コメント