Wednesday, 23 April 2014

Red9 Studio Pack v1.42 released

So it's been a while since the last release but now everything is on GitHub it should be a lot easier to manage releases, I'm just going to take tags so you get full access to everything. Also the main branch of code is the gitHub trunk so you see any changes as I commit them on a daily basis.

Download is a lot easier than on GoogleDrive, just click on the tag and there's a link to download as a zip.

cheers and keep the suggesttions and comments comming, they do help!


Highlights of the release are also commented up there but just in case:


  • New - Red9_Audio - added BWav support to the AudioNode. This allows you to inspect and retrieve Timecode data from any broadcast wav
  • New - Red9_Audio - added a new 'inspect' item to the Red9 sound menu in the Trax for inspecting the internal properties of the selected sound node
  • Mod - Red9_Anim - Stabilizer wasn't respecting the keyer groups when you set it to just track 'rots' or 'trans'
  • New - Red9_Anim - CopyKeys now deals with animLayer by pre-merging the data to a temp cache before copying the merged data. The original layers are left in tact!
  • New - Red9_Audio - added a function getMediaFileMetaData() which is capable of extracting metaData from most media file types via ffprobe.exe
  • Mod - Red9_Pose - added a filterMap param to the poseCompare call. This can be used as a master core list, only nodes that appear on this will be checked against. Useful for checking core skeleton nodes whilst ingnoring others
  • Mod - Red9_Pose - added an ignoreBlocks to the poseCompare call. This allows the code to ignore complete sections of the compare data, we mainly use this for ['missingKeys'] so that the compare skips them
  • Mod - Red9_Anim - modified the AnimUI behaviour such that the 'CTRL' key modifier is now stored with the UI. If you laucnh the UI with ctrl held it'll toggle between launching as docked or not.
  • Mod - Red9_Anim - exposed the snapTranslates and snapRotatesflags to the snap() call in AnimFunctions Mod - Red9_Core - Mods to the LockChannels class for better behaviour, set hierarchy flag to false by default.
  • New - Red9_Meta - new flag exposed at class level '_forceAsMeta'. This forces the code to ALWAYS return instansiated MetaClass objects when dealing with nodes rather than dag paths.

Tuesday, 15 April 2014

Coding a Maya Production Pipeline with MetaData

Heads up.. I'm going to be doing a presentation at Develop in Brighton this year about how to utilize Red9Meta in a production pipeline, running through some internal examples of the tools and Maya dag structures that we're currently working on at Crytek. 

This will be an overview really, how and why metaData helps not just in constructing complex setups, everything from Exporter, Facial and Rigging pipelines, but also as a light coding api to deal more seamlessly with nodes in Maya.

For all of those doing the Rigging Dojo Character Engineering course, might be a good chance to catchup.

More details to follow but if there's anything in particular that you'd like me to include drop me a mail. 



Wednesday, 19 March 2014

Red9 Sound and Audio handler updates

Finally got round to doing a quick demo of the new AudioNode handler in the Red9 StudioPack. This one shows how you can use the 'compile' function in the sound menu to pre-compile multiple sound nodes in Maya so that you get a complete soundtrack to any playblasts. Anybody who's ever tried animating to multiple sound nodes in Maya, particularly when animating dialog will know how frustrating it is when you then try and playbladt that scene, and only get 1 sound track included!!

I also go through the new inspect code, capable of extracting metaData info from wav files including full support for Broadcast wav's. This is really useful to gain access to thiongs like internal timecode data. There's also extensions capable of extracting metaData from any media format, Mov, avi etc but for that you have to download ffmeg which I use in the inspect call.

I'm really keen to hear from those running MacOs or Linux, does the compiler work for you?

thanks (don't forget the donate button...cough...)


Wednesday, 12 March 2014

Red9 goes all GIT!

Well this has been asked for by many of you for a while so I'm finally sorting it out, pushing Red9 repository up onto GitHub. I've always used a private SVN server but this should give people more exposure to the changes happening on a daily basis.

Still getting by head round GIT so bear with me


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


Monday, 3 March 2014

Broadcast Wav support

New Sound file inspector:

Anybody who's dealt with moCap sessions where you're recording audio will have probably run into the broadcast wav format, an extension of the standard wav but containing a whole extra chunk of metaData specifically aimed at syncing data around studio's. The key is that it includes an internal timecode for the wav, usually pumped into it from the studio's timecode generator so that video, audio and moCap all has the same reference and can be kept in sync.

In order to use this at work, and because we use the Red9_AudioNode as a basis for all Maya audio functions, I've added in full BWav support to the Red9.AudioNode this is both at a simple inspect level (Wav Inspector - launched from the Red9_Sound menu in the Trax Editor seen below) and full support from the code side, so you can cast any sound node to a Red9_AudioNode and just run the .bwav_getHeader(). This builds up an internal dict with all the header data bound to it.

If the wav isn't a Bwav then you still get the main header data, it just omits the BroadcastWav block from the UI.

This has been an absolute pain in the arse to extract as I've had to get deep into binary chunks to fine where in the file stream the Bwav header data block exists!

Anyway, this will be in the next release, unless you want to give it a whirl in which case drop me a mail



Friday, 21 February 2014


Wow, it's been a while since I posted anything, I've been meaning to do some Vimeo demos going through the new stuff in StudioPack v1.41 but just been too busy at work fire fighting to get round to it.

Have people found the 'AudioCompiler', or even the PoseBlending or MaintainParent functionality in the poseSaver, I really must do some demos next week if I get time!

I'm looking at supporting animLayers in the CopyKeys code, question is, what would people like in terms of functionality when copying anim data between 2 sources...
Should it:

  • A: sample the data from the src node, merge the animData in memory and push that to the destination as single baked anim curves. Basically baking the data on the fly but not touching the original. 
  • B: push the destination nodes into the corresponding animLayers of the source and copy the data per layer. Kind of reconstructing the animLayers memberships for the destination. The issue here is what do you do if the destination node already has animLayers?
  • C: just not bother, animLayers are Satan's Testicles and Autodesk should add this kind of support from the core!

I really wish Autodesk would do something with animLayers, either write the rest of it or kill it dead as from a pipeline and production point of view it causes so many issues!