Monday, December 5, 2011

Merry (Insert your winter holiday of choice, but for me...) Christmas!

Morphy tip of the month: If you're having slow playback, try commenting out the squash stretch expression. How do you do that? Open the animation expression editor and find the morphy squash stretch expression. At the very front, put a '/*' and at the very end, put a '*/'. Then edit. 
Morphy is one year old this month. Happy birthday, buddy.

First off, if you're interested in listening. I had the pleasure of being interviewed by a passionate animator in Austin and that podcast is now up. (Does everyone think they sound more nasally than they think they should when hearing one's voice?) -

Back to Morphy....

Some fantastic facial poses in this one.

From a guy who's been on here a few times. Great work!

A wip I stumbled across on vimeo.

Several shots on Stina's reel

AND this month in the 11 Second Club of Awesomesauce there were some great entries with a Morphy entry placing second. Some of my favorites were:

Sunday, December 4, 2011

It's gui in the middle...

My first GUI!

So, I've been learning python for the last year and have piles of tools I could use...when my brain remembered which module they were in and what the call arguments were. Handy, I know. As efficient as that was with all of our diabolical plans it made sense to have tools that were usable for other people.

Initially I looked at doing QT but after talking to some friends I had concerns about compatibility with artists all over the place. Eventually these tools will be a part of the Morpheus suite so I wanted to get as few potential blocks out of the road as possible. 

So the last few days I've been digging in to basic maya gui making and all the craziness that entails. Adding error checks (that seemingly Maya 2010 and below don't support mc.warning nor the wordWrap tag...yay....) and getting a feel for things. 

Now I've got a pretty well functioning tool in 2011 and above. 

Some of my thinking in designing a tool...
  • One button/many functions - One things I love in silo is how so many tools are contextual and that's something I've tried to emulate where possible. So there's a lot of logic going on behind the scenes to figure out what do based on your selection
  • Easy help - the help stuff doesn't load by default (it's the stuff with the lightest back), there's a toggle that turns it on. It's on in the attached image
  • Build a base tool module that all the rest of our tools can be built from.
  • Less steps. Anything created with a tool should be named intelligently. I'm using my bbAutoName stuff as a base for naming everything in the system and it's working pretty well so far.

What does bbLocinator do? 
  • Makes named locators off of pretty much anything - anything with a pivot, faces, verts, edges, cvs, curve or surface points and I think that's it.
  • Locators created match point, rotation and rotation order of source objects wherever possible.
  • Creates locators at the pivot of objects by default (objects only, not components), option to make it use the bounding box center for point position if desired
  • Intelligent naming - you'll always know where a locator came by just looking at it's name
  • Create a loc at the center of a selection - objects, edges, whatever...
  • Create a loc that's the closest point on a surface to a target object - works with polies, nurbsSurfaces, and curves
  • Loc every cv of a curve either at the cv position or at the closest point on the curve to that cv
  • Update any locator made with the tool either over time or just on the frame you're on
  • Tag an object with a locator so you can update that objects position just like the locator
  • Bake every frame or just keys on the tracked object
What's next?
  • Get the template stuff nailed down so that any tool can call  what it needs. 
  • Several other batches of scripts need to be gui'd
  • Figure out how to handle older versions of Maya 
If you have thoughts, suggestions, insults or whatever, post em!

Wednesday, November 9, 2011

Only one month to 2012....

Where does the time go....seriously.

Morphy Tip of the Month: Please, please read the docs or check the threads on 11 second club. Most of the emailed questions are a bit... repetitive:) 
This month in Morpheus....

Some great posing here and I do believe the first cross dressed Morphy:)
Do believe this is the first cross dressing Morphy vid I've seen:)
Great showing on the 11 second club this month with Morpheus entries in 2nd, 3rd and 4th places as well as peppering through the rest of the entries. AND most of them female. Bout time:) Nice work all!

As a short update -
  • Been working hard on a cartoony freelance gig (animation and rigging) for the past couple of months and locked on that through early December. Had a lot of fun with it and can't wait to see the final renders. It's NDA so it'll be a while till it makes the reel.
  • Garden City is moving along as well and deep in cloth sim and shader work. Bokser has been sending me updates and it's looking awesome. The film may actually be out by next summer. Whoda thunk!?
  • Hoping to get a nice block of time at the start of the year to finish up the rigger but we'll see how that shakes out with work and all.
  • SO MANY GAMES. Batman was incredible. Zelda in a couple of weeks. Loved Orcs Must Die and playing suffering (seriously, a death penalty that makes sections an unnecessary time sink?) through Guild Wars just because the sequal looks so amazing. 

Wednesday, October 5, 2011

Is it really October already....

Morphy Tip of the Month - If you hit render and all you see is black. You're most likely either 1) not using mentalRay or 2) don't have the textures connected

Been a bit busy, started another project I'll be in through December and last week did a demo of Morphy at the Austin Autodesk Group - it was a fun time and nice to see some old friends. Got a link from someone with  pretty sweet lookin camera rig I'd love to try out when I can. Check it out here -

Fun blacksmithing one

Some great Morphy work on a reel

From the 11 second club -

Friday, September 9, 2011

A Week in the Life Between Gigs...

Some folks wonder what freelancers do between gigs. Well I can't speak for them but for me more than a few days without a project to work on is a painful thing - I just really enjoy making stuff. As I've been posting sporadically, since the start of the year I've been working on a python rigger so aside from doing a little animation with Morphy a few months ago, that's what I work on.

Aside from the typical things of course . Like spending time with my wife when she gets home, grocery store trips, joggin the dog, cookin dinner and workin through mountain of stuff that gets put on the backburner when those crazy gigs come - oil changes, home repairs and the like. Also reading books. I read . A lot. My brother got me caught on The Game of Thrones series so that's kept me busy about a month of reading. Should finish the last one (so far) next week or so. Highly recommended if you like the fantasy genre in the slightest - except for you, mom....maybe a little non-PG. Some characters I've loathed I've come to really like. Except Cersei, I'll be amazed if Mr. Martin can redeem her.

