独立した表面材質が割り当てられている形状を列挙 (スクリプト)
マスターサーフェスになっていない独立した表面材質は、
どの形状に割り当てられているかをブラウザで確認する場合に手間がかかります。
ブラウザで選択した形状の表面材質を表面材質ウィンドウに出し、「登録」ボタンが選択できる場合は
マスターサーフェス化されていない独立した表面材質になります。
scene = xshade.scene()
# 階層をたどり、独立した材質を持つ形状を検索
# @param[in] shape 対象形状.
# @param[out] searchShapes 独立した材質を持つ形状を格納.
def searchMaterials (shape, searchShapes):
if shape.type == 2 and shape.part_type == 11: # カメラ.
return
if shape.type == 3: # 光源.
return
if shape.type == 10: # マスターイメージ.
return
if shape.type == 8: # マスターサーフェス.
return
# マスターサーフェスを持たない場合.
if shape.master_surface == None:
# 表面材質を持つ場合.
if shape.has_surface_attributes:
searchShapes.append(shape)
if shape.has_son:
s = shape.son
while s.has_bro:
s = s.bro
searchMaterials(s, searchShapes)
# 形状のブラウザ上のパスを取得.
def getShapePath (shape):
pathStr = shape.name
s = shape
while s.has_dad:
s = s.dad
pathStr = s.name + "/" + pathStr
return pathStr
rootShape = scene.shape # ルート形状.
searchShapesA = []
searchMaterials(rootShape, searchShapesA)
print "独立した表面材質数 : " + str(len(searchShapesA))
print ""
for shape in searchShapesA:
print " " + getShapePath(shape)
上記のスクリプトを実行すると、
シーン内の独立した表面材質を持つ形状をメッセージウィンドウに列挙します。