Creating your own anim proxy for rigs
Kiel Figgins - 3dFiggins.com




Animators want rigs to be as close to real time playback as possible, sometimes, the nature of the character makes this very challenging from the rigging side. If you're working with a rig that's slower than you'd like, you can create your own animation proxy rig to remove certain calculations that should be able to speed up your playback speed and your overall workflow. This comes at a cost of less fidelity of the character or presentation, but the method shown below is meant to combine with file referencing (in Maya) so that you can swap back to the full res rig when it's time to present or export for a game engine.

Now the follow may seem like a long process for a seemingly small gain, but spending 20 mins at the start of a project can save hours over the length for animation and playblasting, and may make the process of animating just a little less painful.

With that in mind, lets get started!




Overview


Rig available at 3dFiggins.com/Store
Mad Graham model by Nikita Zavalishin






Testing the rig to see how much a proxy will speed up playback
  • Open the rig file (animRig_MadGraham.ma)
  • Display > Heads Up Display > [x] Frame Rate
  • Select the CTRL_MadGraham_World control at his feet
  • Middle mouse click and drag the character back and forth and see what the fps is down in corner (mine's 11.3 fps)
  • Select all the meshes and delete them
  • Select the CTRL_MadGraham_World control at his feet
  • Middle mouse click and drag the character back and forth and see what the fps is down in corner (mine's 32 fps)




  • Creating the proxy file
  • Open the rig file (animRig_MadGraham.ma)
  • Select the CTRL_MadGraham_World control at his feet
  • Set the Joint Vis channel to 1
  • In your Viewport > Show > [x] Joints
  • In your Viewport > Shading > [x] XRay Joints
  • To adjust the size of the joints, Display > Animation > Joint Size

  • Img 0 - Joint Vis in the viewport

  • Select the meshes of the rig and put them on a display layer set to transparent
  • Create a simple proxy for the left and center, dont worry about naming or doing the right side, the tool will mirror and name the proxy
  • Create a low res poly object (cube/sphere/cylindar)
  • Position/rotate/scale the object, then push and pull the verts around to loosely match the shape

  • Img 1 & 2 - Shaping the proxies

    Tips
  • using reflection and soft selection can help speed up reshaping your proxies

  • Img 3 & 4 - Shaping tools

  • I like to duplicate the face of the character for camera framing/close ups/eyeline
  • You can proxy the eyes as well for eyeline
  • If the chunkiness of the proxies is distracting, spheres (or smoothed cubes) at joints can ease this
  • You can hook up accessories or just focus on the primary body


  • Once the center, left side and props have proxy meshes, you can use the following tool to mirror and connect them. Again, you can test to see which connection method is faster or more fitting for your project, either creating parent constraints or parenting the meshes directly to the joints. Since my rigs work better with the constraint method, we'll do that, but the option for parenting is in the UI of the tool

    Img 5 - Left and Centerline proxies created

    Download the kfProxyMeshes.mel tool here (Right Click > Save As). This is a small tool to help speed up the process of attaching the meshes to the rig



    Run kfProxyMeshes.mel in your Maya scene
  • Windows > General Editors > Script Editor
  • Script Editor > File > Source Script > locate the kfProxyMeshes.mel file
  • In a MEL tab, run the following command:

  • kfProxyMeshes();




    A small UI should open:


    Img 7 - kfProxyMeshes.mel UI



  • Select the proxy mesh, then a rig joint on the left side

  • Tip: Turning off the viewport manipulator can make selecting joints easier
  • Click 'Connect Mesh (Mirror)'


  • Img 8 - Connecting the mesh to the rig

  • A new group in the Outliner is created, Proxy_Attach_Meshes, and another group created and constrained inside it with a duplicate of the meshes
  • Repeat these steps for the left side
  • For the center line or meshes you don't want to mirror, you'd do the same steps, but click 'Connect Mesh (Center)'


  • Img 9 - All Meshes connected


    Now that you've hooked up the proxy meshes, you can see the results using the fps HUD by shaking the world control.
    On the world control, set the jointVis channel back to 0 to speed this up further
    With the above proxies connected, I get an improved FPS of 21, still not the full 24, but a nice step up from 11 that the rig started with!

    You can also have various types of proxies depending on how you plan to use it. If its more of a crowd scene it could be a few cubes, or if you're doing previz, maybe you also proxy the jaw and eyes so you can rough in the face work for a close up camera.

    To Connect the proxy meshes to the rig for scaling, select the world control, CTRL_MadGraham_World, then select the Proxy_Attach_Meshes group and create a scaleConstraint

    Lastly, to help with playback/RAM issues, you can delete the texture files from inside the rig, so that it's not loaded:
  • Windows > Render Editors > HyperShade > Textures Tab
  • Select all the textures and delete them

  • Img 10 - Deleting texture files

    When you're satisfied with the results, save the scene file, animRig_MadGraham_Proxy.ma



    Using the Proxy Rig in your animation workflow

    1. Reference in the character rig, animRig_MadGraham
  • File > Create Reference > Option Box
  • Reference Options > Edit > Reset Settings
  • Reference Options > Namespace Options > (X) Use selected namepsace as parent and add namespace string: char
  • Click Reference and locate the character rig file



  • Img 11 - Reference Settings


    2. Swap the rig for the proxy rig, animRig_MadGraham_Proxy
  • File > Reference Editor
  • Reference Editor > Select the charRN from the list > Right click > Reference > Replace Reference
  • Select animRig_MadGraham_Proxy from the file list
  • Click Reference


  • 3. Animate as desired, when you're ready to present or export for a game engine, repeat the steps above to swap back to the proper rig



    As another option, that works well if you're dealing with more of a single skinned character, you can check out mGear_AnimProxyFromSkin.py, or this extracted workflow:
    https://www.reddit.com/r/Maya/comments/eh3hzj/is_there_an_easy_way_to_make_a_proxy_rig/



    Other Opinions, Further References, Typos, and Grammar Issues please contact KielFiggins22@gmail.com