Back to python. Maybe other TD's work different. I've never really worked in a studio setting with other td's writting code so I don't know but I find myself circling back through things I thought I'd fixed days before.  Also, my libraries of functions have gotten huge. Can't believe how long it took to figure out the traceback feature in this week. Some days I feel like an idiot.

Here's my running log from this week so far(which I've been using evernote for note keeping and really enjoying). For code writing I'm using jEdit and version tracking via an online code repository.


  • bbRiggingLib
    • locMeSurfaceCV
    • setCurveByColor(obj,color)
    • setCurveByIndex(obj,colorIndex)
  • bbDistanceLib
    • returnDirectionSortedDict(targetObject,objectList)
    • returnClosestObjectsFromAim(targetObject,objectList) 
  • bbSkinLib simpleControlSurfaceSmoothWeights
    • added a lot more calculating, doing a pretty good job now (though a little slow cause of all of the measuring)
  • bbAttributeLib
    • doSetAttr(attribute,value,forceLock = False)
      • set attr replacment that ignores locks, relocks if it was locked and has a forced lock override
    • doConnectAttr - see above
  • bbSpineRig
    • pretty much workin now want a better ribbon setup but the spine works with squash and stretch
  • bbDictionaryLib
    • returnColorIndex(color)
    • returnColorDict()
    • returnRotateOrderIndex(ro)
    • returnRotateOrderDict()
    • returnVectorToString(vector)
  • bbDistanceLib
    • returnClosestUPosition - made it work with compound curve objects
    • returnCenterPivotPosition - returns the coordinates of the pivot of a bounding box of an object or objects
  • bbModuleLib
    • returnSettingDataAsFloat - culls in the data from the settings as a float, parsing it if there are ',' to a list or to an array with the '|' divider
    • bbCurveLib
    • createTextCurve(text,size=1,font='Arial') all the text curve under a single transform 
    • createTextCurveObject(text,size=1,name=None,font='Arial') stores info for easy updating of the text or font 
    •  updateTextCurveObject(textCurveObj) recreates the text with new text and font info sizing it the same as what was there and replaceing the shapes that were there. All while leaving the original transform node unmolested 
  •  bbRiggingLib 
    •  centerPivotLocMeObject - like loc me object, however, for positioning purposes, uses the bounding box pivot of the object instead of it's actual pivot 
  •  bbControlMaker
    •  moved the limbControlMaker here from bbLimb
  • bbModuleLib 
    • createdcreateSizeTemplateControl - which makes a template sizing object for initital sizing data
  • bbSearchLib 
    •  returnObjectType - fixed logic for detecting shapes 
  •  bbRiggingLib 
    •  setCurveColorbyName & setCurveColor by Index - added shape detection so that if you feed it a shape instead of a curve it just does the shape, if a curve, it does all of it 
  •  bbCurveLib 
    •  made the update text account for parent scales to ensure it maintains it's proper size and stores the new scale, also made it retain curve color info 
    • Added duplicateShape because it's apparently not easy to do so with basic maya commands added gear, eye and teeth shapes 
  •  bbControlMaker
    • MasterAnim almost done working 
    • childControlMaker which will come in all kinds of handy
  • bbAutoNameLib 
    •  more fixing of the auto name logic made storeInfo default to locking the attributes, however there is a leaveUnlocked bool option now 
  • bbMathLib
    • multiplyList - does what it says, ignores 0's 
  • bbRiggingLib 
    •  parentPivotLocMeObject - takes the pivot of the immediate parent of an object instead of it's own while still matching orientation and oration order of target object, world if no parent is present 
    • returnColorsFromCurve - queries the colors of all the shapes under a curve and order them by volume encompassed
  • bbCurveLib 
    • made duplicateShape work with curves with children (yay compound curves!) 
  • bbLimb
    •  started the changeover to the new template setup 
  • bbModuleLib 
    • returnOrderedModules (redo) - Changed it to read the hierarchal relationship of the modules stored via message nodes to produce an order instead of the wonkier version I had before.
  •  bbControlMaker 
    • MasterAnim done 
    • childControlMaker done 
        Generates a radial array of controls around a base control where things start at noon and it divides
        the clock positions by the number of controls to make.  You can also change the mode so that you can
        tell it where to start on the clock and increment which to use.Stores the children controls to the baseControl
        as a message  node and stores the parentControl info to each generated control. It also takes into 
        account the colors of the baseControl using a secondary color if it exists.
        baseControl(string) - The control we're working off of
        controlTypes(list) - the controls you want created. If the type specified isn't in the base settings,
                             the control is created as a bbTextCurveObject
            Presets - settings
        mode(list) - (['even']) -  mode to set our values by and other information as required
            Options -   ['even']
                        ['incremental',30] - the firest term is mode, the second
                                            is the degrees to separate the controls by. Can be negative   
        baseAim(vector) - ([0,0,1]) - which way does your master control point
        baseUp(vector) - ([0,1,0]) - which way is up for your master control
        offset(int/float) - (0) - offset the starting clock position
        scaleMultiplier(float) - (.25) - multiplier for scale (default is .25) of the absolute size of the parent control
        distanceMultiplier(float) - (1.25) - multiplier for distance to travel 
        localRotationOffset(vector) - ([0,0,0]) - offset rotation for the controls if you want it
        aimChildren(bool) - (False) - aims the controls at the root of the base if True
        zeroGroups(bool) - (False) - if True adds zero transform groups to zero out the controls
        lockHide(bool) - (True) - If true, locks hides and makes unkeyable the typical transform attributes per control

    • bbControlMaker 
      • Heirarchy changes to the size object 
    •  bbLimb 
      •  returnTemplateSizeObject - returns existing objects or makes them and returns them if they weren't found 
      • doGenerateInitialPositionData
        •  initially looked at using curves from the start but am leaning towards just orienting locators aimed where I need and using multiply lists below against standard ratios stored via settings.conf
    •  bbRiggingLib 
      •  aimSnapUpObject (added) 
    •  bbDistanceLib 
      •  returnClosestUPosition - made it work if you feed shapes in it 
    •  bbMathLib 
      • multiplyLists - multiplies lists of values - [[2,3,4],[2,3,4],[2,3,4,3]] = [8, 27, 64, 3]

