Maya referenceの盲点(処理の順番 )

Mayaのreferenceにはいくつか盲点がありまして思い通りにならなく相談されることがしばしばありますが、他のはまた次回紹介することにしておき、今回はreference editの処理の仕様により発生するケースです。

Reference Editはreferenceされたobjectに対するmodifyの履歴であって
通常のデータとは違う形で保存されます。

addAttrの通常

createNode transform -n "pSphere1";
    ....
    addAttr -ci true -sn "test" -ln "test" -dv 1 -at "double";

reference

createNode reference -n "refRN";
    .....
        1 |ref:pSphere1 "test" "test" " -ci 1 -dv 1 -at \"double\""

確認する方法はreference editorウィンドウからreferenceを選択し右クリックFile -> List Reference Edits… 確認できます

ref

これらはシーンopenする時まずreferenceファイルを読みその後実行されるのは通常の操作と一緒ですが、処理される順番は種類別であることによって思ってない結果になる場合があります。普段あまり気になることはないと思いますが、たまーに引っかかります。

通常の操作はもちろん行われたhistory順で処理され結果が残ります

ex)  set, add, set, add

reference editの場合はhistory順と関係なく種類ごとにまとめられその処理の優先度によって実行されます。

ex)  add, add, set, set

では実際結果が変わってしまうケースを紹介します。

referenceデータを作成
spshereに”test”attributeを追加

from maya import cmds
cmds.file(new=1, f=1)
a = cmds.polySphere()[0]
cmds.addAttr(a, ln="test", at="double")
cmds.file(rename="reference.ma")
cmds.file(s=1, f=1)

referenceデータを読み
“test”attributeを削除して追加しなおし

cmds.file(new=1, f=1)
cmds.file("reference.ma", r=1, ns="test")
a = "test:%s" % a
cmds.deleteAttr("%s.test" % a)
cmds.addAttr(a, ln="test", at="double")
cmds.file(rename="scene.ma")
cmds.file(s=1, f=1)

今は存在するけど

if cmds.ls("%s.test" % a):
    print ">>>> yup"
else:
    print "!! nope"

before

シーンを開きなおすと消える

cmds.file("scene.ma", o=1, f=1)
if cmds.ls("%s.test" % a):
    print ">>>> yup"
else:
    print "!! nope"

failed

 

通常の場合はtestというattributeがすでに存在しdeleteを行われaddしたので結果test attributeは存在する

referenceの場合はaddが先に行われすでに存在するので失敗そのあとdeleteが行われattributeが消える

 

の差が生じてます。

 

コメントを残す

WordPress.com Blog.

ページ先頭へ ↑

WordPress.com で次のようなサイトをデザイン
始めてみよう