シェーダがマテリアルと繋がっているのかいないのかを調べる関数です。
7.5辺りから、Render Tree上でリフレッシュしても繋がっていないものが残るようになりました。
Material.GetAllShadersを使用すると、繋がっていない、ごみシェーダを取得してしまいます。
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)
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)
コメント