Importomatic ノードで XML ファイル経由でアセットを読み込むことができたので、もう少し複雑なシーンも構築してみます。
使用するネタは CGWorld.jp の記事で使用したシーンです。この時は USD 形式でき出力しましたが、やることはまあ同じなので何となくパラメータを読み替えつつ XML ファイルで出力するようにします。
xml_tmpl = r'''
<scenegraphXml name="Zombie_OnFire" version="0.1.0">
<!-- channelData startFrame="1" endFrame="10"
ref="/tmp/myChannelData" / -->
<instanceList>
%s
</instanceList>
</scenegraphXml>
'''
instance_tmpl = r'''
<instance type="reference" name="%(name)s" refType="abc" refFile="%(path)s">
<xform value="%(xform)s"/>
</instance>
'''
import maya.cmds as cmds
nodes = []
for r in cmds.ls(type='reference'):
if r == 'sharedReferenceNode':
continue
fn = cmds.referenceQuery(r, filename=True)
ns = cmds.referenceQuery(r, namespace=True)[1:]
path = cmds.referenceQuery(r, filename=True, withoutCopyNumber=True)
root = cmds.ls('%s:*_root' % ns)
xform = cmds.getAttr('%s.worldMatrix' % root[0])
nodes.append(instance_tmpl % {'name' : ns,
'path' : path,
'xform' : str(xform)[1:-1]})
fp = open(r'/home/chiyama/Documents/katanta/scene_build/layout.xml', 'w')
fp.write(xml_tmpl % '\n'.join(nodes))
fp.close()
このようにして出力したファイルを KATANA で読むと、Maya 上でレイアウトしたシーンを再現することができました。
※そのままでは見た目がよくわからなかったので、全てのオブジェクトにグレーなマテリアルを割り当てています