Tuesday, September 6, 2011

Morphy! By a noodle....

Morphy Tip of the Month: If you get some funky creasing in the face with a customization option don't hesitate to select the offending section and try a 'smooth skin weights' option or just manually paint in some smoothness around there. 

First off a big congrats to Pairatch Lerthajornwong for their winning entry to 11 second club. Check it here!

First the classical....

Then a little more hip

Morphy struttin it

Little drinky drink

And some more from 11 second club

Wednesday, August 31, 2011

Updated Reel - Sizzlin Houston Summer Edition!

Update of the ole' demo reel. Some new work from the last year and a test of ole' Morpheus posted a couple of weeks ago. 

What else has been happening....
  • Next month I'm gonna be doing a demo at the Austin Autodesk group and am lookin forward to seeing some friends there. I'm just plannin on doing a general customization demo but if anyone that'll be there would like something more specific post here and I'll see what I can do.
  • I also did a little interview for Simply Maya should you be inclined to check it out here
  • Created a best of Morpheus channel on vimeo  -
  • Work has been trucking along on bbThingamarig or bbRigger (whatever we end up calling it). Here's an update of what I've been working on
    • Curve tools - python based saving of compound and simple curves and creation and various other 
    • The rigging process - 
      • easy class based template creation is in place (one sided so far) with multiple arms, heads, whatever. Template has orientation and control helper objects which work well
      • Saving of template settings into the rig itself for easy re-creation.
      • Joint creation and orientation (from orientation helpers as well as the general orientation options from the settings.conf)
    • AutoNaming
      • Intelligent naming via type detection and tagging that happens in the rigging process accounting for children type names (i.e. groups deriving names from child and constraints getting their root from their objects as well).
      • Iterative processing in place
      • Absolutely unique name generation
      • Able to process whole hierarchy at once
    • Lots of other stuff:)

Saturday, August 13, 2011

This just needed to be posted....

Some of the funnest animation I've seen in some time....

Friday, August 5, 2011

Morphy Tip of the Month: I'm gonna be lazy and say watch David's videos below:)

Kicking off with a tutorial/demo from a internet friend of mine. David's class are the ones working on  the Morphy Wardrobe project. Nice demo Dave! Also, there's a part 2....

Fantastic bit of animation by matthewpresForwarded to me by Pierre. Thanks!

Great one I stumbled across on vimeo...

Some great Morpheus examples in the 11 sec club this month. An especially good one even got number 2. Congrats!

Sunday, July 24, 2011

Gatekey render, and stuff!

Waiting on a stubborn NDA to lapse to be able to show my updated reel. In the meantime, here's a rendered version of that Gatekey test I did a few weeks back to test out Morphy and add some lip sync to the reel.

This here is a Morphy version of a friend of mine who's been on me to make him one for a long time.

What else is shaking....
  • Started a vimeo channel for best of Morpheus stuff I see on there -
  • Kung Fu Panda 2 was fantastic, Cars 2 hit a nail on the road somewhere to completion.
  • Netflix is my new friend. My wife and I have been enjoying the BBC "what if he lived today" Sherlock miniseries with the British The Offices' Jim character playing a solid Dr. Watson.
  • Just wrapped a facial animation gig for the company a good friend of mine works at. Animating on the joints FTW!
  • One of my closest pals was here for a visit a couple weeks back and we brainstormed projects to take us at least till the end of civilization in 2012. I sure hope we finish before then so other folks can enjoy the stuff for a little while. Some pretty cool stuff, we can't wait to start connecting the cg community to it.
  • Been busy:
    • Drawing robots for another of those projects
    • Back into my nemesis Web designing for another
    • Digging back into Python for the rigger.
    • Started squashing some Morpheus bugs.
    • Just too much to do...
  • Team Fortress 2 has had a lot of updates since I stopped playing last summer which I've been digging through. The Castle keep map with melee weapons only is a ball.

Saturday, July 23, 2011

Basic problem solving - Scripting for a monotonous task....

So, I've been working a gig for a couple of weeks now and ran into an issue that Maya's base tools seemed to provide no good solutions. When I find myself in such a predicament I invariably find myself going down a path. Before I begin, a caveat - I'm an intermediate scripter and I'm sure there's much more efficient coding methods. However, functioning inefficient tools are better than no tools:) Hope this is helpful to anyone who happens to peruse these ramblings....

  1. Identify the need - In this case I need to ensure that a skinned mesh didn't have any vert with more than two influences. The annoying thing with maya is that even if you tell the skin to only have 2 influences and to maintain it it does the job about 98% of the time and just doesn't seem to care about that other 2%. Faced with the prospect of individually checking every vertex via the component editor for more that two skins, any other option is much more attractive.

  2. See if Maya has any tools to fix the problem - Messed with skin settings and the various mirroring, hammering and skin options to see if native maya can fix it. Sometimes this work, in this case it didn't

  3. To the internets! - Google and CreativeCrash check for a script or solution. If someone else has solved it and been kind enough to post the answer no reason to reinvent the wheel.

  4. Write a tool - Think through the requirements and results you need from a specific function or functions and beg, borrow and steal (while providing credit) the pieces to make it work.
For this little conundrum,  I wanted Maya to tell me if I had any vertices that had an influence above x influences and get that information in a usable format. Here was the particular flow on this problem.

  • For this script, I started with writing a function to return any vertices over 2 influences. 
  • As a part of that, I found the functions I needed to use need to know the skin cluster name which I remembered having wrote a function for a while back so I grabbed that.
  • Then, I thought it silly to cap it at 2 influences and allowed the user to specify the number of influences the user chose
  • Finally, worked on the workflow so that the user didn't have to type commands into the script editor as I wanted to be able to give my client a buttonable script for their artists. In the end it made sense to me to have it both report the bad verts as well as select the first in that list to easily get to work. If I was in a fuller production environment it might make sense to make a gui or modify the function to be able to select through the bad vertices list rather than a one off end function here.
