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 :)
Showing posts with label PoseSaver. Show all posts
Showing posts with label PoseSaver. Show all posts
Friday, 7 March 2014
New Pose Saver tools and features
Well it's been a while since I did a demo so here's one that goes through the upgrades to the poseSaver in v1.41.
New PoseBlending: Pose Blending is a new feature that allows you to mix in a percentage of any pose to the current state of your controllers. When you RMB>PoseBlend you get a new slider UI that controls the mix. Note that when this slider is launched the current state of the rig is CACHED against it's current state so please be aware of that. I had to do this to get the slider to react fast enough to make it worth doing.
New MaintainParents: Another big update to the poseLoader. This one allows the pose code to 'hold' or maintain a given set of attributes during pose load. This not only returns the given attrs back to their current state prior to loading the pose, but it also recalculates the pose at the same time. This means that even if a pose is stored with all the controllers in one parent space and your current controller is in a different space, the original stored pose will still be reached, but it'll be recalculated in the current space ;)
This relies on the 'relative space' flag and is only available in this mode as I use this mechanism to do the psace compensation.
Any comments, suggestions or bugs let me know
Mark
Tuesday, 5 November 2013
Red9 StudioPack v1.40 - update video :)
Well it's nearly time for another release of the pack, this one will be a big one as there's been a hell of a lot of development behind the scenes to optimize and streamline the workflows. Thought I'd do an update video as it's far easier than trying to write it all down!
Highlights of v1.40:
- New - 'Use Priority as SnapList' in the hierarchy tab. This is THE biggest upgrade for a while, see the video as this is a massive optimization and gets over a ton of issues.
- New Presets in the hierarchy for Stewart, TSM and Andy rigs - these need testing.
- Object and CharacterSets are now handled like any other hierarchy in the filters.
- Red9 HUD integration in the channelBox has been upgraded and now supports both simple Hud elements and sliders.
- Pose Relative upgraded to support the new Snap methods
- SnapTransforms now upgraded to support the new Snap methods
- Track N Stabilize upgraded, now supports separated trans and rots in the tracker.
- SnapTransforms plugin now takes tran and rot flags
- More functionality in the InteractiveCurve UI
- MirrorUI upgraded, now allows a pre-clear when loading mirrorMaps.
Hopefully I'll be pushing this pack out in the next week or so
cheers
Mark
Thursday, 16 May 2013
PoseSaver on Steroids!
Another Vimeo demo added, this one goes through the more advanced features in the Red9 PoseSaver, features aimed at giving the more technical among you access to expand and modify it's behavior on the fly. We use some of these features internally at work to tailor the behavior of specific folders, allowing us to store facial and finger data which need additional logic. I also go through the PoseCompare and hopefully shed a little more light on the filterPriorities and their relevance when loading relative poses.
This is build v1.31 which I'll release sometime over the weekend. For those of you following Red9 on Facebook you'll also have seen that the new pack includes Audio support via a new menu in the TraxEditor. I'm sick to death of Maya2013 not letting us delete sound from Trax so thought I'd add a few features to teh pack, including a few very simple but useful sound tools.
Still looking for more testers so if you want to get involved drop me a mail
cheers
Mark
Wednesday, 20 March 2013
PoseSaver - extensions ;)
I'm designing a new setup for the poseSaver to allow you to easily over-load and manage your own node handling within pose folders and was wanting to see if anybody had any feedback on this one...
So the idea is that any folder that the poseSaver points to, be that the main poseFolders or subfolders, can now have a python file in it that over-loads the main getNode handler in the pose function. Why??
Lets say you want to have a folder specifically for facial, and that facial in your rig is managed in a different way, or you would like to modify the filter used to find the nodes. You may even want to pass a node list directly in. At the moment it's hard work and would mean that for each folder/poseType you'd have to either change the rootNode (setRoot) or change the filter.cgf.
The new stuff will make folder type poses a doddle, if the code finds a python file in the folder then that file is passed and used pre the load or save calls. At the moment I expect 2 functions in there:
These functions are run before the pose handler so you also would have the opportunity to do any file modifications in order to get the scene into the correct state for the pose functions. I may also support a teardown() function just in case you needed to do temp modification's that needed returning after the save or load call.
Anybody got any further thoughts on this? I'm thinking this would give you full control and it would make the systems far more open and customization
cheers
Mark
So the idea is that any folder that the poseSaver points to, be that the main poseFolders or subfolders, can now have a python file in it that over-loads the main getNode handler in the pose function. Why??
Lets say you want to have a folder specifically for facial, and that facial in your rig is managed in a different way, or you would like to modify the filter used to find the nodes. You may even want to pass a node list directly in. At the moment it's hard work and would mean that for each folder/poseType you'd have to either change the rootNode (setRoot) or change the filter.cgf.
The new stuff will make folder type poses a doddle, if the code finds a python file in the folder then that file is passed and used pre the load or save calls. At the moment I expect 2 functions in there:
def poseGetNodesLoad(): #do your stuff and filtering return filteredNodes def poseGetNodesSave(): #do your stuff and filtering return filteredNodes
These functions are run before the pose handler so you also would have the opportunity to do any file modifications in order to get the scene into the correct state for the pose functions. I may also support a teardown() function just in case you needed to do temp modification's that needed returning after the save or load call.
Anybody got any further thoughts on this? I'm thinking this would give you full control and it would make the systems far more open and customization
cheers
Mark
Friday, 22 February 2013
New Features Coming soon!!
Well I've been busy over the last few nights trying to get a ton of updates into the pack.
PoseSaver now supports SubFolders:
Note: the PoseSaver code already uses a more precise node match.
This new build is in testing at the moment
cheers
Mark
PoseSaver now supports SubFolders:
SubFolders will switch the UI to display all child folders
from the current PosePath, ie, PosePath/subFolders, selecting any of these will
switch the UI to show poses in the chosen subFolder. I've clamped it to a
single child folder as I really didn't want this UI to get out of hand. I guess
it could expand with double click and single click commands but let's see how
we get on. The Clear button will clear the subFolder text and thus return you
to the root folder poses.
CameraTracker:
Also added is a tool that I used to death at Eurocom, an
automated cameraTracker. This is great for moCap deliveries as it means you can
just select a controller, or mesh and have the camera track the motion, saves
continually shifting cameras to see deliveries. It's also great for seeing
things like walk and run loops on the spot or aiming in on facial.
Working process: you select something for the tracker to aim
at and choose either panning or tracking camera. The code will use the current
camera in the current modelling panel and track the selected over time. As with
all the Red9 code timeRange is either the current playback timerange, OR the
area in the timeslider highlighted in Red. Tracking moves the camera, panning
leaves it where it is and just aims at. This is a really simple bit of code,
all it's doing is hacking into Maya's viewFit calls, the same thing you do when
you hit the 'F' key. The option box lets you set the framestep used between
samples.
Code Cleanups:
The AnimationFunctions class now takes a matchMethod arg which switches how nodes are matched during node processing. By default when it tries matching nodes in 2 hierarchy it allows prefixes, so SID_L_Wrist will match L_Wrist. I do a test to see if either name ends with the other, if it does it's considered a match. Now this can fall down if you have similarly named nodes in a hiererchy, like in facial you may have L_LowerLip and L_LowerLip_f, now these technically in the current setting will clash and may give unwanted results. So the arg flag is there to modify this. I've not yet exposed it to the UI but may add a settings optionBox in there somewhere to allow you to modify this flag.
This new build is in testing at the moment
cheers
Mark
Saturday, 29 December 2012
Full Demo Video at last!!
At last I've had time to sit down and do a full run through of the Red9 Studio Pack. Many more demos to come so watch out.
thanks
Mark
thanks
Mark
Labels:
CopyAttrs,
CopyKeys,
Maya,
Mirror,
PoseSaver,
Snap,
TimeOffset,
Tracker n Snap,
Videos
Tuesday, 6 November 2012
Updates.... gearing up for a new release
Been a while since I posted any updates so wanted to keep you all abreast of what's been happening to the pack. There's been huge development gone into the core of this recently, lots of UI updates and workflow cleanup to make it all a bit slicker in general.
PoseSaver has had a lot of work and now lets you load poses in relative space. The idea is that you select a node you know to be part of a saved pose, I then allow you to load the pose such that that selected node remains in place, the pose is loaded relative to it. This has 2 options for rotate and translates which both allow either 'projected' or 'absolute' calculations. Projected does just that, for rotates it calculates the global direction (relative to the current working up axis), in general that's the Y-axis direction. So you select a node, I workout the difference between it's current direction and it's stored direction, then apply the pose to compensate that difference, in effect locking the node in place. If 'absolute' is selected then rather than calculating the general direction, I just apply the pose completely around that selected node, allowing rotate in all axis. Similar thing happens for translates, either relative to the groundplane, or absolute, allowing vertical offsets.
Now like most of the tools the posesaver relies on the filter being set in Tab2 (above). To help I've unlocked the Node Priorities field and allowed you to set those up from selected nodes. The Node Priorities are CRUCIAL for PoseLoading in relative space as I often need to know the order in which transforms are applied. Lets say in a general rig the Hips are a child of the Root ctrl, so if I offset the Hips BEFORE the Root then you end up with double transforms and screwed up data. This is where the priorities come in, in the above, I'm specifying that root_control is processed before hip_control. You only need to set priorities on those groups that may cause this double transform.
You'll also notice that in the searchPattern above there's a new operator 'NOT:' this is way of excluding nodes that match everything else in the filter. So in the above, L_Arm_IKBlend_cont would match the filter 'cont', but because it's also specified as 'NOT:IKIKBlend' it is then excluded. This is a great addition to the filters and is also going in the attribute search as we speak. In fact for the attr search I'm also going to add a '=' operator as well so you can also catch specific attrs with specific values.
MetaData has had more upgrades. Lots of work gone into the core of the MetaClass. mNode in the class is now a property that wraps the MObject itself, so it doesn't matter if you rename of parent the node, the object will always be in sync. I've also allowed the message attribute handler in the _getattribute__ block to return both sides of any message links. This was needed as I've been testing the idea of casting the HIK characterProperties node to metaData and using it as our internal skeleton definition setup, but that node is wired such that the node is the child not the parent of the joints, hence the change.
Lots of other things happening so I'll keep you posted
cheers
Red
PoseSaver has had a lot of work and now lets you load poses in relative space. The idea is that you select a node you know to be part of a saved pose, I then allow you to load the pose such that that selected node remains in place, the pose is loaded relative to it. This has 2 options for rotate and translates which both allow either 'projected' or 'absolute' calculations. Projected does just that, for rotates it calculates the global direction (relative to the current working up axis), in general that's the Y-axis direction. So you select a node, I workout the difference between it's current direction and it's stored direction, then apply the pose to compensate that difference, in effect locking the node in place. If 'absolute' is selected then rather than calculating the general direction, I just apply the pose completely around that selected node, allowing rotate in all axis. Similar thing happens for translates, either relative to the groundplane, or absolute, allowing vertical offsets.
Now like most of the tools the posesaver relies on the filter being set in Tab2 (above). To help I've unlocked the Node Priorities field and allowed you to set those up from selected nodes. The Node Priorities are CRUCIAL for PoseLoading in relative space as I often need to know the order in which transforms are applied. Lets say in a general rig the Hips are a child of the Root ctrl, so if I offset the Hips BEFORE the Root then you end up with double transforms and screwed up data. This is where the priorities come in, in the above, I'm specifying that root_control is processed before hip_control. You only need to set priorities on those groups that may cause this double transform.
You'll also notice that in the searchPattern above there's a new operator 'NOT:' this is way of excluding nodes that match everything else in the filter. So in the above, L_Arm_IKBlend_cont would match the filter 'cont', but because it's also specified as 'NOT:IKIKBlend' it is then excluded. This is a great addition to the filters and is also going in the attribute search as we speak. In fact for the attr search I'm also going to add a '=' operator as well so you can also catch specific attrs with specific values.
MetaData has had more upgrades. Lots of work gone into the core of the MetaClass. mNode in the class is now a property that wraps the MObject itself, so it doesn't matter if you rename of parent the node, the object will always be in sync. I've also allowed the message attribute handler in the _getattribute__ block to return both sides of any message links. This was needed as I've been testing the idea of casting the HIK characterProperties node to metaData and using it as our internal skeleton definition setup, but that node is wired such that the node is the child not the parent of the joints, hence the change.
Lots of other things happening so I'll keep you posted
cheers
Red
Thursday, 24 May 2012
Big update v1.23 - New PoseManager
I've just updated the Download folder with the latest build StudioPack v1.23. As always just follow the Download tag on the right, I leave all builds in my Google Docs drive. This is a big update for the PoseManager system with a new UI and new Thumbnail support. Lots of extra functionality on the RMB in the UI too. I've also modified the setups to hopefully run under OSX and Linux with the help of a few friends. As always and suggestions or bugs are more than welcome.
I'll update this link with a Vimeo demo I've just uploaded at some point soon
Red
Tuesday, 24 April 2012
Red9 StudioPack v1.22 : PoseUI more support added
I've been tinkering away and think I have the first version of the PoseSaver up and running. I'm still in the process of changing the TextScroll UI to include thumbnail previews but the rest of the code is now running. I'm looking for testers to help get this nailed! There's a growing RMB menu bound to each pose entry also
Download as usual on my GoogleDocs:
Red9 Download Folder
Download as usual on my GoogleDocs:
Red9 Download Folder
Tuesday, 21 February 2012
Red9 StudioPack v1.20 - PoseSaver
Well I've been tinkering away for a while with this and wanted to push a test version out with the new PoseSaver implemented. At the moment the UI is pretty basic, just a textScroll with some RMB menuItems but as I get more into this I'll do the usual icon support etc that everybody expects from a PoseSaver.
So what's different about this one? Well like the rest of the Animation UI this one runs off the Hierarchy filters, so from the selected root the hierarchy's are filtered and that result passed onto the poseSaver. The active filter (whats in the Hierarchy tab) is also stored internally in the PoseFile so the code uses the filter as it was when stored to reload the data. Maybe as an option I let you over-ride this? Also lets you load on selected nodes rather than passing through the filter if you only want to load the pose to certain controllers.
As with everything this is namespace independent, the short name of the nodes are used as a key in the pose dict (although the long path is used for the compare). I also store the index of the items in the hierarchy so that in the future you'll be able to map on index rather than name.
Finally something that I'm working on is the ability to load the pose IN-PLACE. Currently like most pose savers the data is loaded as it was stored so the pose will load in the same space as before. Now this is great, but what if you wanted to load that pose when the character is halfway up the stairs? So in the next version hopefully you'll be able to select a reference node (something you know is in the posefile) and the code will apply the offset between where that node is now, and where it was stored to the rest of the data. Basically shifting it in world space on the fly.
Anyway, all comments welcomed as usual. If you'd like to get involved drop me a mail
For the latest version go to the Download page and grab v1.2
Red
So what's different about this one? Well like the rest of the Animation UI this one runs off the Hierarchy filters, so from the selected root the hierarchy's are filtered and that result passed onto the poseSaver. The active filter (whats in the Hierarchy tab) is also stored internally in the PoseFile so the code uses the filter as it was when stored to reload the data. Maybe as an option I let you over-ride this? Also lets you load on selected nodes rather than passing through the filter if you only want to load the pose to certain controllers.
As with everything this is namespace independent, the short name of the nodes are used as a key in the pose dict (although the long path is used for the compare). I also store the index of the items in the hierarchy so that in the future you'll be able to map on index rather than name.
Finally something that I'm working on is the ability to load the pose IN-PLACE. Currently like most pose savers the data is loaded as it was stored so the pose will load in the same space as before. Now this is great, but what if you wanted to load that pose when the character is halfway up the stairs? So in the next version hopefully you'll be able to select a reference node (something you know is in the posefile) and the code will apply the offset between where that node is now, and where it was stored to the rest of the data. Basically shifting it in world space on the fly.
Anyway, all comments welcomed as usual. If you'd like to get involved drop me a mail
For the latest version go to the Download page and grab v1.2
Red
Labels:
PoseSaver
Subscribe to:
Posts (Atom)





