QtQuick/QML in Maya
In this post, I will discuss how to use QtQuick/QML for tools inside of Maya and whether it should be used in production. Spoiler alert: it shouldn't. QtQuick is the module of Qt used to write QML applications. Using the QtQuick module allows designers and developers to create modern, fluid, and animated user interfaces such as this: or this useful example: or something more professional and useful such as Telegram....
Quaternion Rotation Output from RBF Solvers
In my previous post, I described how driving an RBF solver with quaternion values for rotational inputs is more reliable than driving with euler inputs. In this post, I will describe a method to output rotational values from an RBF solver. As described in my last post, euler rotations suffer from gimbal lock and multiple solutions to the same rotation. If we were to solve directly to these euler angles, we would see a lot of undesirable flipping depending on the sample inputs....
Quaternion Rotation Input to RBF Solvers
In my previous post, I described how to create an RBF solver using regularized linear regression. While the solver works well for most independent input values, it does not work so well if we want to drive it with euler rotations. Euler rotations are susceptible to gimbal lock and can have multiple solutions for the same rotation. These two joints look like they have the same rotation. But looking at their animation curves tells a different story:...
Regularized Linear Regression with Radial Basis Functions
RBF solvers are systems used to interpolate from values in one space to another set of values in another space. Basically a set driven key with arbitrary inputs and arbitrary outputs. This has many applications such as driving corrective shapes, retargeting meshes, or training systems in machine learning to predict values based on a set of known samples. There are several demo implementations and explanations of RBF solvers scattered around the internet:...
Swing Twist Decomposition to Offset Parent Matrix
Decomposing a rotation into separate swing and twist components has many useful applications. Maya's pose interpolator toolset allows shapes to be driven with isolated twist and/or swing components of rotations. This allows a corrective shape in the pectorals driven by the raising of the arm to be independent from the twist motion of the arm. Also, the twist component can be used to drive twist joints more reliably than the euler twist axis by itself, as demonstrated in the video below....
Trig Functions in Maya without Third-Party Plug-ins
By default Maya does not ship with any nodes to calculate trig functions. If you want to use a plug-in, you can use the great plug-in Maya Math Nodes written by Serguei Kalentchouk. If you want or have to use default Maya, there is still hope. I recently added trig function support to dge, my library that converts string math equations to Maya node networks. Using math and trig knowledge, we can recreate these functions with the nodes that come with Maya....
Space Switch Using Offset Parent Matrix
Maya 2020 introduced the offsetParentMatrix attributes to transform nodes. This attribute allows transforms to be driven directly with a matrix and can cut down the number of nodes and connections in your set ups. In this post I'll show how to set up space switching using the offsetParentMatrix attribute instead of constraints and extra transform nodes. A parent-child relationship is a simple matrix multiplication and can be replicated with a multMatrix node:...
Website Housecleaning
I have migrated my site off of Wordpress which I've used for the past 12 years and switched to Hugo, a static site generator. My Wordpress site was just getting too messy and perpetually needed updates to plug-ins and the whole backend. I wanted something a bit cleaner and lighter weight. I did some house cleaning on the content. I got rid of my old DirectX 9 and Managed DirectX tutorials....
A New (Virtual) Reality
It has been a long time since my last update. In the last year, I have become a father so I've been a bit busy. But with the closure of Visceral Games I had some time to think about what I wanted to do next. I felt like I already received all the satisfaction I would get out of the VFX industry. Not to mention just about the entire VFX industry has moved out of the country to chase tax incentives....
Python Scripting for Maya Artists 2.0
I've updated my semi-popular pages on Python Scripting for Maya Artists. The material was originally written in 2009 and the pdf has been downloaded over 18,000 time so it was all due for an update. Updates include: Various cleanup on examples and explanations. New material on string formatting. New material on directory traversal. New material on docstring formats. New section on code conventions and PEP8. New section on writing clean code....
Unit Testing in Maya (Part 2)
Edited: 6/18/2016: Updated RollbackImporter to support relative imports and “from package import module” syntax. In my last post, I went over writing scripts that can be used to write unit tests for Maya tools and then run those tests from the commandline outside of Maya. In this post, I'll go over running those tests interactively in Maya. Being able to run tests interactively in Maya will greatly speed up debug times when tracking down issues because you'll be able to see what is going on in your tests....
Unit Testing in Maya
Unit testing is a valuable tool that a lot of studios fail to implement. Unit testing can save a great amount of time and energy (and therefore money) by allowing developers, tool writers, and even content creators to catch broken deliverables before passing them downstream in the pipeline. The lack of unit testing with TD's is most likely due to one of the following: The person doesn't know what unit testing is....
New Job at Electronic Arts
I have officially joined the game industry! After 8 years in the film and feature animation industry, I decided to switch over and try the game industry. I accepted a Craft Director position at Visceral Games of Electronic Arts where I will be helping with character and cinematics technology. Lots of exciting challenges await!...
Creating a GPU-Driven Wrap Deformer Released
I have finally released my GPU-Driven Wrap Deformer video series! It is 55 videos totaling over 12 hours of content. The code for the wrap deformer is free so if you can't or don't want to purchase the series, you can get the code on my github. To checkout and/or purchase the series click here....
Coming Soon: Creating a GPU-Driven Wrap Deformer in Maya 2016
My next video series is in progress. You can check out the introduction video here and download the open source code on my GitHub....
Compiling Maya Plug-ins with CMake
New year, new site design! I've posted some free videos talking about how to compile Maya plug-ins on all platforms using CMake. Check them out here: ...
CGCircuit Request a Lesson
I have some lessons in mind but I am curious as to what sort of lessons people are interested in. Possible topics could be: Writing a Wrap Deformer Writing Mesh Collision Deformer Writing a Production Pipeline with Django Facial Rigging for VFX Advanced Maya API PySide for VFX and Animation Comment on this post and suggest a lesson!...
Writing a Production-Ready Skin Exporter with the Python API
I released a new tutorial series over at CGCircuit called Writing a Production-Ready Skin Exporter with the Python API. In the videos I go over how to create a more robust skin weight exporter that also handles joint renaming. Head on over and check it out....
Faceshift and Sven
Faceshift, the markerless facial capture company, demonstrated their latest tech at Siggraph using the Sven character from Autodesk's Hyperspace Madness project. We helped out with the rigging. I wrote the facial system and our awesome modelers created the facial shapes. You can check out Sven at both the 4:09 mark and the 6:30 mark. The quality achieved with Faceshifts system is pretty impressive! Update: Found some more videos...
Updating Site Theme
I'm updating my site theme with Bootstrap goodies. I'm now mobile friendly! Please let me know if anything is amiss....