In the end, spending an hour or two making a simple tool both enables a montonous task prone to user error doable as well as provides a tool for other artists to be able to do the same which is always a boon in production.

import maya.cmds as mc
import maya.mel as mel

maxInfluences = 2

def returnExcessInfluenceVerts(mesh, maxInfluences):
    skinCluster = querySkinCluster(mesh)

    badVertices = []
    vertexList = ( ([mesh+'.vtx[*]'],flatten=True))
    #Find the bad verts
    for v in vertexList:
        influenceList = mc.skinPercent(skinCluster, v, query=True, transform=None) 
        if len(influenceList) > maxInfluences:
    return badVertices

def querySkinCluster(obj):
    mel.eval ('$mesh = "%s";' % (obj))
    skin = mel.eval('findRelatedSkinCluster($mesh);')
    return skin
mesh = ( (sl=True))
if len(mesh)<1:
    print ('Please select a mesh')

    badVertices = returnExcessInfluenceVerts(mesh[0],maxInfluences)
    if len(badVertices)>0:[0], replace=True)
        print ('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
        print ('%s%i%s' % ('There are ',(len(badVertices)),' verts are over the max influence:'))    
        print badVertices
        print ('No verts over max influence')

Wednesday, July 6, 2011

Best of Morphy for July

Semih sent me an image from a couple characters from his film. This is certainly one of the "fishier" uses of Morpheus I've seen. If you can't tell, the fish's face is a modified Morphy head. Really nice work.

Nice one I came across in the 11 sec club wip forum.

Playful little piece with a little girl.

A ton of great pieces from 11 second club this month. Here's a few...

Monday, July 4, 2011

Independence Day! (and Morphy)

First off, happy Independence Day if you're in the U.S. and if you're not - happy Monday! Smoked a brisket yesterday and man do I love slow smoked meats....

This is a playblast version of my 'let's-try-out-Morphy' anim test. Had a lot of fun doin the segment and learned a good bit about the rig. Those interested can see progressive updates on my Vimeo channel. 

Voted on the 11 Second Club entries yesterday and there are a lot of solid Morphy entries. Best of luck to you all. However my high vote was for a Norman piece. No favoritism here:)

For some training wheels on customizing Morphy, you can download the customizations from my animation in their own respective scene files. Eventually I hope to have a more elegant customization saving solution but that day has not yet come.

Included are:

  • Fezik - Big guy
  • oldGuy - Key guy
  • Wes - Mr. Shoves a lot
  • Inigo - the Spaniard!
  • Base scene file with my lighting setup from this piece since some folks haven't the time or inclination to set up lighting. Some just wanna animate and I can appreciate that. REMEMBER - mental ray.

Some notes:

  • BEFORE you try pulling one into a scene, make sure your preferences are set to cm units. Otherwise the rig will self destruct.
  • The customizations reference the Morphy v1.0 rig. If you try to point to one you've modified, it probably won't work
  • Import whichever rig you want WITH 'preserve references' checked.
  • With that you should be off to the races

Sunday, June 19, 2011

What's good for the goose...

Yeah, I know. It's about time I did a Morphy animation test. As I was looking to update the ole' reel last week the lack of a quality lip sync was striking so I'm gonna remedy that as I can find time between gigs. Decided to do a clip from one of my favorite movies though one I haven't seen done much because it is a pretty popular film. I had a monologue from another movie I wanted to do but I'd never done a full keyframe sequence with a lot of characters so thought I'd give that a go.

Rough Blocking

I've already learned quite a few things by using Morphy in an animation which is the best way to test stuff. So first off, apologies for some wonkiness in some places on the rig. Here's a few things I've learned:

  • polySmooth causing major issues with simple customization - When I changed the surface of some faces and then ran a poly smooth, the shaders go all over the place. So, because I'm using mentalRay, I just have a mesh approximation setup to use my viewport smoothing and that works much much better. When I go back I may find a way to do the polySmooth that will work, but it's annoying. Apologies.
  • The uiCam's pivot is nutty - I gotta dig in to what's going on but in the meant time if you select the uiCam and turn off inherit transforms, it'll behave properly
  • Some of my geo has flipped normals.
  • Turn off the face shaper's visibility after you're done customizing so you don't keep selecting them inadvertently
  • Locking the geo selectability - While I understand my reasoning for doing it, it's a little annoying. 
  • Shoulder and wrist rotation orders - Still don't think I got this right. I'm playing with different setting as I'm working through my anim and will post what I think are best choices when I'm done
  • Eye orb mesh creasing against the cheek and in the brow when doing some customizatoin scaling - You can alleviate this to a large degree by selecting the mesh area verts that's getting wonky and smoothing the skin weights there
  • Limb scaling switching isn't as intuitive as it could be - having to manually change the stretch settings on the fk and ik to ensure matching isn't the best workflow. I've got some ideas at how to make that process better.
  • Head placement on the neck - taking the head's blue mover control and positioning the head a little more forward on the neck seems to work a lot better.
  • The spine blows - My pivots stink and I apologize for it. The hips are especially offensive. This shall be fixed.
  • Want to add pose mirroring
  • Want to look at the body geo to get better muscle topology
  • Fingers - Think I probably need to add an alternate finger setup what's more direct
  • Face controls - Though I like them for the most part, I think the lip roll should be on a separate control than the lip movers. One thought I had was to just pull all of that off the face and do a faceUI similar to what I have for the bodyUI (which I'm really enjoying). 
When will I get around to updating Morphy? The minor stuff here I think I can do before too long but the big stuff will be a while. Bokser and I have a long way to go on our rigger which I'll be using to do 2.0. 
Feel free to offer thoughts on the blocking or the rig thoughts. Thanks for all the support:)

Monday, June 13, 2011

Best of Morpheus (and one of Squirrely too) - June 2011

