renderSetup
renderLayerよりはシーンが壊れにくくなりましたね
カットシーン毎にテンプレートのrenderSetupを読み込んで・・・・
ここで問題になるのが
テンプレートのrenderSetupのコレクションにノード名を指定しておいても、シーンに合わせてネームスペースをコレクションの中身に追加してあげないとならんのですよね
ネームスペースを全て対象とする 書き方もありますが、
こんな感じで各レイヤー毎に別のネームスペースを指定したい
って場面に出会って、手動でやるの面倒だなぁと
collectionを集める
まずは各レイヤーに所属するcollectionを収集したい。
参考
https://kiwamiden.com/rendersetup-for-python-part2
まずはcollectionを・・・・
from maya.app.renderSetup.model import renderSetup
layerName = "renderSetupLayer1"
rs = renderSetup.instance()
layer = rs.getRenderLayer(layerName)
collections = layer.getCollections()
for collection in collections:
print(collection.name())
#collection1
お 取れてますね。
更にcollectionを集める
#collection1
うーん・・・1個しか取れませんね・・・
-getCollectionsなのでグループはリストされない
-レイヤーの直下のcollectionはリストされるが、それ以下はリストされない
あ、面倒な奴だ!(の予感
- ノードの種類に関わらず子をリスト ( getChildren
- 子ノードを個別に評価して、種類がcollecitonならリストに追加
- 子ノードにさらに子ノードがある場合には↑に戻る
的なぐーるぐーる回るやつ
雑実装
こういう時pythonは便利
from maya.app.renderSetup.model import renderSetup
def getRSCollectionsHierarchy(taregtNode,collections):
#対象のノードが collectionか否か
if taregtNode.isCollection():
#名前を取りたい場合は .name()
collections.append(taregtNode)
#対象のノードが hasChildren アトリビュートを持つか否か
if "hasChildren" in dir(taregtNode):
#対象のノードが子ノードを持つか否か
if taregtNode.hasChildren():
#対象のノードの子ノードをリスト
chNodes = taregtNode.getChildren()
#ぐーるぐーる
for node in chNodes:
collections = getRSCollectionsHierarchy(node,collections)
return collections
def getRSCollections(layerName):
rs = renderSetup.instance()
layer = rs.getRenderLayer(layerName)
chNodes = layer.getChildren()
collections = []
#layer直下の子ノード
for taregtNode in layer.getChildren():
getRSCollectionsHierarchy(taregtNode,collections)
#layer直下のグループノード
for taregtNode in layer.getGroups():
getRSCollectionsHierarchy(taregtNode,collections)
print(collections)
getRSCollections("renderSetupLayer1")
#[<maya.app.renderSetup.model.collection.Collection object at 0x00000136A08F0EA8>,
#<maya.app.renderSetup.model.collection.Collection object at 0x0000013665F37818>,
#<maya.app.renderSetup.model.collection.Collection object at 0x00000136164564F8>]
取れてるのか判らんので、一旦名前収集で実行
from maya.app.renderSetup.model import renderSetup
def getRSCollectionsHierarchy(taregtNode,collections):
#対象のノードが collectionか否か
if taregtNode.isCollection():
#名前を取りたいので .name()を一旦ついか
collections.append(taregtNode.name())
#対象のノードが hasChildren アトリビュートを持つか否か
if "hasChildren" in dir(taregtNode):
#対象のノードが子ノードを持つか否か
if taregtNode.hasChildren():
#対象のノードの子ノードをリスト
chNodes = taregtNode.getChildren()
#ぐーるぐーる
for node in chNodes:
collections = getRSCollectionsHierarchy(node,collections)
return collections
def getRSCollections(layerName):
rs = renderSetup.instance()
layer = rs.getRenderLayer(layerName)
chNodes = layer.getChildren()
collections = []
#layer直下の子ノード
for taregtNode in layer.getChildren():
getRSCollectionsHierarchy(taregtNode,collections)
#layer直下のグループノード
for taregtNode in layer.getGroups():
getRSCollectionsHierarchy(taregtNode,collections)
print(collections)
getRSCollections("renderSetupLayer1")
#['collection1', 'collection3', 'collection4']
はい 取れました。
つづきます