Dynamic control rig generation for rigid skeletal meshes
As we continue to push the boundaries of what's possible in virtual worlds, I've always believed that our tools should evolve alongside our ambitions. With that vision in mind, I started developing an innovative Dynamic Control Rig for Unreal Engine.
This isn't just any rig, it's tailored to automatically generate controls and forward-solve for some of the most complex rigid body skeletal meshes out there, think mechs and high-end machinery. Rather than merely talking about it, I've taken the liberty of crafting an animation piece to demonstrate its capabilities first-hand. I consider this very powerful tooling because the rig is not constrained to a specific skeleton, however we do need some way to know about our target bone names.
In the demonstration at hand, our subject is a backpack flight unit tailored for a mech reminiscent of the "gundam" style. While we're zooming in on a basic instance here, it provides a foundation. From this foundation, you can envision scenarios where control rigs are shared across various skeletons with unique bone configurations, and even envision expansions beyond this scope.
So how does this work? The process of generating this control rig is divided into two stages. Initially, in the construct event, we establish controls at designated bone locations and begin accumulating metadata. Following that, the forward solving takes over, managing bone constraints and setting their limits.
Construct – Creating controls
Let's have a look at an example of how this works.
On display is our main suite of functions utilized for control construction. This includes forming a control stack, designating item metadata, and lastly, affixing a tag. We opted against relying solely on metadata because it tends to lag during forward solving, potentially leading to generation complications. Instead, a more reliable approach we employ is the application of tag data directly to the bones. (this might have been fixed)
Forward Solve – Applying transform controls
Let's have a look at an example function in the forward solve.
In this section, we're transferring the control transform data directly to our bone offset. Given our knowledge of the control metadata and bone tag data, extracting data for our control point becomes a straightforward task. Thanks to the behaviour of this control being executed in local space, combined with a well-structured bone hierarchy, concerns related to hierarchy transform stack complications are minimized.
In this segment, we're showcasing an animation snippet crafted with the dynamically generated control rig. By leveraging Sequencer, it's possible to maintain a track of preset control transform alterations. This not only facilitates sharing generated animations across diverse skeletons but also provides a foundational animation track. The result? A streamlined and expedited workflow.