Morphy Tip of the Month: Adding some of your own customization to Morphy via clothes adds a lot to your pieces and will help set your shots apart from others as Morpheus starts populating other people's demo reels. It's always nice when it takes me a second to figure out if the shot I'm seeing is Morphy or not. :)

Finally got a bit of time to catch up on some stuff and the Best Of post was one on the check list. A big one I wanted to point out was the great work that some buddies of a buddy of mine have been workin on. Dennis inadvertently tested out something I'd planned on doing whenever I found some time - namely to use the Morphy head to help genearte a good first pass on shapes on a new head. Thanks Dennis for the R&D. Check it out here. Can't wait to see how the project shapes up!

Here's a sample image from the post.

Nice bit of animation from Leon. Lookin forward to seeing how his 11 second club piece shapes up this month:)

Great one I came across on the 11 second club wip forums. Thank you for using the shoulders well:)

A really nice WIP piece from Katy:

A few from last months 11 second club:

Thursday, June 9, 2011

Project NoName Revealed!

Project NoName (more widely known as Nintendo's E3 2011 3DS Animation Thing) went live at the Nintendo keynote on Tuesday. This is what we've been burning the midnight oil on for a while now. It was awesome seeing it live on the internet and Bokser was in the audience so we all lived vicariously through him. 

I'd like to throw out thank you's to all the people involved but I don't know whom I can talk about yet so I'll just say, "Thank you [you know who you are], for letting us be a part of this and for all your support."

The story of the how this project came about will have to wait for another day along with a clean render to put up whenever I get the clearance but I'm gonna say what I may. The clean version doesn't have that dark panel on the bottom either (it was added after it was too late for us to do anything about it...ah well).

The Pitch:Nintendo wanted a series of segments to first show off some upcoming 3DS titles and two as a bit of a show piece utilizing projection mapping. 

The Limitations:
  • Established well known IP's - As such, how characters move and what they can do is fairly well established and must be adhered to. Also, characters from one game could not be on the screen as other characters at the same time so clear delineation between segments was a must.
  • Flexibility - The segments were required to be created piecemeal so that the order of them could be changed right up till the show.
  • Projection mapping - For those of you not familiar with projection mapping, there are certain "rules" if you will which need to be obeyed for the effect to work to it's best. The main one is that you have to "color in the lines" which on a building is a fairly large are but when you have lots of panels like in this case, require creative thinking to work around. So for example, no character or main content piece can cross a panel's edge that is closer to the audience. You can come from behind a panel but you cannot start at a front one and jump down to a lower one over the edge. It's a bit confusing until you start playing with it - but it is what it is. The reason you don't do it is that it causes major distortion in the image. We did break the rule a little on the effects but they're so fast that you don't really see it. 
  • Assets - First off, Nintendo's support was great on this front and for the most part we took skinned characters and assets and added our own rigs. We only had so much bandwidth to make stuff from scratch so we had to use that time judiciously. Because of that many of the sets and concepts evolved based on what they were able to provide.

The quick facts:
  • Production time - 6 weeks
  • Preproduction - 3 weeks 
  • Resolution - 3335 x 1080
  • Animation - 5 segments ~ 18 seconds apiece 
  • Characters rigged - 12 
  • Props rigged - 17 
  • Sets - 5 
  • Pots of coffee drank - a lot 

Visuals Team (alphabetical!) - The audio and some other work was handled by some of the great people at the company I've been working with but don't know if I can mention them yet. However, I will name our visuals team and give each and everyone of them a hardy thank you for their great work. Without further ado,  Team Project NoName :
What did I do?
  • Co directed and acted as project lead and liaison with ...the people I can't talk about yet
  • Acted as art director/animation lead 
  • Segment Concepts and boards
  • Set Designs 
  • All set modeling blocking (Berenty cleaned it up along with my nasty booleans) 
  • Layout and Animation - Kid Icarus segment only 
  • Character Rigging/TD
    • Kid Icarus 
      • Pit
      • Eye
      • Gun/sword
      • Bullet particles 
      • Set rigging 
    • Mariokart
      • Particles - smoke, sparks 
      • Road modeling, texturing (cave to loop only)
      • The poka dot mountains in the back
      •  Set Rigging
    • Starfox
      • Fox
      • Arwing
      • Set Rigging
    • Mario
      • Particles - implemented the prep work Bokser did 

Saturday, June 4, 2011


We wrapped up the project that has consumed the last 2 months of my life and delivered to the client. If you happen to be at E3 next week you may catch it.  This was an amazing project and one I plan on writing at length about as soon as I can.

For now, I'm catching up on a myriad of emails and relaxing for a few days. Today I get to hang some blinds for my wife and make some bird houses with neighbors. Nice change of pace.

In the meantime, if you haven't seen this film yet you really should. I love everything about it.

Thursday, May 5, 2011

Morphy May be around....

Morphy Tip of the Month: Take a look at some of the lip sync choices some of the stronger pieces have used (especially the example below). Seen a lot of animations that are pretty much just open/close and wide/narrow. Remember, wide can be smiling wide or terse/angry wide or a myriad of other options. Play with showing more teeth for some characterizations as well. Some folks talk showing more lower teeth, some upper. Play with it and keep up the great work! Morphy. nice job Shawn!

It's just a flesh wound Morcy! Great work Jed.

Fantastic mod, Tim and great animation too:)

Here's a good example of nice mouth shapes for lip sync.

And from this months 11 Second Club a few selections:

In other news....
The gig is going along great but working some crazy hours. Ran across a wild Maya bug though. Some scenes would only playblast at 24fps regardless of settings. Spent a good couple hours banging my head against Maya before looking up the hot fixes and finding I wasn't up to date and that was a known issue. So, if you're using Maya 2011 on a project, I'd recommend getting hotfix 3:)

Can't wait to see this project up and done. The team is doing fantastic work and I plan on bragging on each and every one of them as soon as I can talk about it.


Tuesday, April 5, 2011

April Showers brings MORCy!

