Well I finally have a new build ready for testing! This has had a huge amount of effort put into it to integrate the new MetaData structures into the rest of the toolset. Whilst I was at it I also added a full MirrorPose/MirrorAnimation system that uses additional data supplied when adding a node to a MetaRig. There's a very detailed example file that latches onto the Morpheus Rig which should help guide you through my thinking so far.
Really keen to get a few folk testing this before I go too far off in my own direction. If you'd like to help drop me a mail and I'll add you to the test group.
thanks
Red
Red9 StudioTools have been born out of frustration at Autodesks reluctancy to add some of these core features and workflows into Maya itself. Why OpenSource, well I want to give something back to the industry as I feel damn sorry for studios without the benefit of a large R&D department to craft pipelines around them. The Studio Pack is designed to speed up a modern animation pipeline. All comments and suggestions are welcomed. For more info mail me :)
Tuesday, 28 August 2012
Thursday, 16 August 2012
More Meta Fun!
import Red9_Meta as r9Meta import maya.cmds as cmds mRig=r9Meta.MetaRig(name='MRIG') mRig.select() mRig.addRigCtrl('Chest_Ctr','Chest',boundData={'Side':'Centre'}) mRig.addRigCtrl('UpChest_Ctr','UpperChest',boundData={'Side':'Centre'}) mRig.addRigCtrl('Head_Ctr','Head',boundData={'Side':'Centre'}) mRig.addRigCtrl('Root_Ctr','Root',boundData={'Side':'Centre'}) mRig.addRigCtrl('L_Foot_Ctr','L_Foot',boundData={'Side':'Left'}) mRig.addRigCtrl('Hip_Ctr','Hips',boundData={'Side':'Centre'}) support=mRig.addSubMetaNode(nodeName='SupportNode',attr='Support') support.connectChild(node='Settings_Node',attr='ExportData') facial=support.addSubMetaNode(nodeName='FacialNode',attr='Facial') facial.connectChild(node='Lips_Ctr',attr='Lips')Now the beauty of this is that because the MetaClass base wraps all the Maya attrs and autofills the python objects dicts, we can lituarally walk the dag graph with dot complete! So to get to the Lips we can simply do the following, all of which autocompletes in the Maya scriptEditor for you ;)
mRig.Support.Facial.LipsAlso because of the way the mRig manages the Controls all of the controllers added above show up in the autocomplete on the mRig node. So you can just go MRig.Head to get the headCtrl back. I'm trying not to restrict this stuff, I'd rather make this as open as I can.
Again, the thing to bear in mind is that the main python objects __getattr__, __setattribute__ have been modified so that getting and setting all data types from Maya nodes is automatic. This includes getting and setting Emums and Message links.
I'll up the latest build of this module is now up on my Google Drive, see download link in the Tags
cheers
Red
Tuesday, 14 August 2012
MetaRig Class, looking for testers and feedback!
Going to do more on the MetaRig for Rig handling and finally look to integrate it into the whole tool chain over the next few weeks, hopefully I'll have a build with this all functional ready for testing soon. The idea is that you wire your rig to a MetaRig node and then no longer have to worry about setting the filters up in all the Red9 Ui's, they'll all just automatically pick up any MetaRigs in the scene and act appropriately.
Why, well with this setup it won't matter what rig you have, or how it's setup, this is just hidden data that binds up to anything you throw at it. It also means that via the api I'm doing you can just grab any controller in code in a very object oriented manner from the Python calls. So if you have a MetaRig node simply doing a dot complete on it will show you, and return all the controllers wired to it. It also means that all your code from that point on becomes completely generic.
From the Class Examples:
#MetaRigging! #----------------------------------------------------------- #This class is a wrapper of the main class aimed at managing #complex rigs and finding controllers. Simple concept, you #make a blank mRig node and just hook the controllers up to it.
import Red9_Meta as r9Meta mRig=r9Meta.MetaRig()
#add all given nodes to the 'RigCtrl' msglink mRig.addGenericCtrls(cmds.ls(sl=True)) mRig.getRigCtrls() //returns : all RigCtrls from above #note that the default mClass connect will allow you to still #add a list of nodes to a specific msg attr. mRig.connectChildren(cmds.ls(sl=True),'mirrorLeft') #From a MayaNode return all connected mNodes as mClass objects mNode=r9Meta.GetConnectedMeta(cmds.ls(sl=True))[0] #The above is the most basic use. Wiring all given nodes to a #single attr, the issue here is to find a specific controller #from the list? So we have a singular Add function which binds #the given node to a single message attr, suffixed with 'CTRL_' mRig.addRigCtrl('MyMaya_Ctrl_Hips', 'Hips')) mRig.CTRL_Hips //return : MyMaya_Ctrl_Hips #Note that because of the autofill on the object, once you #have a mClass Rig object you'll get a list of all the hooked #Controllers (added by this method) on completion in the #scriptEditor. Whats more mRig.getRigCtrls() will still give you #a full list of them back.
Also I'm going to bind up some extra data to each controller thats added for the mirror setups that I'm working on.
Looking for testers if you fancy getting involved let me know!
Red
Subscribe to:
Posts (Atom)