Animating with Control Rig in 4.26 | Inside Unreal

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
AMANDA: Hey, folks! Venture to new heights in style with February's free Marketplace content including customizable characters, a diverse set of environments, and animations befitting a boss. Download all of this month's free content from the Unreal Engine Marketplace before it's gone. The 4.26.1 hotfix is now available for download on the Epic Games launcher and GitHub--head to the forums to see all the latest fixes from our devs. Or if you've been causing chaos with the Unreal Engine 4.26-Chaos Preview build, then you've got an update as well! 4.26-Chaos Preview 2 is also available on the Epic Games launcher! This series of builds enables Chaos as the default physics system, so try it out and share your feedback with us in the forums. Following last year's report, Epic and Burning Glass have broadened the scope of their research into the demand for 3D graphics and real-time 3D skills around the globe--and it's booming! Dig into the report on our feed and find out why real-time skills are providing serious advantages if you're entering the workspace or looking to advance your career. Optimized for Xbox Series X, Lovecraftian-mystery Call of the Sea from new Spanish studio Out of the Blue has made a real splash. Pop over to our interview with one of their co-founders, Tatiana Delgado, to uncover the secrets of its intriguing world, gorgeous stylized visuals, and challenging puzzles. New to Twinmotion, the brand-new Twinmotion Importer enables you to export your projects from the versatile visualization application to Unreal Engine. Explore how the tool opens up development options for architecture firms--and why it's the latest milestone on the road to a fully open and flexible AEC pipeline. Then watch our latest webinar on YouTube to see the new workflow in action. While you're checking out our webinars on YouTube, learn how to easily optimize CAD assets for real-time rendering using Visual Dataprep--the webinar demonstrates how to avoid repetitive manual data prep processes by easily creating "recipes" that import data to predefined parameters automatically. In the most recent article in the XRLO, or eXtended Reality Lowdown, series REWIND shares how they're populating real-time worlds with thousands of animated characters using instanced static meshes to render animated characters. Check out their full series on Medium and keep an eye out for their frequent dev articles. You may remember our spotlight on Rider for Unreal Engine by JetBrains, an IDE for both Windows C development and Blueprints. With plans to release later this year, they're hosting a UX study--if you'd like to help them out, they're offering a product subscription or gift card for feedback from qualified responders. And with 350 submissions and over 2000 participants, the 2020 Epic MegaJam showcased the overwhelming talent and drive of the community. From wild west duels of wit and unending paperwork, to infinite pizzas and claymation worlds, jammers created a myriad of games with a range of genres, art styles, and whimsy. Visit the Epic MegaJam Itch.io page to play through and experience their completed creations. And now to celebrate this week's top karma earners. A shout-out to: ClockworkOcean, Detach789, Everynone, T_Sumisaki, chrudimer, GrimStarGames ugmoe, pseudocheesy, SteelWoolAnthony, and Thoeme. This week's spotlights are dedicated to our phenomenal 2020 Epic MegaJam winners. Wispy Bois took first place with their mysterious adventure Forfax's Castle. You'll make your way through a dark, cold rain towards the castle in search of answers and meaning. In second place, Eons Unfolding from Team Sartial is a well-built strategy survival game where you work to evolve from the tiniest of microorganisms to full-grown animals. And in third, The Rude, the Mad, & the Ugly by the Five Fancy Mustachios. Take on the role of a man returning to a small town in the old West with some scores to settle - after all, it's been a long time, but we're not done yet. Thanks for watching this week's News and Community Spotlight. VICTOR: Hi, everyone and welcome to Inside Unreal, a weekly show where we learn, explore, and celebrate everything Unreal. I'm your host, Victor Brodin, and with me today I have Helge Mathee, senior engine programmer. HELGE: Hello. VICTOR: Hello, hello. Jeremiah Grant, technical product manager. JEREMIAH: Hello, hello. VICTOR: And last but not least, Greg Richardson, product specialist. Welcome all to the show. Today we're going to talk a little bit about animating with Control Rig. And I'm not going to do much of the talking, so I will hand it over to Jeremiah. JEREMIAH: Hey, everybody. We're going to be talking about animating with Control Rig in Unreal 4.26. 4.26 has brought a lot of things with Control Rig and its integration with Sequencer. And we really want to dive into that and show you guys some of the features and capabilities. So quick agenda for today. We've kind of packed it full with a lot of things. First thing, we're just going to give a quick intro to what Control Rig is. And then we're going to talk about the new sample update that we released just a couple of weeks ago. And then we're going to dive into some little gameplay demos of the Rig Sharing, attaching Control Rigs to other rigs, a slope warping demo-- it's a runtime example-- a robot attacking gameplay example, and then we'll cap it off with this Meerkat Virtual Production demo that was just released recently, which we actually see here sitting over on the right. So first off, what the heck is Control Rig? Control Rig is a plugin for Unreal that allows you to create animation rigs, runtime rigs, procedural animation, and allow you to interact with it in a bunch of different ways. So you can build animation rigs. You can expose its controls for animation. You can use a variety of ways to create procedural animation and drive them at runtime or in Sequencer. And then you can write your own Python scripts to automate your workflows and really customize your process for your own specific production. By the way, Control Rig plugin by default is turned off. So everything going forward, we're going to assume that you want to turn on that Control Rig. Just go to your plugins. Search for Control Rig. And it'll be available to you-- you'll be able to create a Control Rig asset. And in there, you'll see a full graph that we'll dive into here in a little bit. And so let's dive into a quick example, the mannequin rig demo. We released one for 4.25 that had a basic rig. In fact, I think this is the rig we see here on this slide. And in 4.26, we've done quite a few changes to it. And let me demonstrate that. All right. So before I go into the rig itself, when you open up the project, you should see something like this. Here we have two mannequins in this scene. Here we can see a Control Rig on our guy on the left. And we have Sequencer open that can drag through and we have a pretty awesome animation here that is created by Ray Arnett, one of our animators here at Epic. One of the cool things in this sequence is how the previous one is just Manny waving at the screen. We have two characters now not only playing in Sequencer and animating, but also being animated in context of this environment. So we have the table moving and reacting, the statue, the chairs, and the mannequins actually sitting in those chairs and jumping in. If you were to go into something like Maya you'd have to bring those chairs into Maya, adjust your character, and then go back to Unreal. But here you're able to just do it all in one place. Also you could just see, if you open up this sequence, it's level sequence, you'll see there's chair tracks, which have some curves in them. The two mannequin tracks, feel free to jump in and take a look at them. And we can always look into our Curve Editor and adjust our curves there, as well. So you have a variety of ways of interacting with your animation. And let me talk a little bit about this project that's available. I do have some demo content in here for later. Those things are not included in the project. But the core things that are is everything that's under this Control Rig folder. There's going to be a Blueprint, which just has a tutorial. We've received some questions in the past. Hey, there's nothing in this tutorial. It doesn't do anything when I open it. There's no text. That's absolutely true, except for the fact that it does do something. There's just no tutorial text. Whenever you run this, it's going to automatically load this level sequence. And we make it so that whenever you open this project, it will autoload that level sequence for you, so you are already prepared to start playing around in Sequencer. So that's the purpose that it serves. It just gives us a way to load that asset whenever this project is opened. And then we have just our generic level assets that we see here, the chair and the props and our mannequin. In addition to the core anim set that we have included here, I want to talk about another thing. We have added in the female mannequin Control Rig, which is the same as the original mannequin Control Rig. And so we have a skeletal mesh for both of those, as well, as physical assets. They both use the same skeleton. And then we have our map, this map that we have loaded here by default, and then our level sequence. I'm going to jump into Control Rig here and dive into some of the changes, both in Control Rig itself and in the changes it made to this rig available to everybody. So we designed this rig kind of in a specific way to make it accessible and digestible for people new to Control Rig. I know it looks pretty complicated right here. But we structured it in a very specific order. First we just have the forward solve. Actually, before we even get to that, let me describe this editor for people who are new. This is our Control Rig editor. We have our viewport here at the top left. We have a rig hierarchy, execution stack, and a My Blueprint editor here in the lower left. And then we have our main rig graph. This rig graph is where we're going to construct everything we need to drive bones or controls, to generate procedural motion, interact with our environment. And we'll see a lot of ways that we can do that later on today. So a couple of changes in 4.26. We've renamed a couple of things because we've added a lot of functionality and these names kind of help us address that. So one of the things in 4.25, the core node that you'd start out with was called Update Event. We've changed it to Forward Solve. We changed it to Forward Solve because we've added another event called Backward Solve. Forward Solve is what allows you to drive your bones with controls. So when I move the control, the bone moves. When I move the control on an arm, it may move an entire IK effect here. And Backward Solve lets me do that kind of inversely. So we call it an inversion graph or a backwards solve graph. And that's going to let you-- it's kind of like a bake mocap to controls. So you can get the animation that's on your character and apply it back to the controls and then continue modifying your animation with your Control Rig. So this is great for bringing in mocap. But you want to clean it up using a Control Rig. You want to tweak the arms without having to deal with just FK. And we'll show some examples of that here in a few minutes. And here at the top, you can see we have our Forward Solve. And if I just click on the arrow next to it, we have a setup event, which is also note 4.26. We'll talk about that after this-- Forward Solve, which we're seeing right here, and Backward Solve, which we won't really see any change. One key change-- I'm going to zoom out, and I apologize for big graph here. But we see this is our Forward Solve and this is our Backward Solve graph. Both are represented as graphs. So you have complete control over how your rig is driven by motion or how your rig drives motion. And as I change this between Forward Solve and Backward Solve, you can see the highlighting of the lines showing you which graph is being run. When you're handling motion as an animator, you don't really need to worry about this so much. The Forward Solve is supposed to be being run, for the most parts, and you won't really be in this Control Rig editor. You'll be in Sequencer. Or you'll have a Control Rig node in your anim Blueprint that's going to be doing some sort of corrective motion. And the Backward Solve, I'll show you how that can be run here shortly in Sequencer. All right, so let's dive into some changes with this specific Control Rig with the mannequin updates. So in addition to adding some behaviors, renaming and updating these nodes, we've adjusted the hierarchy. This does mean that, by default, if you're creating animation on our experimental version of this Control Rig on 4.25, these control names have changed so that motion will come through. But I'll show you how to get around that here. These control names have changed to represent the bone names as more natural, root_control. The bone's name is root and if you want the control, it's going to be the name of the bone plus underscore control. It's very easy to map between these. We've also added in some finger controls. And in this case, we decided to put it in the hierarchy, just to show you guys a different way of building hierarchies and driving them with your rig. In this case, we have a hand space. And that's carrying all the fingers along with it. And we've also added in twist controls. In order to fully represent Backward Solve, we needed to have the entire rig represented. Additionally, if you look at this hierarchy, it's much cleaner than it was previously. And that's because we no longer have the need of having a space in which we need to control. We can represent this offset of the control in the world directly on the control as an offset transform. So this transform represents where it is in space. And the initial and current transforms represent its animated positions or starting positions. So in this case, this initial position is 0, 0, 0 relative to this offset transform. This is more of a rig setup thing, not something you really need to concern yourself with if you're just trying to interact and animate with this in Sequencer. Another thing to note, if you were to open up the 4.25 Control Rig version of this, which will be fully compatible and you'll be able to open it. But you will see deprecated flag under a majority of these nodes. That's because we've done kind of a low level restructuring of how we're handling data. And as a quick example, let's take a look at this Get Transform node. So instead of getting the control transform or having a bone to get the transform of a control or a node to get the transform of a bone, we have one node now that takes a type of item, an item I could quickly choose which type I want to get to transform for. And then I can choose the name. And additionally, we have a checkbox to choose whether that's the initial transform or it's-- or its current transform. So that took about nine different nodes and consolidated it down into a single node that's multipurpose and much more flexible. And our set transforms are the same way. Here it's taking an item type. And I'm able to feed in a transform. And again, I can choose whether that's initial or not. I could propagate the children. So I have all the same options that I had before, just in one node instead of a bunch of nodes. And that really-- one of the things that, as a control room team we've focused on is kind of reducing the mental load as you're going through. You don't have to remember as many different nodes types and as many different ways of doing things. You're able to just duplicate things and work as quickly as possible. All right. So going through this, we have our root pelvis, which just makes it so when I move this control, my character moves. By the way, there, by pressing Control G, that resets my control to its initial position. Control Shift G will reset all controls in your Control Rig to your position. Super handy hot key there. So these top three, all I'm doing is I'm getting the transform of my control and setting my bone to that transform, very much like a constraint. And I'm doing that for this whole-- from root all the way up to head. And then we go into some arm logic. Our arm logic, we add a little bit of complexity, because now, in addition to setting or clavicles, we're also introducing basic IK. A basic IK previously only took in bones, but we refactored it to use items. So now you can actually do IK across controls, if you wanted to. In this case, we're still just using bones. We're using our upper, lower, and hand bones and feeding in a control our left hand, in this case. And just a quick tip, I can right click on this control and I can select rig elements. And that will quickly select my control here in the viewport. You're trying to get to that without scrolling through your hierarchy. And then we have some twist bones here. Instead of sending a full transform, we're going to go ahead and just set rotation. So we're just representing different ways you can drive controls. You don't always have to drive with a transform. We have a lot of different ways of driving. We do the same thing for the right arm. Left leg, we add, again, a little bit more complexity. And like I mentioned before, I wanted to give people a way to read through this graph and slowly build their knowledge and complexity as they go through it. So in this case, we've added a little bit of a foot rule situation here. So I can grab the toe or grab the ball of the foot and interact with those here. So here we got a little thing-- oh, let me turn off snapping. Turn you guys off. All right. And again, basic IK, the same thing that we had on the arm. Then here's my foot rule set up where I'm taking my toe pivots and rotating it relative to the ball control. And then our effect list, thigh twists. Thigh twists and calf twists. And once more, in this case, we did slightly different between the left leg and the right leg because we wanted to introduce a new node. There's a node called projected new parents. And a great way to think about this is a parent constraint with the maintain offset. You can control the transfer of one object relative to another object, all with one node instead of building the actual make relative and multiply that we're doing up here. So this is this logic consolidated into a single node. And we've built it this way just so you can follow the logic of how we're slowly consolidating nodes when we're doing repeatable logic. All right. Next I want to talk about something that the items refactor that we did has enabled. And this we're calling collections. And part of collections is the ability to loop through. So we can create a collection of things. In this case, I have a collection of all of the fingers on the hand. I just get all the children of my left hand recursively. So I get all the fingers and I can loop through them and perform some sort of action. Additionally, I'd be able to loop through and read the names of each one and get the left and right. So I don't have to build a big graph. I can do it all at once using unions, concats, and other string operators they may be used to in other places. We have some pretty cool options here in this foreach loop. Not only are we uploading the item, but we can upload the type and the name of the object, which is kind of our core item struct. You can also get the array index, the number of items in your collection, or the ratio. And ratio gives you a 0 to 1 position of where you are in this loop. So you can do some pretty cool things with mapping the position of where you are in your array to some sort of procedural motion or interpolation. So in this case, I am getting all of the bones in the left hands. And I'm going to go ahead and get a collection of all of them on the right hand, too, just using this replace items. And I'm going to combine those two collections, loop through all of them, and get their associated control just using this concat. And very quickly, I'm able to get the control transform for each finger and set the rotation for each finger bone. In addition, we added a new node here called Set Control Visibility so you can turn on and off the controls based off of a Boolean control. In fact, let me go ahead and demonstrate that real quick. I'm just going to right click and Select Rig Elements. And here we have a control that, instead of being a type of transform is a type Bool. And that allows me to very quickly create what people may associate with an attribute or a parameter on a control. In this case, it's just a Boolean. And it may be hard to see. Let me zoom in on the hand a little bit better. There we go. And so as I toggle this, all this looping is setting the visibility for all of those controls with a very small graph. HELGE: Hey, Jeremiah, just one thing to note here, which I think can be interesting. Now that these nodes don't operate only on one piece of data, but they're actually looping, so there's multiple iterations and lots of things are affected, people can also see that by watching the value. So if you were to right click on the A pin on the concat node, for example-- not this one, sorry. On the concat, like the one above, just to watch this value, so this now shows you-- usually you only see one value here, which is the value that's flowing through. And here you can now see all the values that this is affecting. So as expected, you're going to see all the pieces for the fingers that you're changing. JEREMIAH: Yeah, that's a great point. Oops. Good. Yeah, so it's a great way to quickly debug your array. A common thing that we've seen when people play with this, in fact, is they often, after this foreach, you go to the end of your graph and you do some sort of behavior-- like, let's say, create another foreach. And you do some sort of behavior here. And they're wondering why their graph is taking so long to run. And it's because it's looping through for every element of this and then looping through every element instead of doing the-- after the loop's completed is kind of the logic they're going for. And the way that we've been able to discover that, quite often, is we just right click and watch all the items that you get this massive list of 1,000 items. Like, oh, you're looking and then looping and then looping instead of going through the completed. This is a great call out. We do the exact same thing again with the twist visibility. And in this case, instead of doing a-- generating a collection from the children or something, we're doing a preset of items. In this case, you just go to item, items, and you can start adding elements to it and populating it yourself. In this case [INAUDIBLE]. GREG: Something I want to add in here in terms of the items, if you have any sort of items that you have selected in the rig hierarchy, you can just track over to your rig graph and it will automatically create your items there for you, as well. JEREMIAH: Yeah, exactly. And that's what it's going to show real quick. So in this case, I can grab these. And I can-- sorry, drag up here and say, create collection. There we go. So now I have a collection of just those selected controls. And additionally, another way that we can do this is I can right click and go to Collections and Item Name Search. And so in this case, I could just say twist. And to make sure that I'm only getting controls, I can choose type to search control. And I should have the exact same behavior that this would do, but dynamically. So just a couple of different ways to create collections. You can do some really cool things with this. I highly recommend you guys take a look at it and see what you can do. HELGE: I mean, the main difference being that if you use the name list, just reiterating what you just said, if you say you have a creature with six fingers, then this particular approach wouldn't scale. But if you use a search, which is another collection, then you-- depending on how you set it up. So there's downsides to this, as well, of course. So if you wanted only three fingers, then you know, but you can combine these search operations with saying something like, give me all the fingers on the left side except for the first three or something like that, right, so you have a bunch of different ways of doing this. The other thing, if you don't mind me nerding out for a second, is the foreach. The way that all the loops work in Control Rig is actually visible to the user. So if you wanted to debug something like this a bit more, you can actually look at the execution stack. So if you were to open up the execution stack and then select the for each loop in the graph-- not there, sorry. In the graph. So just click on the node. Yeah. And then you just scroll in the execution stack to see which one it is. So there-- it's a bit hard to read here-- but you can basically see what's going on there is a collection loop. And then there's actually jump instructions that are telling you now we're jumping forward or backwards. And then there is a block. It says this is the stuff that's happening within the loop, and so on. So you can actually see what the VM is doing when it's running. So you can get down to all the instructions that the VM is actually operating on. So we're sort of giving away some of the functionality in how the VM is implemented here by showing you the actual sort of lowest level of operations that we're applying when we want to use loops and branches and stuff like that. JEREMIAH: And that's something I didn't call out when I went over this editor release, these three panels. So rig hierarchy, we've been working in that. We've been selecting controls, bones, and spaces through this rig hierarchy. The execution stack, this is-- and this is kind of a big difference in the way that Control Rig is developed versus other systems. Everything's executed in a stack linearly so we can do some sort of behavior that would generally be cyclical in something like Maya. But here you can move a control and then set position for control and then do some sort of procedural motion, then run an IKM that controlled all on a tick. And as you click through here-- well, as we saw here-- as I click through, you can see that it's actually selecting the nodes. So you can click through and see, oh wait, why is this value coming at the wrong place? And click through this and help debug some trickier issues that you may run across. HELGE: Can you do me a favor and just zoom back and just show the first couple of things that you're doing on the root, like just the nodes on the top? I know I'm sort of destroying your flow going through the rig panel. JEREMIAH: Oh, no. HELGE: If you go to the top and just sort of click on this and just press down on the keyboard-- that's what I usually do when I debug. So you just press down and you're going to see, what it's showing you is basically, what are the things that are happening in which order? And that can be quite interesting sometimes, especially if you have branches where you might not be expecting a jump or stuff like that. You'll be able to see what's happening here. JEREMIAH: Right. Yeah. HELGE: The other thing that the execution stack is doing is actually showing you errors, as well. So if you have an error like, I don't know, you have a node that as an invalid item set in it, right, you'll see the error in this list. And then you can right click the execution, like the instruction, and say, show me the node where this error is coming from. This can be quite interesting for large graphs where you might not be able to find the error because, I don't know, because you didn't build the graph yourself. Like, as a good example, you get a large rig from someone and there's an error in it. And the execution stack can be very useful to find things. JEREMIAH: Yeah. All right, so now that I've kind of gone through the big changes that we have in this Forward Solve, I'm going to go through the Backward Solve pretty quickly. It's a smaller graph, as you can see, because we're not going to be doing operations like IK, necessarily, here. But you can. You don't necessarily have to. VICTOR: Jeremiah, could you quickly describe the difference between Forward and Backward Solve? JEREMIAH: Yeah, absolutely. In fact, let me demonstrate it. In this case, I have my mannequin here. And as I move these controls around, my character responds. So this is running the Forward Solve. This is saying, whenever I move this control, my bones go along for the ride. My IK solves, et cetera. But if I go to Backward Solve and I move this control around-- in fact, I can't even move this control. And that's because this very first thing is saying, get the transform of my bone and set my control to the transform of my bone. So it's the exact opposite. And let me show you what that allows me to do. I'm going to go to my animation of my previous scene settings here and go to my preview controller. And use a specific animation-- use my favorite, stand to prone. Now, what we just saw is me playing an anim sequence, a skeletal anim sequence, on my Control Rig and all of my controls solving to where they need to be in order to represent that pose. And so before I dive into this graph, let me just show this one more time. Let me go ahead and just clear this out as default. Let me show this one more time. And I'm going to show this in sequence. That's really where the power is. I'm going to grab my mannequin here. Just going to drag it in. It's going to create a quick level sequence. And we'll drag my mannequin in here and add an animal. We also added some things there. So I'll show that later. All right, so now I have my stand to prone animation. I went through that pretty quick. But all I did is I dragged my mannequin into my level, created a level sequence, and added my mannequin-- skull to mesh to my level sequence. And then I added my stand to prone anim sequence to that character in Sequencer. In fact, just to show you one more time-- this is the animation that I'm playing. This comes with our-- I think with our default animation on our character. So-- HELGE: Just to clarify, Jeremiah-- I know you've said this already, but just for the people who are not familiar with the system-- there's no rig here, right? There's no rig. We just have bones and FK animation right now. JEREMIAH: Yeah, exactly. And so this is just FK animation on the skeleton. In fact, if I expand this animation, all we have is a weight. So you can't really do much with that. And then I can right click on my actor and I can say bake to Control Rig. And this is going to give me a bunch of options. I'm going to choose the Control Rig we were just looking at, so mannequin Control Rig. It gives me a quick option. Do I want to reduce keys or not? In this case, I'll just leave it one to one. So I'm going to make this-- bam, it's done. So now I have my animation on my controls. And I can now interact with my animation. And so we get directly here with the Control Rig. I can even go into-- let me grab my pelvis here, full control. There we go. And go into my Graph Editor. And let's see what I'm looking at here. Oh, that's not what I wanted. I wanted body control. There we go. All right, so I can now grab my curves, and they feel like this. There we go. That is exactly what I wanted. So now he lays in a puddle. Sure. So this means that I can do things like bring in motion capture directly into the engine, bake that directly onto Control Rig, and now manipulate with higher level functions like IK or any number of other controls that we have available in Control Rig. This is a really powerful thing, and probably one of the things I'm most excited about. It gives a lot of power to virtual production artist, motion capture animators who may want to do a quick fix, for example, on their animation without having to go back to Maya or Blender. And you can just make that fix here in the engine. HELGE: So just to reiterate where this came from, which is the question from Victor, is difference being forward and backward. So to me, the way I always describe it is, forward is solving from control animation onto FK, so from controls that you animated to the FK pose. So if you play it back in Sequencer, that's what's running. When you play it back in Sequencer and you have control animation, we solve from those controls onto the pose. And then that's what you're seeing in the Skeletal Mesh. Backwards is the opposite. It's when you already have bone animation in the skeleton but you don't know where the controls are supposed to be. You can run it the other way. And basically, when Jeremiah was saying bake to Control Rig, really what's happening is, we're playing back the whole FK animation, right? We're doing the same thing. We're just playing it very quickly without you seeing it, running the backward solve for every frame, and then sort of recording where the controls were. And that's what you're going to get as curves. Does that make sense? JEREMIAH: Yeah. And that's exactly right. We did add the ability for you to reduce keys. I saw the dialogue popped up. And that's a post-process. That's not sampling when to capture this backwards solve per frame. So this backwards solve graph is pretty straightforward. This is something that a rigger would set up when they created Control Rig for an animator. They create a forward solve and backward solve in order to have this behavior. We provide one for you here with this mannequin Control Rig. And this will be available for you to take and apply to any animation you may have on your mannequin in your own projects. So looking at this, the graph is very consistent. We are using this new projected parent here on the root control, basically saying, get the position of my root, wherever it is, and move my root control to that location. Same thing for the body control. In this case, we have the pelvis, and we want to move both the body and the pelvis control at the same time. And at the end of day. We're just stepping through each one of these and doing this behavior. We absolutely could have done this as a for loop and gone through all of the controls and just connected them with the bones. But this way, you're able to open up and just see exactly how it's going, trying to be as transparent and as easy for you to read as possible. HELGE: So I mean, you can build all this stuff without looping, right? So I just want to reiterate that looping can be maybe a bit intimidating at first because it's sort of the next level up in terms of building a graph and abstraction and so on. So it's perfectly fine for you to just build it with single nodes. And then as you encounter repetitive patterns, as you notice, oh, I'm doing this five times, you can start thinking about introducing looping. And as this is a learning example, we just haven't collapsed everything into one single big loop. That wouldn't have made sense, right? But we could. You could build it with looping. And it would be even faster, I think. GREG: Yeah. Absolutely. And plus if you do it in single elements, it's also much easier to debug as you're exploring and kind of playing with the preview controller and playing whatever preview animation that you want. JEREMIAH: Exactly. And here, we actually did use looping for the fingers, just so you can get some parity between what we're doing with the forward graph and the backward-- or forward solve, backwards. One last thing I want to mention before I move on is, there is also this backwards and forwards operation here. And this is a little unique. And this is great for debugging your backward solve and your forward solve to see if they're working the way you expect them to. So what this is going to do when I go into this is it's going to first run the backward solve graph and then it's going to run the forward solve graph-- I guess kind of implied by the name. We won't see a difference here, hopefully. So I'm going to play that animation again. So this all looks as I would expect. But if, for instance, I had connected up something incorrectly, like let's see if I could break something. All right, maybe not that guy. I was expecting that to go somewhere weird. I see it pop every time you do that. But the idea is if, for instance, I was solving my pull vectors incorrectly, then it would solve the backward solve to my animation sequence and then run the forward solve based off where those control locations are. If I had created my backward solve incorrectly, I wouldn't be able to see the same animation play, because the Forward Solve would be stomping over the backward solve-- the backward solve, yeah. Helge, you want to expand-- clarify? HELGE: Yeah, you make the backward stuff look like not needed. If it never breaks, it just-- [INTERPOSING VOICES] HELGE: So a good example is-- a great example is, if you're just doing incorrect computation for where, for example, an effector should be for an arm. Like, if you're computing the hand effector in the wrong position, then what will happen is, after we run forward again, the hand will be in the wrong position. That's what will happen. And this mode allows you to debug it. So basically, we're first solving our controls by sort of the ground truth, which is the FK animation. That's what we expect to get out. And then we're running forward again. And of course, those poses should match. That's the goal here. So if it doesn't, then you've just identified it there now. So that means as you're building the backwards self, as you're building the graph, you can use this mode to figure out, have I made a mistake? Is this pose still the right one? And you can toggle back and forth between-- so can you go just back to-- just backward solve in the event that you're running? Just a quick tip, as well. So if you just click the big button instead of doing the dropdown, it's a toggle. So you can go back and forth. And this is a typical-- like, it basically goes back to the current and the last event that you're on. And so as you're building the graph, you can try-- is the pose correct, right? Well, we've seen a lot-- so when you have controls like pull vectors and they're incorrectly computed, they'll slowly wander off into space. It's a good bug that you'll see when you're doing a version incorrectly. So this helps you find those issues with the rig. JEREMIAH: So in this case here, I have the left hand control getting the position of the head and feeding that transform in. Now, when I'm running backwards solve, the skeleton-- the animation looks correct. But if I look at that left wrist, I see that there's no control there. It's going to be very apparent to me when I go to the backwards and forwards solve because now the forward solve is actually running the IK after that control has been moved to the incorrect place. So is this like being like, oh man, yeah, that's not the right bone. HELGE: Yeah, so if it were to use this rig with this bug for baking into Sequencer, that's what you're going to get. You get the hand on the head. And then this whole baking result is invalid and you'll have to start over. So this is a way of debugging it before you start using the rig for backward solving in Sequencer. JEREMIAH: Yep. Exactly. Thanks for the save. I was struggling with that description. All right, so I think that covers a lot of the changes that we've made here in this Control Rig. I see that I broke my leg as I was doing random changes. Let's see if there's anything else. I talked about these guys. Oh, one last thing. My Blueprints-- this may not be open for you by default, which you can go to just Window, My Blueprint. And in 4.26, we've changed the way the variables work. Before, we had parameters and variables. And they were about whether data is coming into Control Rig or whether data is being used within Control Rig. And it was a little confusing. So we simplified that just by going to a paradigm that everyone's used to in Unreal, which is the My Blueprints. You see this in other actor Blueprints or animation Blueprints. In order to create a variable, you just hit that plus button and name it My Variable. In this case, now I have a Boolean. I can change my type here. And I can drag these directly into my graph to get or to set. I can also go into my-- I can also go into my details panel. And just by default values, put them in categories. Is there anything else that you would expect for variables? Initially you should be able to right click and search and find it in your context in your graph. HELGE: There's one other really big thing that these guys give you, which is that any other Blueprint can access them. So before we sort of had our own magic variable functionality and it wasn't great in that it wasn't working with everything else in the system. Now, if you make them nonpublic, so if you just don't have this eye icon on, then you can use them for internal simulation. You can store stuff as you've solved the rig and remember things that you might be-- maybe only remember certain frames, anything like that, like internal state. If you make them public, however, you can have settings on the rig that other procedural logic in the game can drive, so any real-- like, any other system. They're also available as variables in the Python reflection, and so on. So it's pretty powerful. Basically this opens up wiring Control Rig to other systems. JEREMIAH: Yeah. And I think we're going to show some of that in some of the demos later. VICTOR: Jeremiah, before you move on, do you mind showing the mirroring function that's in the hierarchy and also the nodes? JEREMIAH: Sure. All right, so in order to-- so we've added some sort of mirroring in a few ways. Greg, I'm just going to let you demo that, because you've been doing a lot of-- [INTERPOSING VOICES] JEREMIAH: And I will stumble over it right now. But you can right click on nodes. And we have this mirage. And this will allow you to mirror in space your controls. And also you can mirror graphs. In fact, I think, if I can right click this-- I can search or replace mirror and determined what direction I want to mirror and do some search and replace, so left to right side. I don't know. Actually, I need to say more. It's a very simple and very powerful tool for building complex graphs. All right. Let me go back to my handy dandy slides. Unless if we should have any questions around that mannequin, we can answer more questions later. VICTOR: We have a lot of questions. But I think going through all of the content first and then we'll tackle some of them at the end. JEREMIAH: That sounds good to me. VICTOR: Yep. OK. JEREMIAH: All right. I'm going to pass it over to Greg and he's going to talk about rig sharing with Control Rig. And he's going to dive into the Setup Graph and the new Control Rig component available in 4.26. VICTOR: One thing just before you do that, Greg. There was a little bit of confusion between the naming convention of the word rig and how you are using it. I believe in most instances you're using the word rig referring to Control Rig, which is a different rig versus the rig that most typical animators might be used to in Maya and other DCC tools. JEREMIAH: I guess we could refer to them differently. But at the end of the day, there is Control Rig, which is the asset itself. I come from a rigging background. And I refer to both this and this as the rig. This is just the result. This is the animation rig that an animator would interact with in Maya. Here we're just doing it in the engine. And this is the editor in which we construct it. So Control Rig is just the editor of the asset itself. I use them fairly interchangeably, because at the end of the day, I'm driving an animation pose or an anim sequence with these. Does that answer the question, or is that still confusing? VICTOR: I guess the terminology is usually to refer to the skeleton as the rig. JEREMIAH: I see. OK. Yeah, I think we refer to that generally as the Skeleton. So in Unreal, there's a lot of different naming paradigms. We have a Skeleton, Skeletal Mesh, and now Control Rig. And to confuse things even more, we have a Rig Hierarchy. And we specifically call that Hierarchy, because although this looks like a Skeleton, we actually import these bones from Skeleton asset type, which means that these aren't referenced. And I can make modifications to it, like parenting controls under it, or parenting other things under it. Now, this does mean that if I, for instance, update my character and add new bones to my skeleton, I need to refresh from my Skeletal Mesh. I know that gets a little confusing with all those different terms. And rig, at the end of the day, becomes a kind of an overloaded term. But in this case, I'm talking about the animation rig that an animator would interact with to create anim sequences. HELGE: There is a-- just to add something there. And I think I just have a slightly different view on this. I feel like if you look at it from Maya or from Blender or these environments, basically a rig for a character usually is both what the rigger would build in terms of building, I guess, a scene content with all the curves and the things you can click on and all the bones and all the things and the meshes and everything in one big graph. And they'll sort of mix both the animation controls that you use and the logic that is run to compute the pose. They're usually one thing. So it's a bit harder to differentiate. Here, we're actually separating these two things completely. So this a sort of a new paradigm. So some users may be coming from something like Maya or Blender where we differentiate between the logic that's running inside of the rig that computes the poses-- this is the graph you see on the right-- and sort of the UI to the character, so the controls you click on that you interact with when you pose the character. So both are the rig. It's just they're slightly differently interacted with, either through Sequencer for animation or through the Control Rig editor here. Does it make sense, Jeremiah, or was it even more confusing? JEREMIAH: I think that it makes sense and there are different answers for different audiences. We probably have both on this, so-- HELGE: Yeah, that's fair. VICTOR: Cool. Let's hand it over to Greg. GREG: All right. Yeah. So Jeremiah talked about some different events, including the Setup Graph or Setup Event. And I'll be going over that and talking about how, with 4.26, you can share Control Rig assets. So in here, I have a level with four actors and I'll open up my little sequence and I'll play it. So I have four actors playing the same animation, same one for the mannequin sample. And basically, what I have here is I have three skeletal mesh actors all sharing the same Control Rig, as you can see in Sequencer. We can see that they are sharing the same track name. And if I select the Control Rig track on each, you'll see that they all apply the same Control Rig. This one is using a Blueprint actor, a custom Blueprint actor, that is using a Control Rig component that also is using the same Control Rig. So there's two different approaches on how we're going to share the Control Rig asset. So let's take a look at the Control Rig. And here-- I'll full screen this-- what we have is using the set up event. So set up event, basically, is a way to initialize controls, bones, or transforms. And in doing so, we're going to set the initial transforms or set additional control offsets before any forward solve or backward solve logic. Do you guys have anything to add on to that? JEREMIAH: I think that covers it. GREG: Cool. So basically what we have here is I'm grabbing the bone, the initial-- so I'm grabbing the initial transfer of the bone. And what I'm doing, as Jeremiah had illustrated earlier, is with controls we are having this offset transform. So what I'm doing is I'm grabbing the initial transfer of the bone and putting it to the control offset. And we're doing that across all of our controls, including some looping. So we have a new item chain node where we can loop through that and concat, doing the same thing as before. And just slowing down here. JEREMIAH: Let me jump in real quick, actually. GREG: Yeah, sure. JEREMIAH: I want to talk about why we want to do this. In the demo that Greg just showed, we had four different characters running through and using the same Control Rig. A big problem with that is that the controls are always going to be in the same location and the bones are always going to be in the same location. So if we played the same animation on all four of those characters, they don't get skewed to that one proportion. So at the set-up graph, this allows us to initialize that rig in different proportions, like Narbash there to the female and the male mannequins. And I'll use that same rig and reinitialize that rig to adapt itself automatically to all those different character proportions. And so what Greg is going through here is the setup graph and how we're able to pull that data in and adapt our control rig on the fly and then play that animation on the controls. GREG: Yes. Yes. And something to note, as well, is that the female mannequin and the mannequin both share the same skeleton. However, Narbash from Paragon does not. He has a unique skeleton. So the ability to where we're passing that through is all via names. So Narbash's skeleton has more bones than a mannequin. However, his face armature-- his face might be the armature-- has the same bone names as the mannequin. So therefore, that's passing it on to the rig hierarchy and we can grab the initial transforms from that. So in here for the arms and the legs, it's the same thing. There's a little math involved in order to calculate the pull vectors and the reverse foot controls. And then for the fingers, we're-- all I did was I just duplicated the same graph from the forward and backward solve and just changed it from the control transform for the get control transform and set that to the initial. And that set the control offset. And so looking at the Sequencer again, you can see that for the mannequin and the field mannequin, for these three Skeletal Mesh actors, they're sharing all the same animations from the sample. HELGE: Greg, can you do me a favor and just stop one frame, maybe with us standing in the back there, and just go through and click on each one, just so you can look at all the controls for each one? GREG: Yeah, sure. HELGE: Because it sounds pretty obvious, especially between Narbash and the mannequins that the controls are in different places to represent the same pose. Basically what you're showing with set up is conforming the rig onto a new skeleton. And this allows you to make a generic rig work with lots of different proportions. This is something that if you guys are used to autoriggers and Maya gear or other ones, where you can create a rig and then run a script that creates the same rig for a different proportion, it's the same idea. It's just we're doing it live. Every time when you click on the character, we're basically fitting it on there. So you can use it for animating it. GREG: Yeah, exactly. Something that's unique about this actor in particular is that we're actually able to swap our Skeletal Meshes on the fly. So if I go to this-- if I go to the Skeletal Mesh component and look for Narbash, see that Narbash gets changed. However, the Control Rig will also be reinitialized to the Narbash Skeletal Mesh. So I can go back, look at the mannequin. And you can see how the Control Rig gets retrofitted. This is using our new component called a Control Rig component where if I look at the Blueprint-- JEREMIAH: Surprise, surprise. GREG: --we have in our viewport-- we just have our Skeletal Mesh, which is just using mannequin, all default settings. And then we have a Control Rig component. And this is our new feature where you can set the Control Rig class and you can see that it's the same-- the mannequin shareable Control Rig. But if we take a look at the construction script, what we have is a new function for 4.26 called Add Map . Skeletal Mesh. And basically what we're doing here is we're telling Control-- or we're telling Control Rig to add this skeletal-- to add the Skeletal Mesh within the Skeletal Mesh component to map it across. JEREMIAH: Something to highlight here is since we can create this mapping in the Blueprints, that means you can have multiple mappings. So you can say drive Narbash and with a backpack and another character. And you can have that same Control Rig driving multiple Skeletal Meshes, similar to driving a body and then a head attachment or something like that. GREG: Yes. Yes, exactly. HELGE: Greg, can you do me a favor and pull out the Control Rig pin just to show the other options? We don't have to open any of them. But if you just look here, basically-- you don't have to click on any of them. But there's other ways of mapping things, as well. You can map Static Meshes. You can map general primitive components, anything that has a transform if you want to drive things which are not Skeletal Meshes. And you can also have very granular control over, I want to just map this one socket or this one bone. The node that you're showing here, which makes a lot of sense, is the high level one that just does the job for you but you can't customize it. There are, however, other functions in here that are very customizable, very like granular in terms of flexibility. JEREMIAH: And I think Greg's going to dive into those more when we get into the gameplay. GREG: Yep. So also within our Control Rig component, we'll also have some different events. So we'll have, I believe, that's what, five different events where we can say on post initialization of the Control Rig, or on pre or post the setup event, or on pre and post forward solve. So what does that mean? That means that we can-- before the setup event-- so if we go back to the Control Rig-- So before the logic that happens in set up event, we can run some sort of logic on the Blueprint, whether that's passing it down to the Control Rig or grabbing something from the Skeletal Mesh or some other Blueprint functionality that might be needed. In this case, what we're doing-- and this is a new function strictly in 4.26.1-- is we're grabbing the Skeletal Mesh from the Skeletal Mesh component. We're grabbing the Control Rig component. And we're just saying, hey set the set the initial bone transforms from the Skeletal Mesh, so that way when we change the Skeletal Mesh on our component, it'll get passed down to the Control Rig hierarchy and then all the initial transforms will get updated towards that new Skeletal Mesh. So let's take a look at it again with a little sequence. See that I select the mani. Can change this to Narbash. And it will automatically retrofit and also all the animations will stay the same. JEREMIAH: One minor tweak is the controls animation, so the current animation of the keyframes in Sequencer, are going to be relative to the new initial positions. So in this case, since Narbash's arms at ref pose are much wider, his hands are going to move relative to that wider position. GREG: Exactly. VICTOR: Anything else to add before we move on? GREG: All right, let's move on to the next demo, the Ridig' Pig demo. So this is a demo in order to show different ways to possibly approach attaching Control Rigs. So let me go ahead and open that level. So here we have Manny riding on a pig holding a gun. And having some sort of customizable pose, as well. And what we have here is in the little sequence, we just have two Skeletal Meshes that are running Control Rig tracks. I'll go ahead and select the pig, which conveniently enough, was using the backward solve. So I took a pig animation and I recorded a rip motion. And then I applied a run animation. And so that way I could backward solve onto a Control Rig so that way it can run. And then we have a gun, gun rig, which just has just a simple attach track. And then we have the mannequin, as well. So with the mannequin, we're using a mixture of a Control Rig component and additional Control Rig logic. So let's take a look at the Control Rig. There are some key differences that I'm doing in here in comparison to the mannnequin sample. So for one, I've manipulated the Control Rig hierarchy where I've added something called the body space underneath the offset control and moved all the IK controls and the pole vector controls and all the body and spine FK controls underneath this body space. And additionally, what I've done is also I've created another control called input control. In terms of the graph, I've basically copied exactly the same as the mannequin sample. However, I added one last thing at the end, where we're grabbing a follow variable, which Jeremiah illustrated how to create variables within the Blueprint tab. And I've exposed that. And what we've done is we've branched from there. And if it's true, what we're going to have is the input control-- so this one. That's outside-- control the transform of the body space. So that's kind of how we're handling the attachment. On the Blueprint, what we have is, once again, it's just a Control Rig component and a Skeletal Mesh component. And if we look at the construction script, for the first part, it's very similar to the sharable control rig, where we're mapping to the Skeletal Mesh. However, we're also mapping additional element. So what I've done here is I've created two variables, a follow variable, so that way we can attach it to the Control Rig object later on, and also a actor variable. This allows me to-- when I create the instance of this Blueprint, I can set the actor variable to anything that I need, because eventually what we're going to do is we're going to take this actor variable and we're going to make a Control Rig component mapped element. What this means is that whatever this actor that I've assigned, it's going to control the input control that I have in Control Rig. And it's going to control it in worldspace. There's a bunch of different options that is available in the the Control Rig component mapped element. You can change the different types, the bones, spaces of curves. You can also change the directionality, if you wanted to. So right now I have the actor driving the control. However, I could have the opposite effect where it could be the input control controlling the actor. And also there's a bunch of different spaces that we can do, doing world in this instance. And what we do from here is after making this element, I make it an array. And I use the Add Mapped Elements function that's available on the Control Rig component. JEREMIAH: I want to note-- sorry. I want to note real quick that that Maps component elements node represents the data structure that you could manually populate on the control room component itself, if you wanted to. Yep, there's mapped elements right in there. Ah, right here. So you can click that plus and drop down. And you'll see the exact same data there. It's just much easier to build it dynamically with your graph rather than populating that detail screen there. In fact, the second that you apply your map's data, I believe it overwrites the main stuff you did there. So it's created at the graph. GREG: So let's take a look at the event graph. And this is where I'm using the Pre Forward Solve a bit where I can grab the component, I can grab the Control Rig, and then I can cast it to the Attach Control Rig and then set the follow variable. So like how, again, Jeremiah said earlier, after changing it more to the variable workflow that is across the board in Blueprints and animation BPs, this is following that same workflow where you can cast to the object and be able to set variables very easily. So let's take a look at the sequence again. And there's some additional things that I've done in order to attach the mannequin onto the pig. So what I did was I created an empty actor and I attached it underneath the pig's spine. And then what I ended up doing, for the instance, is I turned on the Boolean variable and also assigned it to the attach actor. So that way it will follow-- mannequin will follow the pig. HELGE: Greg, can I ask you a question? And I'm putting you on the spot a bit, I know. GREG: Yeah, sure. HELGE: Is there a reason why you're setting the space for the body at the end of the rig evaluation? Looks like you're doing it at the very last step, right? GREG: Yes. So I had initially did that just to not mess with any of the previous logic that we had on the sample. You could technically put it before. You could technically put it after. HELGE: The reason I'm bringing this up-- and again, apologies if this is uncovering something here. But I just noticed that there is a frame delay. Like, there's basically a frame delay of the body pose with the guy on the pig. And so if you were to connect this space copy from the follow before everything else in the body, then the frame delay would go away. So I did review this content before and I didn't actually spot it. But I spotted it just now on the livestream, so sorry about that. But it's like, for the users, if you want to rewire, I can also have it on my screen. I did the change. So it does show that-- it makes sense, right? Basically, what you're doing is you're solving the body, everything, putting it in place. And at the very end, you're setting the space. So in the next frame, we'll use the results from the animation. So if you just wire it before, then that's what you're going to get. So you'd have to add another sequence node, I think. GREG: No, we'll just do it before the sequence. Yeah. So hopefully-- HELGE: Yeah, that should do. GREG: We'll see if this breaks anything. HELGE: It shouldn't break anything, but yeah. So then-- GREG: Oh, yeah. Let me compile the Blueprint. HELGE: Oh, OK. Yeah, that makes sense. So now the frame delay is gone, basically. But it does make sense. I was just spotting this. And I was like, I don't want to confuse people out there. So if you're bringing something into the character that is needed for the post computation of the character, you need to do that first. You bring it in and then you can use it for other stuff. It makes sense now. GREG: Gun is-- I don't know why the gun-- oh, that might transform did my transform track disappear or something. I think my transfer track got moved on accident somehow. HELGE: So feel free to reload-- [INTERPOSING VOICES] HELGE: --if I managed to screw the presentation now, sorry about that. GREG: All good. Well, something to note, as well, is that now I won't fix the gun transform. But with another way that you could attach Control Rigs is to use your attack track. One of the reasons why we were using the Control Rig component in order to handle this was if we did an attach track in Sequencer, it would be attaching it to the actor transform versus what we would need it to follow for the body. So if you had it on the root, then you have to counter constantly every time. So that's why we did it to the Control Rig component. However, for the gun, since we're just having the root attach it to-- attach it to the hand, we can just use an attach track and we can manipulate any sort of additional controls that we need and animate that accordingly. HELGE: It's very cool. I mean, there's also-- I will carefully say, without saying what we're going to be working on next, but this clearly is an area we want to focus on making this easier. So what you're presenting here is great in terms of, there's several workflows of attaching things together. You might pick one over the other, depending on your use case. So you can already do that. And of course, you can find a very sort of pipelineish pattern for this. So you can always do it the same way for your show or whatever you're animating. However, we're aware that currently it's a bit, like, let's say clunky-- and it's something we'll look into in the future and we're aware of. GREG: Absolutely. And something to note, as well, is that this shows a lot of power within the Control Rig component. You can pass in data. You can get data. And you can manipulate it all within Blueprints. You can create additional actor variables and pass it down and pass it forward, because I know there were some questions about being able to assign certain actors in the world to certain controls or some sort of a factor like that. HELGE: I'm quite excited about you showing this-- what you're showing sort of slowly diverging from the classical path of rigging, like as the presentation is going on, you can see. First you have a character and then you have a rig. Now we sort of-- we have a component that hosts a rig. And we're doing some custom massaging of the data. And what this means, really-- and especially with the vents you're showing-- like, you can run some custom logic after the forward solve is done or before you can hook it up to Blueprint and do all this stuff, right? What this means is you can start using the rig as a tool instead of your characters or instead of whatever you're using it for. You don't necessarily need a Skeletal Mesh. So it opens up all sorts of interesting workflows for people to use rigging in other creative ways. GREG: Yeah, absolutely. Absolutely. JEREMIAH: Greg, did you talk about the pre-forward solve? Did you mention exactly-- GREG: Yeah. I can mention it again, just so that way we can-- JEREMIAH: Because previously we talked about the pre-setup events in the previous demo. But here we're doing a pre-forward event, pre-forward solve event. GREG: Yeah. So basically, what we're doing, since we're back in the Control Rig, we're querying for the Boolean. What we want to make sure is that before the forward solve happens, we want to set the follow variable from this Blueprint down to Control Rig. So we can have this logic down where we're setting to follow and then that gets populated down. And then when this gets ran, it will actually run the true function, set to false. HELGE: It's basically giving you the ability-- I mean, for people who aren't familiar with the events in Blueprint-- it's basically giving you the ability of getting very granular messages from Control Rig when it's doing what, and then react to that, right? So in this case, just before the rig is supposed to do the forward solve, you can change some data, or bring in some data-- in this case, a Boolean. It might as well be a transform or very high level data that you have into the rig for consumption. After solve, you might decide to take the transforms the rig has solved to and do some additional changes in your logic or whatever. You get full messaging from-- or full notifications from the rig for what's going on for these series of events that you're showing there at the bottom right. And you can build custom logic against that. GREG: Yep. All right, let's move on to the next demonstration where I'll pass it back to Jeremiah to talk about slope warping. JEREMIAH: Yeah. All right, so slope warping is something that we talked about a little bit before. In fact, if we go back to the Paragon days, Laurent, who's one of our lead engineers, animation engineers here at Epic, did a talk about slope warping as an approach that we use to adapt our characters to different environments. So I'm going to demonstrate here what we have. So I'll just go ahead and play. There we go. So I have my mannequin here. And my character just automatically adapts to a different terrain. And I can run around, climb up some stairs, and see my feet are going to adjust automatically. All right. So there's a lot of different ways to do this. Oftentimes we'll just see this as IK foot tracing, or something like that. And oftentimes this approach can get pretty cumbersome, including actor Blueprints and animation Blueprints and other processes all passing data back and forth. But in this case, let me show you real quick what this looks like. There we go. I actually wanted to show you the Animation Blueprint. This is my Animation Blueprint. All it is is a Control Rig node and I'm taking in the speed. There's no extra attribute key or anything. So this is how simple it was for me to get to add this into my anim BP. I don't have to change the logic across my entire character. All right, so first let me show you kind of the theory behind it. And in this case, I have a mannequin here. I have this square that, in this case, we're going to pretend like this is the ground. And as the terrain changes, my character is going to automatically adapt to the differences in terrain. In fact, the feet are going to change their angles. My hips and knees are going to react accordingly. If I bring this up, in this case, my pelvis is going to stay in its current, animated position. And the legs are going to come up. I could just as easily make it so that there's a max compression, just like I have a max extension here. You can also actually see, as I do this, there's kind of a little bit of a lag. I wouldn't call it a lag. It's just a damping effect, so that as my character moves over quickly changing terrain, the entire character isn't jittering. And last but not least, this demo is taking advantage of our new experimental full body IK plugin that we've released in 4.26. If you go onto the plugins and search for full body IK you'll see that plugin built for you. It's currently in experimental mode and available to use in Control Rig. So let's take a look at how this demo works first before I get into the full slope warping Control Rig. So this demo taking in a couple of things, taking some controls in and setting to transform. So actually, let's look at the hierarchy first, because that's pretty important. In my hierarchy, I'm using the default mannequin. And default mannequin already has IK mode. So it has IK foot roots, IK left and right roots. And I'm going to-- or IK foot left and foot right. And I'm just going to take advantage of those. So kind of like we were just talking about where we pulled data externally into our graph before we do any other processing, that's what I'm doing here. I have my chest coming in from my spine 3. In my final one, that chest animation is going to be taking in my incoming chest pose so my upper body stays as true to form as possible. IK foot root is going to be driven directly from my slope control, which this is my slope control. And in my next graph, that's going to be driven through a sphere trace. And then I have each foot driven by a foot control. So that allows me, in this example, to then offset my foot as if I had uneven terrain. And then I had a sequence. So now that our rig is kind of set up, I'm going to do two things. One is I'm going to calculate the hip compensation. So the longer my leg has to reach, the more I have to adjust my hips so that both feet are planted on the ground. Now, I do this in as data driven of a way as I can. I actually measure the length of my leg in its initial state, so the distance between my thigh and my foot. And then I measure the distance between my thigh and my IK foot, which is the projected position of my foot. And if it's greater, then I return the value. Otherwise, I return zero. So I do that for both my left and right leg and I see which one has to extend further. And I pass that data into my pelvis. And this is just to accumulate lerp with a speed so that I can kind of arc direct how quickly my pelvis is reacting to changes in my foot position. And then I pass that data to the x transform of my-- or translate x of my pelvis control. And then adjust my pelvis bone to my control. So something I have seen often is people are driving bones directly. In Control Rig I could drive controls this entire time and then really manipulate exactly how those controls are solving before I apply any data to my skeleton. It also helps to visualize very quickly what's happening. So as I just rotate this foot back and forth, you can see the length of my leg gets hyperextended and my hips start to compensate. In fact, if I zoom out here and I start dragging, you can see the graph running and telling you which leg is extended, not how it's [INAUDIBLE]. So at this point, all I've done is I'm manipulating my pelvis control. I'm using this under control as my pelvis so that my source body location is always consistent. And then I just use that second control as an offset. Once my pelvis has been compensated, then I'm going to use my new full body IK plugin. And we're going to feed it in all the data I've gotten so far. So in this case, I'm bringing in the root bone for my chain. And then I'm going to feed it a couple of factors. I'm feeding it my pelvis controls, my left and right feet, my left and right IK feet, and my chest, just to kind of help lengthen the body. I also have a couple of constraints here, just to keep the knees oriented a little better. And I also have the pull vectors here. So in this case, I can manipulate my pull vectors directly. But I'll show you another example of that later. And then after I've solved my full body to compensate for what's going on-- so let's go ahead and kind of tweak this a little bit-- then I'm just going to force the feet rotation to the ankle of the foot controls here, or in my next example, to the orientation of the terrain. So I think that's the general theory behind this. One thing to note is this slope warping aspect of this is actually the rotation of this IK foot root bone. So that root bone is going to orient to the terrain. And as that rotates, it's going to take these left and right IK foot bones along for the ride. So those feet will automatically be oriented to that terrain in their own unique spaces. And then I can offset those feet individually. So that's the slope aspect of this. So let's jump into this full graph that I was running here in my previous step-- in my demo as its running around. And while I do that, let me show you one of the debugging abilities. I'm just going to hit Play. And since I have this set for maybe a little slower, but I'm going to choose in my debug filter and Control Rig. Now you can see my demos Control Rig available. And now as a runaround, you can see my character adjusting to the terrain here in Control Rig. And let's go ahead and just rotate around so you can see how my character is adapting. So you could debug your character and see exactly what's going on. You could see the body positioned came in there. You could see it rotating actually with an incoming bone pose-- skeletal pose from my anim Blueprint and then offsetting from there. I also have here some visual debug squares that were released in a previous release. And so I've turned on those visual debugs in my Control Rig so that I can easily debug here at the Control Rig editor. So I'm going to keep running around, just to show you what it's doing. I've got to adjust there. There we go. Now we'll get some feed at a different angle. All right. So what's going on to make all of this work? As always, start with that forward solve. And then I'm going to pull in some data externally. So before I do anything, I'm actually pulling in the left and right starting foot positions. So this is the incoming pose, the animated pose of this run. And I'm going to set my IK left and right feet to those. You could do this with virtual bones. It's not really a problem with virtual bones, but one of the things to consider with virtual bones is that those bones exist on the skeleton itself. So you would have to modify the skeleton. In this case, I can do the data all in Control Rig. Or in this case, these bones already exist in this mannequin rig, so I'm just leveraging this. So I'm pulling in my left and right foot positions for my animation and setting my IK feet. And then I'm going to calculate some pole vector positions. In this case, I just kind of cheated and I took the direction that my foot is facing and offset it with a value to just keep my knees pointing generally over my feet. You could do a more complex calculation if you want to. But this seems to work pretty well in here. And then I pull in a little bit more animation data. I'm pulling in my spine 3 animation coming in. And I set that to my-- I drive my control with that position. And then I pull in the pelvis animated position and drive my body control, which is, again, this yellow hexagon I have here. So now at this point, I've gathered all my external data that I need from my incoming pose. And I can start doing some offsets. Before I even do offsets, let's see if I need to do offsets. So I have a branch here. Branching is, we seen a couple times now. And this is new in 4.26, so you can build some more complex graphs. And I have a condition off of this sphere trace node. This sphere trace node is also new. It takes a start and end position. And so I'm just taking the position of my root bone and I'm measuring up-- or I'm sorry, I'm only measuring down 50 units. I don't want my character to pop up. I would rather my castle move up and then compensate my character back down to fit on the ground. If I'm not hitting anything, then I don't want to change my character. I want to leave it alone, so if I'm jumping or vaulting or something like that. But if I do hit something, then I'm going to start aligning some bones and setting my character up for adapting to my terrain. Let's move this out of the way so I can make this a little bigger. So first thing, I'm going to align my IK foot root with the ground. So coming from my sphere trace, I'm going to get the trace position and-- or the hit position and the hit normal. The hit normal, I've actually clamped. So if I'm hitting the edge of a stair surface, I don't want my whole character to rotate 90 degrees or nearly 90 degrees. So I'm keeping it within kind of an angle that I think is reasonable in this case. It isn't absolutely necessary. You may want something different. But this is what I chose in this example. And now that I have that normal, I'm going to use the in math node to orient my IK foot root with that normal. I'm feeding in this target as a direction since I'm getting a normal instruction. And once again, I'm going to use accumulate lerp just to dampen the movement a little bit so I'm not getting any jerky motion as my terrain adjusts very quickly. And update that new rotation in and that hit position in. And now I have my translation for my-- or my transform for my IK foot root. Now I'm going to do a couple other things. First is going to be adjust my feet. So now I've adjusted my entire IK root. And then I'm going to offset each foot to make sure that they're landing on the ground and planting if they have unique normals. I just wanted to add a little bit of a performance consideration in here. There's a lot of different ways to do this, but in this case, I'm only going to do the feet if my character is basically idling or slowly starting to walk. So I'm going to use looping. And instead of using a foreach, I'm actually just doing a count. So I could have done this different ways, but I wanted to show it as just a standard for loop. So I'm counting twice. And if I'm in the 0 index, then I'm going to get IK foot left. If I'm on the first index, then I'm going to get IK foot right. I'm also going to use variables here to make my life a little easier so I don't have lines stretching over the entire thing. So I'm setting what index I'm in. And I'm also setting what item I'm using. So in this case, first IK foot left, then IK foot right. And then I'm just going to call those later on. I'm going to zoom out so I can talk about the logic here. This chunk is just doing a smear trace again above and below the foot. So my hips have already moved and I may need to move one foot up, one foot down. So that lets me trace above and below and see if step up on a step or step down on a step. Then I'm going to orient the flip to that surface normal. I guess before I even do that, I'm going to see if I hit anything. Otherwise, we're just going to go back to our incoming animated pose. I'll gather my surface normal and orient each foot individually. And again, these variables aren't the ones that I collected before. And one thing I did before is I gathered that-- the index that I am in the for loop. And that lets me select different values. In this case, I needed to feed in a different axis, whether it's left foot or right foot, since the x direction of the bone chain is different whether it's left or right. And so I'm able to use the select node to do that type of behavior. And then I pull all this together with, again, one of my favorite nodes, the lerp, with a flip lens speed so I can art direct this however I like. And at the end of the day, I am just setting the transform for my left and right IK feet. So as I said previously, at this point, all I've done is I've collected the data before I fed it into the system. So now I have my IK feet bones in the right place, my IK root bone in the right place. And now I can start acting upon it. I'm going to measure my hips. This is the exact same thing that we saw in my previous demo where I'm measuring the length of my animated-- or my projected leg extension and my initial leg length to see if it's hyperextended. And then I adjust my hips down. And then I get back to my Full Body IK. And this is basically the same thing, my pelvis body, left and right feet, and my chest. And then I have my pull vectors going into the constraints. And then fix up my feet rotations at the very end just to make sure that they're landing exactly where I want them in my level. So once again, we'll run around with this. Let me make this a little bigger for you. It can run around on this sphere and see the feet adapting to different terrains, whether they're soft or not. So in this case, I could do more complex foot tracing. In this case, I'm tracing essentially from the ankle down, which is why we see it hitting the heel but the toes are going through. If I wanted to, I could do more complex and trace the toe and the heel and do all kinds of cool stuff. All right, so this is my slope warping demonstration. HELGE: There's one thing I want to point out. Sorry, Jeremiah. I feel like I did the same thing to Greg and now I'm doing it to you. I found something that is a little mistake on the rig. And I just want for the viewers just to clarify it. So if you go back-- it's actually not a mistake in terms of the output. But if you go into-- yeah, that one. JEREMIAH: This is Helge code review time. HELGE: I know. I'm sorry. I just want to make sure that if people watching, they don't get confused. So can you go to the area where you're computing the pull vectors? This is like in the top left somewhere. JEREMIAH: Well, yeah. I mentioned I cheated on that. HELGE: I know it's a cheat. But the only thing I want to call out-- so sorry about being so particular. But basically, where you've connected up to the bone the input, which is I think supposed to be the parent of this, right? So you're basically saying, take the bone space. And then within the bone space, add like 3 and 50 or whatever you have there? Is that what it's supposed to mean? JEREMIAH: Yes. HELGE: Or are you just trying to globally offset? So basically the order of operations is different. The parent goes into the second slot. This is something I've seen in lots of rigs where, because what we're doing in Control Rigs are actually reflecting what the Unreal mass library is doing, and our transforms are post multiply. So the parent goes in the B slot, which is really confusing, which is why we have another node. That's what I want to point out. We have another node, which is called Make Absolute. We have one called Make Absolute and one called Make Relative for doing these kind of operations. So if you were to replace this with that, I think it would be a bit more readable. That's the only comment I have. So for the viewers, if you want to take a transform, you want to offset a certain way, my recommendation is use the make absolute or the make relative nodes instead of the multiply because for the multiply, you don't actually know what's what. Does that make sense? JEREMIAH: Got it. HELGE: All right. I'm shutting up now. JEREMIAH: So users, feel free to make those changes on your side when you recreate this. We've gone through this several times practicing for this. HELGE: I know. So what's interesting to me is-- it's my fault, absolutely. What's interesting to me is that it just works still, right? Because a lot of times with these kind of math operations, you don't notice. You will notice eventually if there's some extreme rotations happening on the feet source animation. But due to the fact that your animation isn't actually turning the feet in crazy ways, you don't see the problem. JEREMIAH: Yeah, I'm sure if I did a rotate 45 degrees or something, or 90 degrees, if my character rotated in place, then I might-- HELGE: The only reason I mention this is so that if people are using this video as a reference that we clarified this is where you wanted to go. JEREMIAH: Yeah. VICTOR: That's why we have you here, Helge. JEREMIAH: Exactly. HELGE: We're still friends, right? Sorry. It's OK. JEREMIAH: All right, so this demo represents a prototype and the general concept of slow warping. There are a lot of different ways to do this, but this is one approach. And using Control Rig I'm able to kind of gather all this data into one graph and reach out to the world, trace against it, and pull that data directly into Control Rig. I don't get that frame delay that I may get if I had to pass through an event graph. And I'm able to visually debug it in Control Rig while I'm running live in the editor. VICTOR: Jeremiah, do you think we'd be able to upload this little example? JEREMIAH: I'm sure we can find a way to do that. VICTOR: Cool. Yeah, just hit me up after the stream. JEREMIAH: Yeah. I think we shared this on Twitter, and it's been-- just the video is very popular. I'd love to share more stuff like this with the community. All right, so now we're going to move on-- HELGE: I was going to say, I think it's the most technical Control Rig in terms of implementation I've seen so far, using loops for switching between values and doing the rate casting all this stuff is pretty impressive. JEREMIAH: Laurent does this fantastic talk about that importation of Paragon. And I wanted to see how far I could go not being someone that's incredibly math savvy or technically savvy when it comes to programming. But I was able to go through it and replicate as much as I could with those concepts and get a pretty good result. So I'm pretty happy with how that turned out. GREG: It definitely shows the power of Control Rig, where you can manipulate that without having to write your own plugin. JEREMIAH: Yes. And I mentioned one thing in here, runtime post-process. So as we go through these, we're showing a lot of different use cases for Control Rig, both animator-centric where you can author new animations in Sequencer, and even use those later on to fake the dance sequences, and also runtime post processes where you can use it to fix up or correct or do corrective motion. Like in this case, where we have a Control Rig node in your NVP. So a lot of different uses. And the next one that we're going to talk about is When Robots Attack. And this is driving gameplay with Control Rig. So previously we just had an animated pose going in through Blueprints and feeding into Control Rig and adapting. In this case, we're going to drive Control Rig completely with gameplay. And I'm going to pass it over to Greg, who's going to talk a lot more about this. GREG: Yeah. So my screen's OK? VICTOR: Just a second. Can we switch to Greg? Perfect. Yeah, you're good. GREG: All right. Cool. So I'm going to play this little demo. And I'm going to full screen it. And we have a character. And as the character is moving towards the robot arm and the robot arm is following the character, you can also see that it goes up to an uprise position with the pinchers being animated. One thing that Jeremiah said earlier, this is all procedurally animated. There's no pose assets, no animation assets. And these are just all running in anim VP through using a Skeletal Mesh on these robot arms. So as I'm running around, if we look at this arm in particular, as I go away, it goes back to its initial position. I can go ahead and do this for the other arm, as well. So let's see how I did that in Control Rig. So in Control Rig, what we have is we're going to-- actually, let me open up the anim VP first. Be a little easier to show it from there. So in anim VP, I have the Control Rig, as Jeremiah's shown earlier, with the slope warping. And I'm selecting my robot arm Control Rig class. I can also pin my variables that I have from the Control Rig and pass it along from the anim VP. And if we look at the Control Rig, what I'm doing is I am grabbing the attack position, so basically where the character is, and I'm comparing a distance between that and one of the bones on my robot arm. And then I am going to ease that value and input some custom values or set a distance multiplier. Then down here, I'm using an accumulated lerp, where I'm grabbing the attack position again. I'm grabbing the initial position of the arm pivot and setting an aim. So that will help with the-- when the character goes towards a certain distance, the robot arm will aim towards that character. Then this is something to know about the-- where I'm setting an IK. However, because the aim is going to be constantly moving the entire robot arm, what I'm doing is I have an IK space and an IK control. And I'm setting whatever the hand pivot is of basically wherever the hand is after the aim to the parent of the IK control. So then that way I can run a CCD IK in order to handle the up and down movement. Then what I'm doing elsewhere is I'm checking the state of the attack and then I'm making another blending weight multiplier, so that way I can pass that off to-- interpolation to interpolate between the initial position of the arm and putting it upward, and also the same for the pincers. And for the pincers, what I'm doing is I'm just using an accumulated time node with sine and remapping it for a certain rotation value and passing that along for the rotation of the bone. So let's take a look at that again. So as I move closer, it's aiming. If I move back, it'll go back to its initial position. Start aiming towards this. And if I move a little closer, it will interpolate up, and those pincers get animated. I don't think I went over this, but in the robot, what I have is, in order to handle the attack state is I have an attack range capsule. So basically, when the character moves into this capsule, then it will change the state for attacking. JEREMIAH: And then in that-- is it in the level Blueprint that you're passing in the action position? GREG: Yes. So in the level Blueprint, what I'm grabbing is I'm grabbing the actor location and seeing if it's overlapping on the actor and then setting the-- and then changing it to the attack state. That's all there is to it. JEREMIAH: Very cool. HELGE: It was very cool. And nothing to criticize, Greg. Can you believe it? JEREMIAH: Yeah. It's awesome to be able to just generate animation and gameplay really quickly. Even if this is just prototyping, it gives you the tools to do that type of stuff. You can layer in animation, if you'd like. We've had a lot of fun with this type of thing here. HELGE: It's really cool but as well is that you're actually starting to merge-- so the same character pipelines for various use cases. So it's kind of nice that you're able to build certain things for solving robot arm and then depending on how you're giving it the data, how you're handing in the data, you can animate a Sequencer, or you can build something like this instead of procedurally. So there isn't a big differentiation, I guess, what I'm saying, between if you were in a CG studio animating a feature film with this, there isn't a difference between something that's procedurally driven completely or had animated in terms of the rigs you can build for it. Does that make sense? There's no multiple systems that you need to use, which is classically the case. GREG: And something to note, as well, is if you have any procedural animation that you do in Control Rig, you can record it with some of our cinematic recorders and have that down to an animation sequence, which then, if you wanted to author that, you could do a back resolve on one of your authoring rigs and then adjust accordingly. VICTOR: Jeremiah, I think you showed that during the last Control Rig stream we did, right? JEREMIAH: I think so. Yeah, I talked about baking anim sequences. We do have some new features in 4.26 which I don't think I had quite planned to talk about, just because I'm not prepared. We have a lot to talk about already. But in 4.26, we have not only bake anim sequence, but also bake linked anim sequence. And the linked sequence is slightly different. It's definitely a complete departure from what Greg is talking about here. But it provides you the ability to edit in Sequencer and save your level sequence. And as you save your level sequence, it's automatically going to update the anim sequence in the background. So you no longer have to overwrite that-- remember to overwrite. You can just animate the author directly in Sequencer. I might be able to demo that here in this next bit. GREG: Well, speaking of which, I'll pass it back to Jeremiah to talk about the Meerkat demo and demonstrating a film quality rig in the Control Rig. JEREMIAH: Yes. Let's do that. All right. Let me know when I'm good to go. VICTOR: You're good to go. JEREMIAH: All right. So this is a pretty incredible sample that the Verge production teams put together. And there was this incredible short film that Weta released using these tools with this Meerkat and this Eagle. If you haven't seen it, please go and check it out. It's really, really cool. And it represents a lot of the technology that's available in 4.26 beyond Control Rig. For these purposes, I'm going to focus on Control Rig, of course. And we're going to take a look at this Meerkat here. Now, included in this demo, in addition to all the other incredible stuff that the teams have put together, is a full Control Rig that we've modeled based off of my animation rig originally created. I'm going to open this up. Just going to take a sec here. And it represents one of our most complex Control Rigs put together to date. And it has an incredible amount of detail. I don't have time to go over everything in detail. But I do want to give you some high levels of what's available in this rig. So I'm just going to go all the way to the beginning. My goodness. And the person who rigged this, Chris Havreberg worked on this. And he structured this in a way that's very easy to read and deconstruct. So we can start up at the top because we drive the root. And we're using sequence nodes all over the place because it gives you good readability. Sequence nodes are also, as their names, run in sequence, which means it will complete everything on pin A before it begins pin B. So you can take that into consideration as you're building your rigs, driving your route before you drive your feet or something. So in this case, we're driving our route. And we have some spine logic here. And not only do we just have a spine, but we have IK and MK switching between them. We're also using item chains often through here so that we can propagate our motion and interpolate it throughout a full chain. And we're using looping, as well, to really minimize the length of this graph. 4.25, this would have been an incredibly large graph. It already is a large graph. But it's doing so much more in that amount of space than we were able to do before. We also have just some switching controls. In this case, these are float controls. And using that to automatically toggle between the states, branch between them, and then turn on and off the visibility of these controls, like we saw previously. As I go through this, I think you'll see a lot of similarities between what we're sharing in our Control Rig mannequin sample and what was developed here. We're just building off this same logic and expanding it to more and more places. We're also able to clamp all kinds of things. So in this case, we're only letting the spine stretch a certain amount and we're using spatial clamps to do that and doing some calculations to figure out exactly how far we're going. So again, my intention is not to go through this entire thing. I just wanted to point out a few key things. So we have spines. We have the ability for our legs to follow along with the pelvis, our arms to follow along with the pelvis. And then we go into neck again, IKMK switching, with some limit stretches driving the eyes. Here we see our FK and twist bones throughout doing their interpolation automatically. I think I've seen some questions about driving twist bones procedurally. This is a great example to take a look at and see if you can create this behavior in Blueprints. This also represents, if I'm not mistaken, driving the position of controls dynamically. So if you stretch the spine, you may want to position a middle spine control automatically based off of the direction of the other two controls. And you can do that automatically and then still rotate that control in animation, you're not locked out. And continuing on, shoulders, scapulas, the tail is actually really interesting builds. Throughout these on the spine and the tail we're using curves. We're using the fit chain on curve note. And so we're creating a curve representation, attaching the bones to that curve, and then driving that curve to do some pretty cool logic. And that can give you kind of that spline-based IK behavior. Not exactly IK, but that type of behavior here controlling it. And then using these interpolate nodes to determine exactly between the positions of these controls. A very cool setup. And then copying those transforms over for FK so that when you toggle between the two, it all just works. And then we get into limbs. It goes on and on. This is an incredible resource and I'd love to see what people do when they deconstruct it to try and create these level of characters in something more than just this lovely Meerkat. Additionally in this Meerkat, this guy is animated in a control rig with these controls. He does have full facial curves. And we have implemented the face in here, just because we are focused on getting the body control rig represented. But you can expand this yourselves. And in fact, I've seen some examples in the community who have already done this, driving the face curves themselves. In Control Rig, you can go to Window Curve Container. It'll bring this up. In this case, we haven't imported the curves. But you can always right click and either add a group and name it your own-- and you can use that curve for whatever you'd like-- or you can import a curve from your Skeletal Mesh. And it'll bring in-- I'm not going to do it now because there's a ton of them. But it'll bring in all the curves for you to drive. Let's see how long it will take. Let's go. That was really fast. Good job, Helge. I can right click here and say set curve value and choose a curve [INAUDIBLE]. So we do have auto compile that compiles most changes that you do to the graph. The auto compile won't compile hierarchy changes. You need to manually compile hierarchy changes. And if you add or remove curves, that may be true for adding and removing variables as well. HELGE: Yes, I believe so. JEREMIAH: Yeah, so now that I've recompiled after adding the curves, I can just choose something. Let's do jaw open. That's an easy one to see. And very quickly-- oh, there we go. Very quickly adjust my jaw. In fact, let's take this one step further. And close this. I should be able to do some procedural motion here. That looks awful. Well, I can fix that real quick. I'm going to right click on that pin and add interpolate. And I think this is stuff that I talked about last time, as well. And you can see there's a little bug icon there. That's good. Let it interpolate on a pin. And in here I can now clamp that range, incoming out of 0 to 1. But I'll just clamp it-- sorry, incoming I have minus 1 to 1 since it was assigned. And I'll clamp it 0 to 1 and we'll see it just open and close. GREG: Something I want to mention, as well-- while you're manipulating morph targets and their curves, you can also create material curves in your Skeletal Mesh and drive material parameters, if you wanted to, as well. So if you wanted to use Control Rig to change some sort of color or some sort of a texture within your materials, you can also do that. JEREMIAH: Yep. Very true. HELGE: Yeah, the one thing I want to add here is just-- it might be a bit late, but I feel like some viewers might not know that curves here actually refers to the float values that drive morph targets and other things. So we're not talking about bezier curves or NURBS curves. This is something that, when I started, I think confused me quite a bit. So we call curves here the things that, in the animation Blueprint, are also called curves, so morph targets or other kind of float values used for information. JEREMIAH: That's right. If I open up the Skeleton and look at my Meerkat, you can see anim curves here. And this represents all those curves. So this open is the curve that I was driving before. And these toggles represent whether it's a work target or a material curve. So I can create material curves, create a parameter in my material with that same name and drive that. All right. So additionally, in this graph-- GREG: I believe it's over on the-- JEREMIAH: In fact, this is a great opportunity for me to show you can use Find Results. So when you have these massive graphs like this, I can search for backward in my Find Results. And it'll show both my backward solve node, I could double click there and it'll take me, or it'll show me the comment, which has that name, and it takes me to that whole comment section. So this is a really great way to navigate your graphs. And this is the same behavior that you have in anim Blueprints. All I want to point out here is this also has full back solve. So taking the same thing that we did before on the mannequin and taking it to the next level. I'm going to go and close this. And I've already opened up our master level and our master sequence. So that's what we see here. And this is incredible. You drag through and we have our Meerkat with a full fur set up. I'm just so amazed by this. Anyways, enough of that. I'm going to just bake a small section. We don't need to do the entire thing. And I'm going to go to my Meerkat Blueprint. I'm going to right click. Bake to Control Rig. And choose my Meerkat. I will not use keys. I'll just do one to one. And now I have my Meerkat fully baked on Control Rig. And I can start manipulating this guy. I'm grabbing my controls over here. All right, guys. I can't do it anymore. VICTOR: Hey, nice little tips and tricks in the middle. JEREMIAH: I have invert my middle mouse pan. I'm one of those guys. We'll see if chat explodes over that. Oh, there we go. So much better. I tried. I tried. So once I baked that, a couple of things happened. And I didn't mention this so much before. The anim sequence we now see is greyed out. And I right clicked. By default, whatever I bake my bake to Control Rig, it deactivates that anim sequence. If you ever want to get it back, you can just turn on active and you can click on that Control Rig and delete it and you'll be back to where you started. So it's non-destructive. And another thing I showed here is it will automatically bake between the region that you set. So in this case, I only wanted to bake these 100 frames or so. And so I moved my start end to that section and then baked. And now I just have that section. All right. And now I can drop down in Sequencer and see all my controls available. Also, when I baked, I now have my animation mode, which you can get to via Modes, Animation, or it turns on automatically when you bake. I have my control hierarchy. So I can go to Controls directly in my hierarchy. I can click on Controls here in Sequencer. And then I also have-- this specific part isn't new, but cool to show. I also have the channel output of where my control is. So this is where I would type in new values if I wanted to do it that way. We also have a settings control here. And the settings control, I think, is just a location, rotation. So it's not a full transform, but it's a position in space. And under it, it has a bunch of Booleans, or bunch of float values , actually. So this is a great way to demonstrate kind of parameters or attributes that people are used to seeing. Here you can see them all located under my settings node by their own names, by their control name. And let me see if I can grab something, tweak it so it'll make sense. Now I can also search for things. Here let's do this one. I think we animated the eye cam. There's a lot in this rig, by the way. So let's go ahead and pause this just to un-root. Yeah, so I can tweak my animation. It's not the most incredible tweak that someone can make, but-- I think this guy lowers and raises the entire body, if I'm not mistaken. And I can go to my Curve Editor. And I can continue to do all of those manipulations here, as well. It's a really powerful tool. I'd love for everyone to download this project, take a look at it, not just for the Control Rig that would provide it, but for all of the tech that we're showing for this project. There's so much to share, not enough time to share it. We've already been doing this for two hours. We could spend two hours just on this project, just on this Control Rig. But yeah, I think with that, that goes to questions. I want to pause there. We went through a ton of stuff. So even the same people are watching and still have questions. I'd love to get an opportunity to answer them. VICTOR: I believe I'm up to three pages right now and-- [INTERPOSING VOICES] VICTOR: So yes, Jeremiah, there are plenty of questions. And we shall try to get to as many of them as possible. I've been trying to categorize a couple of them into more generic topics that have been asked several times. But before we dig into that, let's simply just start from the top. Can we go back to grid view and then you all can see our pretty faces. We might be digging into some of the screen share again, all of you on the call. If you do, just give us a moment so that we can switch over when you're demonstrating. Thank you all, first. That was great. I think the amount of questions really shows how much interest there is in the tool, and also that there is still a lot to learn. loolarge asked, is it possible to export point caches from animation made in Unreal? JEREMIAH: Point caches as in vertices? [INTERPOSING VOICES] JEREMIAH: Or just general transforms in space? HELGE: Do you mean like alembic, probably? Like, once you have the animation, can you take, I guess, the vertex positions and animate the-- export them to alembic? JEREMIAH: So I'm going to answer this in a couple of different ways. Control Rig right now does not deal with specific deformers, if that's part of the question. So I'm getting asked this question a couple of different ways. One, Control Rig isn't dealing with deformers or alembic caches, that type of thing. We're manipulating transforms in space, whether those are bones or something else. Due to the way that we set up Control Rig, you can pass a lot of information into Control Rig, including transforms. And so if the question is something around, can I feed in the positions of my VR controllers into a Blueprint to drive Control Rig with that, the answer is absolutely you can. If the question is can I feed in vertice positions and automatically place bones, the question is no, not at this point. HELGE: And also to the alembic thing, in case you were looking for doing the rigging and all this stuff in here and then exporting the actual vertix positions for some other use, like offline rendering, I don't know. I don't think we have alembic export right now. I know we have import plugins for it. But I don't think we have exports for out-- [INTERPOSING VOICES] HELGE: Yeah, I don't actually know. GREG: No, but if you wanted to just extract the data out, you could bake it to an animation sequence and then export that as an FBX. JEREMIAH: So overloaded question. I don't know if we answered it. VICTOR: There's going to be more of those. jordanariel04 asked, when using Control Rig with Sequencer, it overrides the Animation Blueprint. Is there a way around this? GREG: I'm guessing that they're talking about having the Animation Blueprint running with like authoring in some way in Sequencer. JEREMIAH: Yeah, so if you're animating in Sequencer, generally you're the one creating the animation and the poses. But if you want things to still be happening with the Animation Blueprints, you can add a post-process Anim BP onto your Skeletal Mesh. And that can allow you to do things like post drivers or adding in physics asset nodes, et cetera. So that gives you a lot of control to build up. But if you're talking about using Sequencer-- yeah, I think that's a good answer for now. I don't know if I directly answered the question. Looks like Helge might have more to add. HELGE: So basically you answered it correctly. So basically, when you use Sequencer on a Skeletal Mesh, the anim instance is overwritten by Sequencer to be a Sequencer anim instance. So anything you had on a Skeletal Mesh will be gone. However, the post-process approach is really good. That's the way that I would recommend doing it. So have Sequencer drive most of it and then have procedural animation coming in and an animation Blueprint stored in a post-process one. JEREMIAH: Yeah. And something cool about that, too-- we showed here just a bunch of Control Rigs doing all the work, a single Control Rig doing all the work. But in that type of layered approach, you can have an animation Control Rig animating your character that you are manipulating in Sequencer and in the Level Editor and making some sort of animation. And then you can have a post-process anim BP that has another Control Rig that does all the procedural stuff. So it could do like your pistons and maybe like moving the shoulder pads out of the way when you raise your arms. And so you can have multiple control rigs that serve different purposes and combine them all together using anim BPs and Sequencer together. VICTOR: All right. Let's move on. E_Frame asked, is the Sequencer window going to stay the main animation keyframe window for working with a Control Rig? JEREMIAH: Currently it is the main animation editor for working with Control Rig. That's all I can say about that. VICTOR: dcoletrainman asked, is there Python access to adding and connecting rig units within a Control Rig graph? JEREMIAH: Good question. Yes, there is. And it goes beyond that. You can use Python to not only connect your rig units-- and I said rig units, so someone's familiar with this. Nodes in Control Rig, by the way, are referred to as rig units. You can use Python to connect up, to create those nodes, to place them in your graph in a visually appealing way. You can also use it to create controls and bones in your rig hierarchy itself. So you're not limited to only building logic, but also to constructing the hierarchy that gets driven by that logic. And we are working on documentation right now for Python and Control Rig that is in the works. VICTOR: Cool. Maybe we'll do a stream on that someday. JEREMIAH: Look forward to it. VICTOR: Jason Osterday asked, what is the preferred process for duplicating execution stacks slash rigs to new meshes and characters? JEREMIAH: Can you ask that again? VICTOR: What is the preferred process for duplicating execution stacks slash rigs to new meshes and characters? JEREMIAH: There's a lot of different ways to do that. And just highlighting your controls and your graph and pasting it into another Control Rig works really well if you want to take chunks of logic. In fact, that works really well for copying and pasting your rig hierarchy. So if he wants the controls that are nested inside of a hierarchy and controls that are outside and pasting that between rig hierarchies, you could do that. You can even-- in fact, let me-- well, I don't need to demo. In a Control Rig, in that rig hierarchy, you can right click and say Refresh or Import. And that gives you the option to import an entire new skeleton or refresh your hierarchy if you changed your skeleton, like inserted new bones into your Control Rig so you don't have to reconstruct from scratch. So there's a lot of different options for you. And I think it depends on your case. So if you're iterating on a new rig, then I would use that refresh approach. If you're trying to create an entire new Control Rig, even just duplicating that Control Rig and importing in your new Skeletal Mesh and adjusting your control positions is probably the right approach. HELGE: Or what we've shown, which is that try to-- depending on the case. If you have, like, 15 different characters and they have completely different Skeletons, then what Jeremiah is suggesting is sort of trying to copy and paste as much as you can between them. If you do have 50 characters and they share the same Skeleton but they have different proportions, look at to using the setup graph and making it generic so you can use the actual same exact one on all the different characters. GREG: Right. And something I forgot to mention during the rig sharing demo was that if you-- especially for the craft that I had shown, that was on the mannequin. So technically speaking, if you're an indy studio or something like that that is using the mannequin skeleton as a reference, you could populate one Control Rig with that and then just have that with all of your skeleton as long as they're sharing the same names. It could be different skeletons. It could be the same skeleton, as long as they have the same root pelvis spine one, all of those bones they can all share. HELGE: Finally, I'll just say, for environments like Maya or Blender, people may be familiar with auto riggers and Python scripts that set up rigs that build bones, that do all this stuff. All the same pipeline typeish approaches could be deployed here, as well. Like, you have full Python reflection. You can create a new Control Rig, create a hierarchy, create all the nodes. So if you're looking into-- I have a show and I have 20 characters to rig, you might as well rig it one once regularly and then start putting in Python scripts, as well, the way that you might do it for my other environments. So same thing possible here. VICTOR: Emilche asked, is it possible to access variables in a Control Rig from an Editor Utility Widget, or would it be better to do that in C++? JEREMIAH: To access variables in your Control Rig. With-- Greg? GREG: You can. You would be able to. Hang on. I'm thinking on the spot here. Yes. If you were to pass it down as an object, yes, you would be able to do it. You can actually, with editor utility widgets, you can actually perhaps create a picker for your character, as well. So for studios that are used to having a bunch of characters and then they have pickers for similar characters, similar bipeds. You could also follow that same route with editor utility widgets. So for example, variables for IK/FK matching, perhaps, or turning on and off of control visibilities, et cetera. VICTOR: gilhacco asked-- let's see. We've covered this already. Let's see. TheGuyNUKER asked, are there any animation tools like tweeners planned for faster animating? JEREMIAH: We are actively working on improving the animation experience. And so I'd say look forward to hearing more from us about that later. I got to add one more thing. Not only is Python available directly in Control Rig, but it's also accessible Sequencer, along with editor utility widgets. So it is possible right now to write some tools that can give you some of that behavior. VICTOR: Black Fang asked, can this be used to retarget animations? Retarget Manager tends not to produce usable result, meaning we always have to go external software when we want to stock animations from the market. JEREMIAH: That is a good question. We've done tests with using the full body IK node, for example, for retargeting. There's a lot of different approaches here. As we saw with the rig sharing demo, that's kind of an example of retargeting. And you could apply more logic to it. Yep, that's how. VICTOR: M Homde asked, can this be integrated-- OK, so now we're getting into something we got a lot of questions around. So let me try to rephrase this in a general matter. A lot of people are asking in regards to combining physical animations and other ways to use collision in the scene to modify the character then the meshes dynamically rather than explicitly setting up IKs to look for the ground and other various objects. JEREMIAH: So there's a few different things you could do. So since Control Rig takes-- the Control Rig node takes an incoming pose, you can do physics-based actions before that modify the pose. So you would have-- in your anim Blueprints, you would have a rigid body node. And then you'd have your Control Rig node. You have that order of operations. So the rigid body could do whatever you'd like it to do to modify the pose that Control Rig can do. Or you can do things like creating an actor BP that has some sort of physics simulation that's outputting transforms. And those transforms can be fed into Control Rig to drive it with whatever method. So there's a couple of different ways to approach it. So you can build a really low res skeleton cage that has rigid bodies that you throw against the wall. And those rigid bodies are just feeding skeletal transforms into Control Rig to drive a higher risk something. I don't know if that exactly answer the question, but it approaches it from different angles. GREG: Yeah, I think the use case would be sort of applying a physical animation profile and using that injunction with Control Rig for procedural animations, as well. JEREMIAH: Yeah. You absolutely can, especially with Control Rig component as it is and our public variables. You're able to pass data in and then layering on anim BPs for procedural kind of clean up, however you want to handle that data, you can do it in multiple ways . VICTOR: Charlie_NC asked, what is the purpose of being able to include controls slash spaces as part of the IK chains? Could you give some usage examples? JEREMIAH: I'm going to pass this to Helge. HELGE: Yeah, I don't think I understand the question, sorry. JEREMIAH: So do you have another question-- [INTERPOSING VOICES] JEREMIAH: Was the question applying what's the use of having controls or spaces in part of the IKG? You can do a lot of clever things by moving controls based off of some other logic. In fact, I think we've shared some things around this before. But you can-- HELGE: I think I realize now what he's asking, maybe. Sorry for interrupting. Go ahead. JEREMIAH: So you can apply IK on controls themselves before animator ever interacts with it. Or you can-- and rather than using bones, if you don't want to use bones for whatever reason, you can just drive with controls. There's a lot of different ways that you can interact with the rig. And this isn't something that you have to do. It's something that you have the option to do. So we tried to create the system as open as possible and give it a lot of flexibility to how our nodes are designed. But I'll let Helge take another stab at this. HELGE: So basically, the way I look at it is, within the forward solve, it doesn't seem obvious that you might want to use an IK on controls, for example, or soft stuff like that. I think it's a pretty advanced case and you might have found a use for it. But it's not obvious. The cases where it's rather obvious is when you have other events, like the backward solve or the set of events. So if you're running something as part of setting up the rig, you might actually want to run IK ones to figure out where controls need to go. And you might want to do that on the controls themselves, and especially for the backward solve. You're trying to figure out where things are. Let that be IK or any of the other motion nodes that we have. Having the ability of not running them only in bones but on anything else can be really useful when you're setting up backwards, basically. That's one of the reasons why we changed this implementation. So you can always do everything to everything, basically. JEREMIAH: Yep. VICTOR: Finishing a message. All right. Scrolling back up the list. Jason Osterday asked, do you have interop plans to exchange rigs with Maya or other DCCs so that there's parity? Would you force Control Rig? JEREMIAH: That's a question we received a lot. I don't have an update on that right now. But it is something that's been asked and we're definitely aware of that request. VICTOR: maddiealso asked, is there a way to enable or disable parts of the Rig Graph at different LOD distances? JEREMIAH: There's not currently a way to enable and disable parts of the Control Rig graph. Well, I can think of ways. So one way is you feed in an LOD index into Control Rig and then use braching to enable and disable. So you could do it that way. But anim nodes, by default, have this LOD threshold. I think that's kind of what he's asking. So the LOD threshold will automatically enable or disable anim nodes. Control Rigs acting on a full hierarchy that it owns entirely doesn't quite have that same logic right now. That's something we can absolutely consider. But I would recommend passing in an LOD and controlling the behavior of that through branching in Control Rig for vertices. HELGE: Yup. GREG: Yup. JEREMIAH: Unanimously. VICTOR: Sergio G asked, can you talk a bit more about what you envision for consolidating nodes? Can there be an arm node, a canine hind leg node, a chicken leg node, et cetera, where the controls just appear? JEREMIAH: Probably not a chicken leg node, but possibly-- more serious answer, it's something that we know is needed for Control Rig is something that we've looked into. For 4.26, that's not something we have. But we definitely recognize the need. VICTOR: ARMRgarden asked, is it possible to add face bones for expression? JEREMIAH: You can add-- [INTERPOSING VOICES] VICTOR: There was a follow up question later on. Let me find that. JEREMIAH: We also demonstrated in the Meerkat how we have curves for expression. Those could just as easily have been bones, just like if you drive a finger, you can drive a jaw. VICTOR: Can you edit or add bone complexity in Engine? JEREMIAH: You cannot currently modify a character skeleton in Engine. But a Control Rig, you're able to create custom bones. Those custom bones are purely for calculating an output pose. So you can't use those for deformation, like skinning vertices to that. So if I'm understanding the question correctly, no, you cannot modify the skeleton itself in Engine. VICTOR: brimblashman asked, is there a way to make the viewport behave more like Maya slash Blender instead of the FPS slash walk mode when animating? JEREMIAH: That's kind of a higher level Engine question. I'm sure that we're always looking at different ways of interacting with the editor. As we get more and more into not just building levels but authoring full animations in the Engine, we're continuing to have conversations, discuss with our community how we can improve that experience. So that's an ongoing conversation and something we're actively looking into. VICTOR: There are some more controls. So you can hold right click to move in and out. JEREMIAH: Absolutely. And in fact, I have a top trick around that that I can talk about if I can share my screen again. VICTOR: Yeah, if we can get Jeremiah on the big screen. JEREMIAH: And all I'm going to do is drag in-- so all I did is I dragged in a Control Rig in my mannequin Control Rig. Here. Dragged it into my editor. VICTOR: Hang on, Jeremiah. You're not full screen yet. JEREMIAH: Listen to my voice. VICTOR: Houston, come in? Come in, Houston. Houston's not responding, guys. We're going down. JEREMIAH: Got a lot going on. VICTOR: Yeah, let's see. VICTOR: Liam, can we get Jeremiah full screen, please? JEREMIAH: That's my editor summed up. So let's see. VICTOR: Yeah, the quality. We did get you full screen literally that moment. JEREMIAH: Perfect. That's great. Well, it promises to be. So of course my internet hangs up right when I want it shown. But I will just talk over this and tell you what I was going to show. I can drag a Control Rig into my editor, which looks like this right now. And that'll automatically set up a level sequence on this. It'll automatically set up a level sequence in the control slot. But interacting with the editor, I also have some-- hey, it works. All right. Let's do this. I'm going to drag by my Control Rig in. It's automatically going to create a level sequence. So I'm going to start animating. And I have my rig in here. Top tips two and a half hours in. Now we're getting into the good stuff. When this opens, go into your animation pane. At the bottom, there's an animation drop down. And check Only Select Rig Controls. This is the best checkbox that you can check. And then make it so I can't select my environment anymore. I can only click on controls. So when you're animating, it's super helpful. Next, in your editor preferences, you can-- I'll pop it over here-- I believe you search for an arc. I can never remember the name of this. Arc ball rotates, so it's actually a look and feel. In level viewport port, there's enable arc ball rotate. And there is enable screen rotate. You also have this combined Translate and Rotate Widget , which I prefer not to turn this on. But these two are incredible. They make it so that as I click on these objects now I can rotate screen space or I can click in this middle and rotate dynamically my controls that way. I found this really helpful as I'm animating. It makes it a lot easier to animate a little more similar to how you're seeing in other DCC packages. VICTOR: Super helpful. All right, Cinematography Database asked, can we set morph targets in Control Rig, or is that better to do in the Animation Blueprint? JEREMIAH: You absolutely can. If you're available for that Meerkat demo, which I just closed, I actually was dialing on the jaw open and close through curves. So when you say morph target in kind of real speak, we're talking about curves. And so as I import curves for my skeleton into Control Rig, again, let me just open this up and show where we would do that. All right. I can go into Window, Curve Container. And I can right click and enforce curves from my mannequin. So let's just grab my mannequin here. And so I just have a Blend Orients on this guy. But if I had morph targets on my character, those would show up here. And in order to drive them, I just create a new set curve value. And I could drive my curves that way. So this just takes values 0 to 1. And as I mentioned before, you could do that with materials as well. VICTOR: Awesome. Joshua Cohen asked, I think the future of computer animation will involve machine learning slash AI for many things. Are there any plans to incorporate new feature sets utilizing those techniques in UE? JEREMIAH: I can't speak to all of UE. I can speak to Control Rig. That's not something we're actively developing right now. But we're always looking at new possibilities for making it easier to create rigs and author animation. So we haven't ruled it out. VICTOR: Mark Fitzpatrick asked, will there be a Maya rig export plugin that converts your rig to a Control Rig? Did I already ask that? JEREMIAH: That's similar to the, can I import my Control Rig into Maya question. And the answer still stands. It's a request we've had. It's something that we're aware of and we're putting some thought into. And to piggyback off of that, Helge kind of alluded to this when we were talking about Python. And it's something I've encouraged people to do. If you're already building a Maya rigging package, for example, if you create some sort of abstraction of those, then you can build Control Rig modules that mirror the Maya modules and use that same data to construct a Control Rig and construct a Maya rig or a Blender rig with that same data. So that's the path I'd recommend, at least for 4.26, that we're talking about here. VICTOR: AllAboutAnimation asked, as a rigger in Maya, what's the advantage and what would make me transfer from Maya to Control Rig? JEREMIAH: Yeah, that's a great question. I'll put on my little sales hat here. What I was talking about earlier with our initial Control Rig, that example-- I don't know if my screen is still being shared. But I'm just going to open up a map. One of the key advantages is being able to animate in context and iterate in the environment that you're working in. So if you're doing cinematics, linear content creation then you want to be able to animate in the environment with the right lighting and effects and everything. So in this example, I'm able to animate in my chair-- [INTERPOSING VOICES] VICTOR: Let's hang on. [INTERPOSING VOICES] VICTOR: Yeah, I don't have controls anymore. Houston, can we please-- JEREMIAH: It still stands. [INTERPOSING VOICES] VICTOR: You're full screen. JEREMIAH: OK. When we're looking at that Meerkat example, that entire terrain is built in the engine. And to be able to animate to that terrain is super important. You don't want to have to recreate that terrain, bring it into Maya, animate to that terrain, and then, oh, the designer tweaked it in the engine. Or the animator tweaked it in Maya, and then get this disparity. And also in things, again, with that Meerkat, which is a great example, it just includes things like fur adds those to the runtime elements, you'd have to duplicate that effort in your DCC. And it's easier to do things in one place. Now, that doesn't mean that our goal here is to remove Maya or bush builder or Blender from your pipeline. But we're trying to make it easier for you to iterate once you are in Engine. So if you want to just quickly clean up some animation or tweak an animation for a specific purpose-- maybe you want to do your aim directions in Engine just real quick based off of your animation prototype. You can do that. You can also-- we have lots of different ways to author animation, feeding in different vocab solutions, like a Vive or Xsens suit and drive your character directly. And you can bake that animation that you're feeding onto Control Rig or onto your skeleton back into Maya to iterate again. So Helge referenced this a little bit, of using Control Rig and using the Engine as a tool. It doesn't have to be your end all, be all solution and final pixels-to-screen with this animation. And Control Rig doesn't have to be your final rigging solution. But you can do some really cool clever things in there that can generate motion for you that you wouldn't be able to generate otherwise and iterate really quickly on those. All right. Toss my sales hat off. I didn't even use my screen for that. I just talked to the camera passionately. VICTOR: We looked at the table and chairs we've seen for the last, I don't know, six years. JEREMIAH: Anytime. VICTOR: inu_games asked, are there plans to add more coalition nodes to Control Rig? JEREMIAH: Collision nodes? Also, Enu Games, awesome stuff that you're sharing on Twitter. Love all of it. If by collision you mean the sphere trece, I think that's something that we're exploring. We wanted to provide an initial implementation. But we know that there's a lot more methods available in other areas of the Engine. So we've definitely called that out. But if you're talking about collision in other methods, or if you're speaking specifically about that node and the collision profiles available to you, that's also something that we recognized as a need and something that we're looking at expanding. VICTOR: Making sure I get some of the new questions here. aadtwitch01 asked, is Control Rig suitable slash ready for quadruped character animation? JEREMIAH: There is no limitation to the type of characters you create with it. We've already seen people create very cool quadrupeds with Control Rig. Why stop at four legs? You can do as many as you like. VICTOR: All right. You all good to keep going on for a little while? We have more good questions. GREG: Yeah, that's fine. VICTOR: All right. Just making sure everyone is OK. Karl Fredberg Sjöstrand asked, is it possible to resize the control gizmo in the preview with a transform gizmo? JEREMIAH: Good question. I think that was something that was called out and-- it's something that we definitely recognize. So the question, if I'm understanding correctly, is right now, in order to change the gizmo look itself-- as a matter of fact, you still see my-- you have to go into your gizmo transform here. I don't know if my screen is being shared. You have to go to your gizmo transform and Control Rig and type in values. VICTOR: I think we want to see this. Can we get Jeremiah full screen again? There we go. You're good. JEREMIAH: Well, that was perfect timing. It's like every time my screen gets shared-- HELGE: Bad luck. JEREMIAH: All right, well, anytime. Happy to help. VICTOR: We'll get back to that one. I think it's useful information, because if there are actually exposed variables for that, it would be cool to show them. We'll move on for now. We'll get back to that. And then there was a couple more questions. And you tackled this a little bit already in terms of using a live mocap shoot and pipe that data straight into a Control Rig. Do you have any examples of this or anything rather quick you could show during the stream now that we'd be able to cover? JEREMIAH: I don't have a good example of this right now. But to give a quick idea of how this would be done, Grant's example of this robot here is actually taking an external input of the actor position and driving an IK effector with it. So if you take that basic principle and expand upon it, you can take multiple inputs of IKs, head and arms and feet, and feed those into effector positions in Control Rig, or even our full body IK SL rig in Unreal 4.26 to drive a full character pose. HELGE: So it's also-- there's also-- I've just checked if it's shipped with 4.26. So there's also a plugin that is well experimental, which is called Live Link Control Rig, which exposes Live Link access directly within the Control Rig graph. So this is not something I would recommend for the general case. But if you want to experiment with streaming poses directly into a rig, you can do it that way. You can actually get some nodes, get the subject in question, and then pick the right bones. But it's quite manual and granular. But with looping now, you can actually build some pretty sophisticated small graphs that copy mocap pose onto your character or onto controls or onto something else and then iterate based on that. If it was me in production, I would probably make that a branch that you could-- in the rig, they can enable, disable. So that way you have part of the rig that can receive mocap or you can turn it off if you want to just animate on the rig. VICTOR: All right. Emilche asked, will there be any tutorials on how mapped elements works? JEREMIAH: I believe we're actively working on some documentation around the Control Rig component. So look for that coming. I don't have a date on it. But we're actively working on the documentation for that. VICTOR: Yeah, there was another question just came in. What's the earliest Engine version Control Rig supports? GREG: 4.20. JEREMIAH: 4.20-- well, probably 4.24 is the first I would recommend to use Control Rig. But the samples start at 4.25 and the latest is 4.26. They are not backward compatible, because we introduced pretty major paradigm shifts. [INTERPOSING VOICES] VICTOR: Yeah, it's been actively developed for a while. And it's only fairly recent that the tool is production-ready, right? JEREMIAH: It's actually currently not production ready. It was experimental at 4.25. But at 4.26 is changed to beta, which basically means that as we ship, we are not changing the core underlying structures. So we are maintaining backward compatibility and trying to keep things as stable and consistent as possible. A preface on that is Control Rig has been used actively in Fortnite for the last few years, is used in other games, as well, that have shipped. So we do our very best to keep it in a stable state. And although it doesn't quite have the production ready label, I highly recommend people dive in, look at it, and start using it to your heart's content. VICTOR: Inu_Games asked, can you access variables of a control rig used through Control Rig anim graph node like you access nodes of a Control Rig Blueprint component? JEREMIAH: Yes. And Greg demonstrated that on I think this robot demo. Is that right? GREG: Yes. I'm not sure if my screen-- JEREMIAH: So in order to do it, all you have to do in your Control Rig graph is to press a little eye next to your variables to make it public. And then in your Control Rig node, anim node, in your anim Blueprint, you're going to check the pin-- the use pin next to the name of the attributes or the variables. If we're able to share Greg's screen, he could show that real quick. VICTOR: Yeah. We're full screen, Greg. GREG: OK, cool. So yeah, I have some variables that I've exposed with the eye icon. There's additional settings that you could do for your variables. In my anim BP, when I have this Control Rig node, I can just turn on this use pin. And this is also active in time. So if I created a new Boolean variable and turned that on, then compiled, and then I go to the anim BP, I can automatically have that exposed and available to me. VICTOR: Awesome. Inu_Games has another question. Is there a way to show Control Rig debug widgets, like pull vectors, et cetera, in the level? JEREMIAH: Not debug widgets, as in the visual debug, currently, though that is definitely a common ask and something that we're working on. But there are other ways to-- I'm assuming at this point we're talking about runtime, so when we're in pi. I'm thinking on the fly. So while I'm thinking, we can ask another question. VICTOR: For sure. Also another question from Inu_Games. Are there plans to integrate Control Rig and Anim Insights? JEREMIAH: It's a good question. Anim Insights is, for people who don't know, a new debugging framework available, I think, in 4.25. Anim Insights right now dives into Anim Blueprints, I think degenerate poses, along with a lot of our other systems. We don't currently have it integrated with Control Rig. But the general-- how do I say? Debugging in general in Control Rig is something that we want to make a lot easier. And we're looking at a bunch of different ways to do that. But nonanswer. VICTOR: Cinematography Database asked, is there a Live Link node in Control Rig? I'm doing that in anim Blueprint still right now. JEREMIAH: I think Helge just answered that with the-- it's not production ready. I think it's an experimental plugin that's called Control Rig Lifelink available for people to get or to-- HELGE: If you enable the plugin, the nodes will start showing up. And then you have the same sort of introspection. It's beginning subject, getting the poses and everything out that you have accessible to you and a node. GREG: There's a lot of different ways that you can pass Live Link data down to-- or just any data, whether that's control or Live Link or any additional inputs down to Control Rig, whether that is inside Control Rig, in a BP, or to a Control Rig component. For editor use, I would recommend going more towards the Control Rig component route, because you have a little bit more control that way. But explore all the ways that are possible for you. VICTOR: Can you convert-- sorry. Beneviolant asked, can you convert-- sorry. Can you convert your baked Control Rig animation into an animation sequence? JEREMIAH: Yes. Absolutely. HELGE: Yes. JEREMIAH: So I didn't demonstrate that this time, since I demonstrated that in our previous stream. VICTOR: We can just go ahead and drop the link then. JEREMIAH: Great. VICTOR: Because we got a couple more questions to go through. Make sure to get that in chat. muchashca asked, are in Engine weight painting tools something the team is planning in future updates? JEREMIAH: For this team, we're focused on Control Rig primarily modifying transforms. A deformation in general is something that is a common request and something that we're always looking at. VICTOR: Got to make sure I actually grab that link and paste it in the chat. There we go. And on YouTube. I'm not going to forget about you all. All right. Now we're getting to the questions that are really exciting. Sathish Koththolla asked, will we get any default facial rigs from U4 for just a UE4 character, just like the skeleton? I would point to the Live Link app documentation and how you can go ahead and use-- [INTERPOSING VOICES] VICTOR: Yeah, how you can go ahead and use kite boy. Kite boy does come with a facial rig. I think that-- JEREMIAH: That's our current best that we have available. VICTOR: Andre Wells asked, will Control Rigs work with USD. The USD file format, I assume. JEREMIAH: So that's very similar to the question about exporting or importing control rigs through-- into Maya. And I'm assuming that that would be the expectation. I don't think that's something that we've tested-- well, we haven't used USD on Control Rigs and we haven't brought it out of the Engine. So if that was the expectation around it, then the answer is no. Kind of a rough answer, but-- VICTOR: Better than none, I guess. Garrett Blaine asked, is it possible to drive groom splines with Control Rig? JEREMIAH: Groom splines. Groom splines right now are attached to a Skeletal Mesh to a location on a Skinned Mesh. So I think that falls a little bit under the deformation side. And currently we're not driving deformation in itself with Control Rig. That's an interesting thought. VICTOR: Yeah. Let's go back to the-- you want to show off how you can resize the control gizmo-- [INTERPOSING VOICES] JEREMIAH: Am I ready for that? VICTOR: Are you ready for that? JEREMIAH: I'm not. But I will talk about a node that exists. [INTERPOSING VOICES] VICTOR: See if we can get Greg back. Oh, there he is. Oh, sorry. It was Helge that dropped. He did mention his internet was-- JEREMIAH: Sure. VICTOR: --iffy. Houston, Jeremiah full screen, please. Now I'm going to have to keep referring to them as Houston. JEREMIAH: It's official. VICTOR: Just the way it makes me feel when I'm telling someone else to do stuff online. Cool. Just a moment. That is Greg's. There we go. You're good, Jeremiah. JEREMIAH: OK. So I'm not quite prepared to set this up fully right now, because there is a little set up involved. If you go into actors, you can search for Control Display Actor. And Control Display Actor gives you the ability to draw the controls themselves in a Py session. So again, I'm not prepared to actually set it all up right now. But essentially what you would do is you would choose your actor to track. You can populate this in your Level Sequence and Blueprint. Or you can do it manually. And the Control Rig class, too, follows. So in this case, it would be-- I was going to do our slope warping Control Rig. But since my actor has spawned at runtime, I don't want to write the Blueprint code to [INAUDIBLE] this. And then you can drive whether it's visible or not through this actor hidden in game. One key thing to note with this is, if you want it to be overlaid on your actor, then you probably want this to be parented under your actor. So I'm just going to fuss around and see if I can do this, which I [INAUDIBLE]. Let's see if it's going to get me this guy. There we are. And I don't even know where this is. Go ahead and zero this out. I don't quite think this is going to work, just with this set up. But if I were to set this up correctly, I would populate this actor to track at runtime if my character doesn't exist. And in fact, this might work now that I'm thinking about it. I'm going to go to Greg's runtime demo. Please don't crash. It's like only when my screen is being shared does [INAUDIBLE]. So since these are placed in the world, I should be able to do it. So I'm just going to drag this in. I'm going to drag it under robot actor. I'm going to zero it out so that I'm in the same location. Then I'm going to take this and track robot our first one. And this is [INAUDIBLE]. See if this works. I don't know what controls they actually have in here. So I don't know if we're actually going to see anything. Yeah, I think we're driving bones, primarily. So that's my awesome demo of how theoretically you could see controls. But what we would expect to see if there are full controls on there is you'd see the controls moving around in [INAUDIBLE]. And again, there is an ask regularly that we add in maybe a command line or something that makes sense. Yeah, so there's not much of a control. I can try and make this guy bigger. Let me stop there. While I'm doing this, I'm actually manipulating the gizmo, which there was a question around that earlier. I think right now, if I may inflate this setup mode, it's actually going to manipulate the initial transform or the offset. HELGE: There isn't a way to do that right now. But that's all you get. You currently have to go into the Gizmo in the Details panel. JEREMIAH: So what you could do is you could resize copy and paste into your gizmo. Go back. All right. [INTERPOSING VOICES] JEREMIAH: 10? HELGE: Sure. JEREMIAH: Let this play again and see if I get anything. I don't. Well, that's as far as I'm going to debug-- VICTOR: Yes. We will try to tackle that afterwards. I have had this happen before where the guest goes offline right at the moment and is like, oh, I know how to do it. If that happens, Jeremiah, feel free to jump into the forum announcement post for the livestream. That's generally where the conversation happens once we are no longer live. Please make sure you check that out and you can continue to ask questions and discuss topics related to today's topic. I have another question from Cinematography Database. And I don't know if this is going to be the case, but can you do a quick overview of inversion logic for pole vector, for example, elbow. JEREMIAH: Yeah, there's a couple of ways to do this. So since you already have the pose itself-- and let's, in this case, pretend that the animated pose is planar. So you don't have a twist along one of the limbs of the arm. There's a lot of different ways to do this. You can do something very basic, like project directly off of the elbow joint a couple of units, or even have the control set to the position of the elbow. And in that case, the control will always be relative and on the plane of your basic IK. It could also do more complex logic, like calculate the midpoint between your shoulder and your wrist and then project a point from the midpoint through your elbow and stay along the plane. There's a couple of different ways. But when I do something really quick and dirty, I essentially attach it to my midbone, my elbow. And I offset it by a couple of units along x, usually-- I don't know if my arm is visible. But as if I had a spike sticking off the back of my elbow and I just attach my patrol 20 units off. So that would be-- if we're talking in the nodes, it would be get the transform for my-- or get the position for my elbow bone. Add 20 units to x and feed the results into my elbow control. VICTOR: Thank you, Jeremiah. With that I'm going to-- we're almost at a hard cutoff, 5:00 PM Eastern time here. But I did want to ask-- Toekneemonsterb asked, how can we replicate the annoying cycle check errors from Maya in Control Rig? JEREMIAH: How can we replicate it? HELGE: You can't. I'm sorry. I mean, there's a lot of things that are not quite done, it looks like. But we got the cycle stuff under control. That's for sure. VICTOR: All right. And with that said, I want to thank you all for coming on and sticking around for the long Q&A. I will make sure to send you all the questions that we received in case there were any that you thought were good that we didn't ask today. Beware, it's a long list. But really appreciate it. Chat, please give it up for our guests today. It's been a pleasure having you on the show. It's very exciting to see the future developments of sort of animating an Engine. The closer we get to one tool rules them all sort of mentality, less skipping between different DCCs and Unreal, it's an exciting time to work with the tools. Is there anything you all would like to leave chat with before we sign off today? JEREMIAH: Thanks so much for joining us for this whole thing. It was a long stream and we had a lot to share with you. Really exciting to share it. And thanks, Victor, for the opportunity. VICTOR: For sure. Any time. You have my email address. [INTERPOSING VOICES] JEREMIAH: --behind the scenes. HELGE: Thank you for having me. VICTOR: Cool. With that said, next week, we are going to cover the Asset Manager. Ben Siegler's coming on to do a pretty good explanation for us of how to use it, what it's used for, and the mentality behind it. Make sure you don't miss that. If you are excited about how you can optimize the use of data in your projects, do want to go ahead and mention, as well, that if you are streaming on Twitch any kind of Unreal Engine content, make sure that you use the Unreal Engine tag so that we can follow along, check you out. And if you are streaming during the day of our stream, we might even go ahead and raid you, which I think we might be ready to set up to do. I saw some recommendation earlier, so we might go ahead and do that. If you're new to Unreal Engine and game development in general, make sure you check out unrealengine.com. You can download the Engine for free. If you already have the Epic Games launcher installed, you can just head over to the Unreal Engine tab, click it. Download latest version, 4.26.1, which we released yesterday. Yep? No? Two days ago? I have no idea. It was one or two days ago. Right now at times it feels like, time, what is it? I don't really know? [DOG BARKING] Hey! And with that, my dog really needs to walk. So I'm going to say goodbye for now. We will see you all again next week. Take care everyone. JEREMIAH: Bye, everybody.
Info
Channel: Unreal Engine
Views: 165,448
Rating: undefined out of 5
Keywords: Unreal Engine, Epic Games, UE4, Unreal, Game Engine, Game Dev, Game Development
Id: UyCziUcnqxM
Channel Id: undefined
Length: 181min 31sec (10891 seconds)
Published: Thu Feb 04 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.