Morphy Tip of the Month - Seems like some folks are having trouble hitting b/m/p. Don't forget that there's a lip sealer control that rides along with the jaw. Give it a go! Also, seriously... roll those shoulders down:)

An orc from Vitor

Some great animations I stumbled across or had sent in...

from Juan Couto (thanks for tagging it so I could find it). Fantastic mod!

from Bhavin for an iAnimate assignment

Some motion capture work from Josh in Tennessee

Some of last month's 11 second club entries:
Also, just found out I'm gonna be pegged on a gig through June and I couldn't be more excited. SO COOL....better get my posting out this week!

Sunday, April 3, 2011

Project M (for March!)...

Greetings internets! Wrapped up my gig on Friday and so glad to be done. Feelin a bit crispy. It was however a great experience working with a new concept - building projection. For those of you that haven't seen it, it entails projecting to a surface (often a building) whereby you do creative things with the surface to make it appear 3d for the audience. It was my what I expect to be the first of many with the TVP (a company based right here in Houston).

Looking forward to being able to show some of it. Here's some quick tidbits of my portion.
  • 5 weeks of production
  • Created template based rigging system for rigging the assets with body following, fin dynamics and auto swim functionality
  • Modeled and rigged 4 creatures and rigged one more
  • ~ 110 seconds of animation with aquatic creatures
  • New python scripts written:
    • createCurveFromJoints - self explanatory
    • createJointChainsFromLoftSurface - makes joint chains from a nurbs surface
    • attachJointChainToSurface - attaches joint chains to nurbs surfaces
    • makeChainsDynamic - makes input joint chains dynamic, connected to the same system and names everything intelligently
    • createDistanceNodeBetweenPosInfoNodes - creates measure nodes between position info nodes for measuring stuff on surfaces (like joint lengths!)
    • getClosestUV - finds the closest UV on a surface to an input object
    • getClosestCV - finds the closest CV on a curve to an input object
    • getClosestObjToCV - find the closest object from a list to an input CV
    • bbFish.finRigger, bbFish.rigSpine. bbFish.fixPoleVectorsCauseJoshIsAMoron (this was a good one:)
Spring means student films! So much talent out's some great ones.
  • Rain

  • Thursday

  • From Sheridan

  • And a sweet lookin maya plugin to top it off...

Saturday, March 12, 2011

When, where, how can I use Morpheus?

Gotten quite a few emails in the last week or so on Morpheus usage. They're mainly from students but there have been a few commercial queries as well. I tried to be clear in the docs, so I'm not sure if folks just aren't reading it or if I need to clarify. Some insight there would be helpful. (the docs are here). If it's not clear please lemme know.

So I'm gonna try to elaborate some...

  • Crediting - please just credit to Josh Burton and a link to the project website ( where anyone looking can find a full list of contributers. 
  • If you are a student working on school projects (including competitions) or a professional working on personal work - you can pretty much do whatever the heck you like with Morphy so long as the 'would Pixar make this kind of animation' rule has been met. Short film? Go right ahead. Competition? Knock yourself out. Yes, I know that you might win some money. If you do, awesome. There is a place to make a donation should you choose but I'm not asking or requiring anything.
  • If you are a school or competition wanting to point people to the rig - Awesome. Please use the link here -
  • If you are a professional or group of professionals working a commercial project - I've had a few queries on this and haven't come to a solution I'm comfortable with yet. I will say I am not in the least bit open to one time buy out option especially with an exclusive clause. I am open to talking about per project kind of stuff. If you'd like to chat about it, send me an email.
  • If you are someone who doesn't care about permissions or creator's intent - Really doubt if what I say would matter so not gonna bother. If it ever becomes an issue I can worry bout it then.

Sorry again for the lack of posts, been workin long hours on my present gig. Should be comin up for air in early April.

Sunday, March 6, 2011

March on Morphy!

Morphy Tip of the Month - Check out this tutorial from Andrea in Italy on how to more easily mod Morpheus' texture. Also,  don't forget to try scaling the hands down a bit for a more feminine look (or even using the finger tapering shapes if you're daring;)
A fun one from Stine who's studying in Denmark. Nice customization work too! Check out the other stuff on the vimeo channel as well...

Don't forget to check progress over on the Morpheus wardrobe project! Lookin pretty cool.

From last month's 11 second club:

Gonna be a crazy busy month with this gig. Don't know how much time I'll have for much else. If I don't respond to you, that would be why. I did finish a pretty cool python function for generating joint chains from lofted surfaces this evening...been coding like crazy the last couple of days as I have a lot of stuff to get rigged this week and doing it modularly will help:)

Monday, February 28, 2011


Just one of the beautiful sites...

My wife and I were away in Jackson Hole this past week to celebrate our anniversary and for a little vacation - we had a great time. Learned a few valuable lessons as well:

  • New favorite ski spot. Just as many slopes as Vail and half the peeps.
  • Do not assume that someone else will know that just because you're standing next to a national park sign and ask them to take a picture of you that they will think to frame the entire sign in shot (go go Owstone Tional Park!)
  • Vintage snow shoes work just as well as the new ones (and are stylish!)
  • Do not tuck the gator of your snowpants inside your ski/boarding boots unless you want a painful morning on the slopes. Yay circulation cut off!
  • D2D ski rentals are awesome. Oh, I don't have to stand in line to rent and turn in gear and not pay any more for that privilege? Yes, please.
  • First Steven King book. Picked it cause it was it was thick and I read fast. Very talented story teller but a bit dark and unnecessarily explanatory on some especially dark stuff. 
  • Pass bison on the right when snowmobiling. Also, they have the right of way.
  • I am not ready for black diamonds.
  • Whenever you're going to only eat someplace once it's never a bad idea to get the opinion of the waitor/waitress on what they think is good.
  • Even with heated seats, the back of a tandem snowmobile is much MUCH colder than the drivers seat.
  • There is way way too much sugar on the fruit and nuts in the classic snack box on United flights. I'd go far as to say an inedible amount.
With that, I have to get goin. Starting a gig today. It'll prolly be a light posting month as such. However hope to make some progress in the evenings on the python stuff.

jjb be gone.

Wednesday, February 9, 2011

Your Monthly Morphy update!

Morphy Tip of the Day - If the selection objects in the UI aren't working, you need to run boTriggers update script:)

First off, thank you for all the encouraging and kind responses to my last post. Back to the business at hand - congrats to Edwin Schaap for winning this month's 11 second club using Morphy! Here's a few from the month:

Couple of things in general to those of you using Morphy. His shoulders in the t pose are high cause the arms are outstretched. In general, if you bring them down for a regular pose it's going to look better. There are exceptions of course but try bringin em down and see what you think. 

What else is up? Well, progress is moving along on bbThingamarig and my python is becoming passable. Got the template maker working pretty well as well as the main architecture for the arm rig. I had initially been thinkin about just the roll joint setup like AFR and Doublstein's rig use but I'm leaning more towards a ribbon setup so I've been experimenting with that. I think the new spine in particular will be much much improved.

What about cool stuff from the nets?!
  • My good friend Scott Englert is working on some very cool stuff for maya. Check it out!
  • If you ever wanted to try Project Messiah, now is the time cause this temp pricing is nuts.
  • Also, this weather lately has been nuts -  65 one day and chipping ice off the water bowls outside the next

Thursday, February 3, 2011

Why Smalltown, Texas?

Crazily enough, a lot of folks have really enjoyed Morpheus and I'm very glad of that. It's been so much fun seeing what folks have made of him. That also means I've gotten a lot of emails which I try to answer. However one of the recurrent themes is one I'd like to address in a larger format.

Why don't you move to where there's more work? It's been a question that has come up many times by folks recently (potential employers as well). I've tried to answer as I can but thought perhaps I might elaborate here. The expressions I receive are of incredulity, sometimes amusement as I meander my way through the winding path of my own justifications.

Here's the short answer - It doesn't make practical sense to do so. Also, the BBQ is really good.

Here's the meandering one -

Having been working professionally now for 15 years - first in the Marine Corps, then as a freelancer/student, and now as an animator/generalist for the last 5 years I've chased some dreams and have a pretty good idea of what I want now - what I love to do. Part of that is definitely seeded in the more personal areas of my life - my faith, my history but more than anything it is the choices I've made. Sometimes we drift through life like a day on the river - beer in hand and make our course corrections after we bump into some log or rock. Other times we decide to go up stream or grab an oar and head towards something. Still others we make camp and stay awhile.

Too much of my own life was spent heading toward some place else - as if that the arrival of one destination or achievement would bring contentment and satisfaction. Some of those goals were met, others not. Those successes never brought more than temporary joy that quickly began to fade as the next goal started to grow in my mind's eye. Not that goals are bad by any means. As a tool to grow as a human being they're amazing. As a reason for existing they suck pretty hard.

So, I've tried to stop that.

The economy isn't the greatest and our industry is a fickle one so it would be pretty selfish of me to ask my wife to quit a very good and stable job so I can work on Project X (on a 3-6 month contract). Also, most of the places where Project X's are being made aren't very cheap. So over a period of time I processed those facts and came to some new conclusions. As cool as that might be working on Project X and though maybe life will make that a more tangible solution in the future, for now it doesn't make a lot of sense for me. I love my craft but my joy of it is not wrapped up in where I do it or for how much I do it for (though if I'm doing it for free more than likely it's for my own enjoyment - I've done more than my quota of "spec" gigs).

This next year I'm trying to avoid away on site gigs so that I can be with my family and spread roots in my community, take my dog fishin, ride horses with my wife, help my neighbors figure out how to hook up a wireless printer - become more like the man I believe I was made to be. I know these choices cost me work opportunities. My hope is that they pay off in the more important areas of life. So far they have. In the process I hope to be salt and light in a world that needs all it can get.

For those that were curious, I hope that answers the question well enough. To those that weren't, I doubt you read this far. To both, sorry for the grammar and editing mistakes.

Be salty and let your light shine.

Now, back to python... :)

Friday, January 14, 2011

Couple of updates...

Great animation I got in the mail from Mike P:

  • Updated the Morpheus Docs with info on the wardrobe project, instructions on mesh selection, and tips for selecting/keying stuff
  • Added page for the bbThingamarig project. Not a whole lot there yet:)
  • TD Matt is awesome
  • Allergies are winning today.

Thursday, January 13, 2011

Announcing the Morpheus Wardrobe Project

From one of the folks there

It's my pleasure to announce the baton has been taken up by the good folks at Ex'pression College to head a Morphy Wardrobe Project. It will be a free to use library that their students will be working on as well as inviting participation from anyone who wants to participate. It's so exciting to see folks excited about Morpheus and wanting to take it further. We'll be establishing protocols for props and clothes to make sure everything works great. Check it out!

In the meantime, work continues on the tools to make the rig even better with 2.0.

And some more great examples of his use from the 11 second club last month:

Wednesday, January 12, 2011 is kinda workin okay...

Color me surprised. Been workin on this the last two days. Some of the foundation stuff for the project. Still getting used to syntax changes but really enjoying the flexibility python affords.

Also found a better way to display code in posts, woot woot!

Josh Burton

Collection of functions for measuring stuff!

Function Key:
1) distanceBetweenPoints (point1, point2)
    return - distance
2) distanceBetweenObjects (obj1, obj2)
    return - distance
3) getWSPos (obj)
    return - world space position in array format
4) distanceBetweenObjectsArray (objArray)
    return - array of distances between each object in the input array

5) averageDistanceBetweenObjects (objArray)
    return - average of the distancees between the objects in the input array
6) measureDistanceBetweenObjs (objArray)
    creates - measure nodes between all ojects in the list,names them,  
              checks for a 'measure_grp' and if it finds none, creates it, parents distance nodes under that 


""" returns the distance between two points in space """
def distanceBetweenPoints (point1, point2):
    from math import sqrt,pow
    distance = sqrt( pow(point1[0]-point2[0], 2) + pow(point1[1]-point2[1], 2) + pow(point1[2]-point2[2], 2) )
    return distance

""" returns the distance between two object's pivots """
def distanceBetweenObjects (obj1, obj2):
    from math import sqrt,pow
    point1 = getWSPos (obj1)
    point2 = getWSPos (obj2)
    distance = sqrt( pow(point1[0]-point2[0], 2) + pow(point1[1]-point2[1], 2) + pow(point1[2]-point2[2], 2) )
    return distance

""" simple worldspace position query """
def getWSPos (obj):
    pos = cmds.xform (obj,q=True, ws=True, rp=True)
    return pos

""" Pass an array of objects into it and get an array of distances """
def distanceBetweenObjectsArray (objArray):
    from math import sqrt,pow
    cnt = 0
    objPositionArray = []
    distancesArray = []
    cnt = (len(objArray) - 1)
    firstTermCnt = 0
    seoncTermCnt = 1

    for obj in objArray:                    
        """get its positional data"""
        tempPos = getWSPos (obj)
        objPositionArray.append (tempPos)
    while cnt > 0:
        point1 = objPositionArray[firstTermCnt]
        point2 = objPositionArray[seoncTermCnt]
        distance = sqrt( pow(point1[0]-point2[0], 2) + pow(point1[1]-point2[1], 2) + pow(point1[2]-point2[2], 2) )        
        distancesArray.append (distance)
        firstTermCnt +=1
        seoncTermCnt +=1
        cnt -= 1
        if (cnt == 0):
    return distancesArray

""" averages the distance between objects in an array"""
def averageDistanceBetweenObjects (objArray):
    distanceArray = distanceBetweenObjectsArray (objArray)
    average = float(sum(distanceArray)) / len(distanceArray)
    return average 

""" Makes measure nodes between every object in the array """
def measureDistanceBetweenObjs (objArray):
    """need to add grouping and naming if I wanna use this"""
    cnt = 0
    locatorPositionArray = []
    cnt = (len(locArray) - 1)
    firstTermCnt = 0
    seoncTermCnt =1
    distanceObjArray = []
    coreNameArray = []
    if objExists ('measure_grp'):
        tmp = (empty=True, name='measure_grp')
        cmds.xform (tmp, os=True, piv= (0,0,0))
    for obj in objArray:                    
        """get its positional data"""
        tempPos = cmds.xform (obj,q=True, ws=True, rp=True)
        locatorPositionArray.append (tempPos)
        tmp = obj.split('_')
        coreNameArray.append (tmp[0])      
    while cnt > 0:
        distanceObj = cmds.distanceDimension( sp=locatorPositionArray[firstTermCnt], ep=locatorPositionArray[seoncTermCnt] )
        tmp = cmds.listRelatives ( [distanceObj], p=True)
        tmp = cmds.rename (tmp, (coreNameArray[firstTermCnt]+'_to_'+coreNameArray[seoncTermCnt]+'_distMeas') )
        distanceObjArray.append (distanceObj)
        firstTermCnt +=1
        seoncTermCnt +=1
        cnt -= 1
        cmds.parent (tmp,'measure_grp')

        if (cnt == 0):

Tuesday, January 11, 2011

Thinkin bout spines...

Python training is coming along well. At least Bokser hasn't gotten the switch out yet. Started into classes yesterday and they're pretty amazing. Progress is humming along on the "skeleton" of bbThingamarig. Bokser must have  had a late night and I have no new python assignments for the morning so in the meantime I thought some r&d would be fitting.

So spines are tricky things. For starters, I'm not thrilled with Morphy's current spine as I've said before and it's one of my major issues with the rig as a whole. That's something I plan on rectifying. And how!

In keeping with Master Schleifer's instruction, the first thing to do is to think. Why don't I like morphy's spine, how it might be better, and look at some other spines out there.

  • Pivots - for starters my pivots are off. I had a version at the end for the testers that was much better but it was gonna add a good bit of work to roll in and I'd rather just do it from scratch.
  • Reverse spine - I've been playing with a prototype spine from my good friend Scott Englert that uses it and it's an intriguing concept
  • Extra channels - another buddy, Tony Bonilla asked for an extra rotation transform on the cog to deal with spins so that's something I wanna do as well.
  • FK/IK blend or more of a mode system - Some rigs go for a strictly fk/ik spine (TSM comes to mind) with a switch while others go for a more hybrid approach (which Morphy's current rig is). At this point I'm leaning towards one or the other with snapping between the two but I'm definitely open to suggestion
  • Ribbon spine - Seen this bandied about some so I'm lookin into this as well courtesy of Aaron Holly's "Rigging for Feature Animation"
  • Any further suggestions for things to look into?
Also, made some homemade mushroom soup this weekend that was the base of some tasty strogganoff which I'm fixin to have for lunch. Just thought the internets would like to know that.

Thursday, January 6, 2011

Python Baby!

Digging in to Python on the tutelage of my good friend and Python Master Bokser. I have to say I have a lot of fun doing scripting and td stuff - it's so immediate in it's objectivity. It works or it doesn't. Me likee.

We're getting underway with what I am temporarily calling 'bbThingamarig'. At this point we're working on low level function building blocks.

Here's a snippit:
def setRotationOrderOnJoint (jnt, ro):
    #Checks for valid rotation order
    validRO = 'True'
    rotationOrderOptions = ['xyz','yzx','zxy','xzy','yxz','zyx']
    if not ro in rotationOrderOptions:
        print (ro + ' is not a valid rotation order. Skipping')
        validRO = 'False'
        cmds.joint (jnt, e=True, rotationOrder= ro)
    return validRO
I hope to share some fun news about Morphy in the next few days that should prove to provide even more goodies for the community. Good stuff.

What else is going proofing exterior pipes, training Atticus the super dog on a wireless fence and becoming more convinced that there is a national conspiracy that all barbers have to scalp me every time I grace a barber shop. Good times.

Hope everyone made some good resolutions that last longer than the month:) 

All the stuff on this site is 2000 - by Josh Burton...unless otherwise noted. All rights reserved.