Paragon Feature Examples: AnimDynamics | Feature Highlight | Unreal Engine

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
>>Alex: Hey everybody, welcome to the Unreal Engine livestream. I'm Alexander Paschall and joining me today is Charles and Benn. Ben via Skype. Of course. Today we're going to be talking about Paragon; its Anim Dynamics and its physics around the animations, I assume. >>Charles: Yeah, it's basically a lower end, cheaper simulation system for core doing physics and dangly bits and stuff like that. >>Alex: Yeah. So that's going to be pretty neat. And we have a couple of items coming up. First, I'm going to steal this mouse from you and over onto the main screen, we'll go through the news. First up 4.11 preview three has been released and is now available on the launcher. And you can pick that up from the Epic Games launcher. Pretty quick, pretty easy. Please do try it out. Give us feedback. This one does include new features and not just fixes. We want you to kind of try those out. The new features are Metal on Mac, Anim Dynamics, which is what we're showing off today. Skeletal Control for Animation Blueprints and Particle DOF. So, it's actually kind of cool that we're showing it off and it's what you can actually try out. So next, right. And also, on forums is Stephen Ellis has once again, compiled a complete list of all of the new stuff that is in and also has a list of known issues which you can locate there. So please just let us know. I only have two pieces of news today and the second one is Unreal Engine at VRLA Winter Expo. So, we're going to be sending over Ray Davis and Nick Whiting to VRLA and they're going to be doing a couple of talks there, but there was also going to be a Bullet Train display set up so you can try Bullet Train if you haven't yet. And it's pretty exciting. So, I'm going to have to recommend you do. Yeah, there we go. The actual talks and panels, we have Interaction and Motion Controllers with Nick and Active VR: Enabling First-Person Shooters and Exploration in VR with Ray. And so, make sure to check those out. If you're going, they're going to be really good talks. Okay. Community spotlight. Started with the wrong one. My bad. First things first is there's, this is actually something you'll notice by the date. It's been around for a while and I noticed it because someone pumped the thread and I just hadn't noticed this before and it's a really great transportation effect in VR. What this does and what it's meant to accomplish is it allows you to transport your player without kind of throwing them off from, just directly teleporting them. And what it does is it kind of draws a line across, burns into another view, but the thing is it's completely described, broken down, and everything about how it works is shown. The author is also asking for people to come help improve stuff. So, if you are working on a VR title and you're curious about how should I move my player, check out the experimental stereo camera rig. It's really interesting for that. But definitely the author admits there are a couple of minor issues with camera work and all that when you're transitioning from one camera to the other. And Oh, my goodness, my computer just started working. Didn't say it earlier, but my computer was actually not working. So. Very cool. Thank you Opamp, by the way, for that. Next, C++ Camera Controlled Turrets. This is a new a new tutorial that came onto the Wiki and I love seeing a good C++ tutorial with tons of details, nice step by step instructions and an explanation of why you're doing the things you're doing. Not just follow what I'm saying. And there's a few Meshes that are included so you can get some free Meshes off this guy too. You'll want to see that one if the thing that you're showing off as a spaceship. So, if you're doing spaceship stuff, this is probably right up your alley and you're going to want to check that one out. C++ Camera Controlled Turrets. Next, Procedural Trees by RyanGadz. Now, if you're on Twitter, you probably saw the vine that he made of this, and also if you watched the last livestream with Ryan Brooks on it, where he showed off this amazing system of foliage for Paragon. This was inspired by that. It's a kind of root system that latches itself around Meshes and collision. And if you're wanting something like that, he's contemplating either giving it out or putting on the Marketplace. I'd suggest checking that one out and talking to him and seeing if you can get any inspiration from that too. Finally, this one actually came in kind of last minute. I was hanging out on Unreal Slackers like I do and Franbo pops in and says, "Hey, we have this really cool VR experience we've worked on. It's getting featured in some places. Maybe you want to take a look." We have the video; it's called The Caretaker and it's really inspired by The Shining. It's really cool. I'll just let it play itself. There we go. Yeah. So, dark, moody kind of eighties, seventies feel to it with all the architecture set up. So, if you're into Stephen King, that's all for you, right there. Alright, that's- Oh my gosh. I actually almost forgot to do something and that would've been really bad. I'm sorry. I have to, can you type in something for me to? Can you type in answers Unreal Engine? I have to go to the AnswerHub. So, our AnswerHub winners, and I should have done this first. I apologize for that. Our AnswerHub contributors are TTaM, cancel, and Tercio. TTaM and cancel, you guys are repeat winners, but Tercio will be receiving a new badge because I don't think that Tercio has ever won one. So good luck. Good work. Not luck. Good work guys. Alrighty. That's all that we have for community today. So, I want to just hand it over to you and drive and show us what you got here. A new Paragon Character and all the physics around it, right? >>Charles: Yeah. We're actually - Ben's going to walk through the basics of what we're doing and then I'll talk about some of the content and how we created it. >>Benn: Yeah. We started looking at Characters for Paragon. If you've watched the previous videos about rendering animation, you know we're going for a high-end look. We need to try and find what's next gen for our Characters. And of course, dynamics on Characters, things that flap around flappy bits, hair, packs, wires, plates, sprays, that's jewelry, those kinds of things. They can have a nice touch if they start moving around and they react to the Character. We tried our normal physics solution, which is the PhysX Engine, which could perform everything that we needed to do. But we found that it wasn't quite - it was overkill for the things we wanted to do. There was a lot of overhead for scene set up, for broad phase, narrow phase, collision physics, and contact. All this stuff that we didn't really need, but we're spending time on. So, we came to the idea of writing our own small, simple solver that allowed us to put lots of procedural stuff on all of our Characters without taking an awful lot of animation time or taking a huge amount of our runtime. It was quite performant. As I mentioned, it can be used for loads of different things. It's a very general solution for anything that has to move around or flap as the Character moves around. So yeah, that's the basics of it. I think Charles is going to show it in action. >>Charles: We're going to show you a little bit on Feng Mao, one of the new Characters here. >>Alex: I think they just started showing off those videos of Feng Mao and Gadget in the middle lane. >>Charles: Yes, they just released a new game play video. >>Alex: Very cool. >>Charles: Anyway, when we saw this Character, he was a very big inspiration for doing this tool because there's a lot of different things that are moving on him. A lot of unique type of stuff that we could do with the Physics Asset and Editor and stuff, but it just wasn't quite going to be cheap enough or efficient enough. If you take a look at this guy, you'll notice he's got this chain out here that's on the end of a big weapon that has to swing and move. He's got a ponytail. I'm getting close to his head here. He's also got these two ponytails on his ears, not ponytails, but earrings with dangly bits on them. >>Alex: I assumed those were his sideburns actually. >>Charles: Yeah. And then he's got these bracelets that we want to have a little movement. And then down here on his legs, you can see, he's got a large swatch of cloth in the front and another one in the back. But the, it gets more complicated on the back and sides here because this piece of cloth down here is attached to a large armor plate that's got to be hinged somewhere up in this area. And on the sides, again, you've got these shield pads here, this large one here and a large one here that are connected to each other. And then these two straps that go over top of that, that need to also move independently from up here. So, it starts to get very complicated very quick. And we wanted to make sure that we could handle all that. So, the Anim Dynamics allowed us to get there. And I'll show you a few examples of some of the different areas. But first, I'll load this guy up and run it so you can kind of see him moving, kind of see what the end results going to be. This is him just standing in his idle. You can see that everything's got a little bit of movement to it, but it's pretty basic right now. So, we started him off running can see starts to get some of these parts moving and you can see where we're getting this overlapping animation and movement specifically with these little straps; these red straps that hang off of the shoulder, sorry, the shield pads on the hips. The cloth up here is actually being done - This cloth on the back is actually being done with APEX cloth. Everything else is Anim Dynamics. It's 100% Anim Dynamics minus that piece of cloth. The chain, we have two different types of Anim Dynamics. We have the straight regular single bone Anim Dynamics and then we have a chain Anim Dynamics. The single bone, Benn will talk about this a little bit more after I'm done showing some of the content. But the single bone is much more optimized, cheaper, it doesn't have quite as complicated of a calculation on and the iteration on it is quite a bit lower. And then the chain ones, because it has to communicate up and down the chain, it becomes a little bit more expensive. So, you end up with a more expensive, but you can get a better look overall. So, the chain on his weapon there is using a chain, everything else is using single bone. Then can do some, we've got some other animations here. We can play a quick melee so you can see how well it holds up during a melee. >>Alex: Oh wow. >>Charles: Yeah, it works. It's working out pretty good. We're pretty happy with the results. So now let's go into the Editor here and look at it a little bit. This is his Anim Blueprint. We have quite a bit of - this is all Anim Dynamics. So, everything here is all Anim Dynamic. So, you can see this guy right here is the chain. Everything else is a single bone. So, I'll just walk through a couple of them and talk about some of the different processes I did and, and tricks that I pulled to get some of the effects you're seeing in there. So, the first one we'll talk about just quick are these shield pads. The shield pad's right here, you can see the skeleton. His thigh bone is here and just at first glance, hooking up these shield pads and getting them to move, I could get them to swing, but they weren't really taking movement from the leg because we didn't want to make the animators have to go and hand key all of that and have them all moving out because we wanted the simulation to just kind of do it for us. So, the first trick we went with on that was a using a driven bone, which is another Skel Controller. We've got this driven bone here. And what the driven bones is doing is it's just taking the rotate Y of thigh and retargeting that over onto the rotate Y of the shield pad. I made sure that the bones were aligned so that they had the same directional movement so that when this moved out on the Y, the shield pad moves out on the Y. I just did a simple driven bone to drive one-to-one based off of their own individual local pivots. Then the shield pad, here is Anim Dynamics node. You can get to look at it. It's got some previous settings up here and the initial setup, the constraints setup, we can apply wind to it, which is really cool and that's a great feature for if you want Anim Dynamics on something, but you want them to have a little extra movement. And then there's some planar limits and some other settings. So, this guy here on the Y, I don't want him to rotate at all in the positive. So, I've just got him going on a little about -20 on the Y. And then I made sure that that is after the driven bone node in the tree. And what that allows it is a means that this is going to drive it on the Y and that's going to give it some movement. And then this is going to allow it to simulate on top of that. So, when the leg goes out, the pad's going to go out but when the pad hits it's - when the leg comes back in, the pads going have a little momentum, so it's going to keep moving and it's going to flop. It's going to make and give it a look like it's actually moving and being pushed by the leg. That's one trick we did. Really quick before I - I'm sorry, I'm not on the right one. This is the right one. Yeah. So, this is the right-side bone here and this is the right shield pads. So, these are the top and bottom shield pads. You'll notice, I'll just kind of do a little quick overview of how the Anim Dynamics work before I go any further on some of the techniques. First off, the first thing you're going to set in here, it's got some Preview you want to turn on Preview Live that's going to allow you to actually see what's going on in here. It's got some checkboxes for you to turn on linear limits, angular limits, and the planar limits and collision spheres. So that's just display stuff up there. The real meat of it is right here in this area and this area down here. So just in the most basic sense you're going to set up Box Extents. What the Box Extents is going to do is it's going to create a volume shape for the box. Now this isn't actually something you want, it's kind of different from PhysX where in PHAT you would go in and you would create that box to be the shape of your object because it's going to use collision. Well this isn't using collision. What this is doing is actually creating a shape to move and use inertia the way you would want it to. For example, if you want something that's going to have a very slow lumbering back and forth swing you, might want to create it very tall and kind of fat, whereas something that you want to have a little bit more back and forth movement, you might want to create more like this so it's going to settle down and hang like that, but it's not going to just flap around a lot, but it's also going to stabilize itself. A big flat box like this usually works for most things. I found a few cases where I've made a long skinny box. It kind of all depends on what you want. Then the local joint offset, what that's going to do is that's going to offset it from its center pivot. So, if you put the pivot in the center of the thing and you just zero this out and you play it, it's not going to do anything because there's no offset. It doesn't know where to pivot from. Giving this a value of 10 and then giving it a -10 means that it's going to basically put the top of the box right at the top of the joint which means now it's going to pivot from that location at the top of the box. Now it's going to swing based off that. If I were to give this a much higher limit, it would move the box down; the box would be down here and the pivot would be up here. So, it would have a much bigger, broader swing. You would swing a lot easier. You can balance these settings here to get the movement you want. We can maybe show that in a second here. And you've got springs, you've got spring values. You can affect the gravity. Again, like I said, you can put wind on it. The wind is going to push it based off of Wind Nodes in the scene. So, if you create a Directional Wind Generator and place it in your scene, it'll affect it same way it would affect cloth or anything else. Down here on the Constraint, the Linear Types and the Angular Constraint Type. There's a couple of different settings here. I pretty much only use Limited and Angular there. I haven't found any need for any of the other settings. Benn can explain that if he gets into more detail on what exactly they do. And then the Angular Axis or the, sorry, the Linear Axes and the Angular Axes here, the limits, those are basically actually allowing you to control the movement back and forth. If you set the values to zero, that's just off, that means it's not going to do anything. As soon as you give it a value, it automatically starts moving. So, there's no extra checkbox or anything there. Same with the rotation. On something like this, we give it a -20, you have a little bit of movement on some of the other axes, so it isn't completely static. And zero on this here and now it's going to be locked into place and for the most part only moving on this axis back and forth, and it's going to stop when it hits that so that that way it doesn't swing into the leg. And then the Planar Limits we can get into a little bit later. So that's pretty much the settings on the node. Let's see this guy here, let's actually- Let's just drop a Jog Forward animation in here so we can see a little bit of movement. That gives us a little bit of movement in here we can play with. So now you see how it's swinging back and forth. It's getting the majority of its movement from the leg, but it gets a little bit extra bounce from the leg when it comes up top. Especially on these highlights, you really see it. They a child of that shield pad that's moving back and forth so they get that movement initially. And then again, I did the same thing here where I set their limits to be zero and -20 on that axis so that they can't go into the pad. And that gives them a pretty decent amount of movement. It's pretty good. Now another one of the tricks we pulled. This guy here, we actually did go in because it made more sense for this one to hand animate it. This one here was looking pretty static. It wasn't getting much movement cause all of the movements on this are local. They don't take world space movements. That's an optimization to help make it cheaper. So, if there's no movement in the animation, there's not going to be movement in the Skel Control. For this one, we went in and I actually took the bone that is being simulated and added a little bit of hand keyed animation to its run so that it could get a little bit of bounce on it. That kind of drives it when it hits the bottom here, it kind of pushes it up. And let's see the chain, the last one we'll talk about here is the chain. That's this one. That one was interesting issue. This one, chains because like we talked about earlier, they are a little more expensive because they are actually- check this checkbox right here it makes it a chain. They’re actually calculating up and down the hierarchy to give you a better result. But as a result, they are more expensive. So, we didn't want to do too many bones in it, so, three was a good number. So, this is, even though it's got nine links in the chain, we actually went in and I rigged this to have only three bones and then were smooth skinning it between so that it gives it a little bit of flex to it. But then what we're doing is setting up just a straight chain and again, it's the same type of thing. You can give it different looks and different effects by changing the size of these things. For example, this, if you take these and set it to like double everything. 100. 1600. Compile that. You can see that they're much bigger, but now they're really big so they don't really get much movement. They pretty much stabilize out and they hold themselves steady. >>Alex: So, it becomes looser as it becomes- >>Charles: Yeah, the smaller the- It's like anything. In reality, if you take a large object, it's not going to swing as much because it's size and mass is holding it down. >>Alex: You want to make it go everywhere? >>Charles: Yeah, if you make it go everywhere, you can go like 10, set this to five so that we're not too crazy. Compile that. Now it's going to be much more floppy than before, >>Alex: I can see what you call it flappy. >>Charles: That's kind of how the chain was. Let's get back to where it was. So anyway, it's kind of a balancing act to figure out where you want those settings to be and you can make it look pretty good. >>Alex: Is it three collisions? >>Charles: It's three boxes. Three different links in the chain. You could add more joints. It just, it's more expensive. It's a matter of- it's a balancing act of performance at that point. One more that I did here is to give you some examples of a couple of different types of movements. You can see the bracelets here kind of bouncing around jingling around. There's three individual bracelets there. So, to do those are very similar. There's really not a lot different to them except- I can find them, they're right here. So, the big difference with these is on these, you can see they have a linear motion to them. So, on them, I've given them a very small amount of movement on the joint offset here so that they're not going to rotate as much. They're only going to move mostly. And then down here I gave them a small range of movement and a small range of rotational movement or a large range of rotation actually, but because they're limited here, they're not going to swing that much within that before something pushes them around. And then basically it's just using translations. A rotation is not a whole lot simpler, but I'm using the springs here specifically on this one. Kind of a weak translational spring. So, they have a lot of translation movement and then a very strong angular spring to keep them from rotating too much. But that's just nothing special about the node other than it's just a few different settings to get a completely different look. >>Benn: You can get the same on them on the shoulder as well, didn't you? With the cloth? >>Charles: Yes, exactly. This, this bouncing shoulder here is a similar type of thing. That's another piece which- This is what you can use here. What I did here, we've actually used on several Characters now. I'm using it to simulate cloth in areas like this or also muscles. You can use it to get a muscle look and through something like that, I'm kind of making just a really large box depending on the movement I want. Sometimes I make it narrow. Sometimes I make it an actual box instead of more rectangular like this one is. But there are just a couple of different of those. And the real trick to using these is give the dynamic a lot of movement, let it move, let it bounce around like crazy. And then you go in and in Maya or Max or wherever you’re painting your skin weights, go in and skin it really weak. Just give it a, this is like maybe, I think probably the highest influence that this has on anything is like maybe 0.25 to 0.3. So it's a very weak amount of movements so that even though you're getting a ton of movement in there, the movement that you get from the actual simulation or from the joint is minimalized so that it feels like an actual bouncing around piece of cloth and it doesn't like tear it all around and make it crazy. It makes it a lot easier to balance the dynamics using something like that. That probably covers most of them as far as Anim Dynamics go. >>Benn: I think that's most of the different types that we used on this Character. >>Charles: Yeah. >>Benn: I can run over some more of the technical details about this. As you can see from it, it's a Rigid Body simulation. We use these boxes to get the inertia for the object and move it around. We don't handle any complicated collision again for- As I was saying before from the general solutions that was an expensive process that we really didn't need for this kind of motion. Each of the bodies has an order integration for its movement and an archaea approximation for orientation. Just standard Rigid Body movement. The boxes are the only shape that we allow and the reason that we have boxes is as Charles has been showing off, you can approximate a large inertia quite easily with a box. It's maybe not the most intuitive to set up when you see this huge box that's affecting a tiny bit of cloth on a Character’s shoulder, but it does help to explain the characteristics of how an object moves and all the inertia comes off of the box. In the future, we may be able to look at different objects for inertia, but boxes kind of solve all the problems that we've had so far. The actual constraints that we use- For linear constraints you can either lock them or allow them to move so you have a prismatic or a locked constraint. They're pretty straight forward. For angular we have a couple of different types. We can have a full free cone joint. We aren't going to find a huge amount of uses for those. They allow the corn to rotate along all three principal axes and twists. The version that we use most of the time, I think we use it all the time is the angular version, which allows rotation on two principal axes and locks the twist movement. You can get more things like hinges, ball and socket joints. The good thing about those as well is you can get different amounts of rotation per axis, which with the cone you have a single angle and it will move in a cone of that angle. What else do we have with these? We have Planar Constraints; Planar Constraints allow us to stop an object from violating a planner relationship. If you have something like a piece of metal or an object that can't pass to another, the object is barely [inaudible] but you can define a plane and just say, okay, don't cross this plane and it won't move through that at all. Do we have any of those on this Character, Charles? >>Alex: Is that how those red ribbons are working across the middle of them? >>Charles: No, I do not- This Character actually doesn't have any planar constraints set up on him. I could turn them on quick kind of show you just how they work, but getting it lined up and everything would be >>Benn: Visualization is probably enough just so we can see what it looks like. >>Charles: We'll just grab on the shoulders and turn on, so let’s turn on Show Planar Constraints and Show Collision and then down here if we add a Constraint. The bone that’s used is pelvis. And we'll just leave all the values at the defaults. Compile that. Now we've got a Planar Constraint right there that'll block it's movement. >>Benn: Yeah. So, you see the- It looks a little bit strange but that plane is a small part of an infinite plane. And at the moment, the way that's set up, it's set up to make sure that the center of mass of that body does not cross that plane. It will always stay on the side of that blue arrow where it points to, which is handy in this case, the way it's set up now. If you had something that was dangling near to a Character's feet and they were always on a relatively flat surface, you could say, okay, don't go past this area. And then you've got a really cheap round plane set up and you could do some pretty cool stuff with it. But that's the limit of the collision style things that we have. Again, just to make sure this is a super simple thing. We don't want, if we want really complicated physics, we have the Physics Assets. This is sort of as far as you'd like to go with this just to make sure that we don't get too many really horrendous intersections. You can see there, the way that that's set up now that box has been pulled way above where it should be. So, you can see there's a little bit of a deformation of the Mesh. >>Charles: And this blue arrow here is showing you the direction that the plane collides with. If I were to flip it or rotate it 180 degrees, it would not be pushing it anymore because the collision is that direction and the object to starting below it. So, it wouldn't actually be affecting it in that way. >>Benn: Yeah, you can do some, some really cool things. Mainly it's a ground plan. So, the intersection tests, but I'm sure there's many things that we haven't used them for that they can be used for. These can all be still be driven from bones. So yeah, if you have a moving bone and you want to, to, to define that plane, that can be done as well. And as Charles was mentioning before about the chains being more expensive, the way that we actually resolve these forces, the body is only propagating that force in one direction. With an integrative system, when you have things that are connected, forces are supposed to go backwards and forwards and you have to kind of keep, keep processing that data again and again and again, as many times as you can afford to make sure that it gets close, it converges to the solution to that problem. If you want to do it in one direction, you make sure the convergence doesn't have to happen. You can go straight to the right answer. It's not always a hundred percent accurate. The long chains you need this kind of crosstalk backwards and forwards between the bodies. You need the either force and the inertia to move up and down that chain. So, when you turn that on, you have an option for the amount of iterations you perform on the chain. If you're using a really long chain, 10, 20 things long. Maybe it's going to get a little bit crazy. It might stretch, it might look fantastic, but if you have the computation time to spare, you can switch the iteration counts up and you can solve that chain. So that's why they are the more expensive. The standard node is- yeah Charles has just got them up there. So, you've got pre and post iterations. You iterate a little bit before you remove some error, you iterate it a little bit afterwards. Usually the post-update iterations should be around about a quarter of the pre-update iterations. But yeah, that allows you to tweak this solver as much as you want. We also have, and this is enabled through conflicts, but we can set how big the ticket is for the physics update. You can enable adaptive sub-stepping, which is a cool feature. If you say that your tick has to be X milliseconds and your game tick is actually X milliseconds, it'll just do it once; nothing crazy there. But if your frame starts to take longer, it will start to sub-step these things and make sure that they stay stable as long as possible. There are limits to this and we can get into a situation where we spiral and just spend more and more time on physics. So, there is a limit where we stop the sub-stepping so we don't end up freezing the runtime. >>Charles: You can see these guys. So, this one here is the chain, this is a single node that drives that chain, but like these down here, these red straps on the side, those are actually a chain as well. But in the case of those, we're doing three individual chains. So, I wanted to have these in here to show two different ways of doing it. So, these are three strung-together individual nodes that are not set up as chains, and you get a very similar result. >>Benn: It's longer chains that suffer from it. I think the reason that we've got the chain set up on that, the front chain is, I just saw before when we had that main animation of that thing, it spins pretty fast. So, making sure that we do these iterations up and down the chain just makes that an awful lot more stable. >>Charles: Yeah. Feng Mao swings around pretty crazily when you're playing. >>Benn: The other thing to note about it is, I think Charles touched on it before, it's a components-based sort of system. So, it all works relative to your Mesh that allows us to skip having to convert that forwards and backwards between the world space. So, the way that we do world interaction, you can use Wind Actors and recently we've had radial wind enabled. Radial wind allows us to do like explosions. It's a Wind Actor. You can treat it as an explosion. You can put down a really strong Wind Actor for about maybe 0.2 seconds in an area and you can have everyone's Anim Dynamics burst open and be affected by that force. I think that's just about all the features of Anim Dynamics. Yeah. It's great. Really well. The other good thing is it's out now. Preview three of 4.11 it will be in everybody's from now on. It'd be great to see some people get a hold of this and do things that we haven't tried yet. >>Alex: Wow. Yeah. It'll be interesting to see what everyone does with this. And like I, and you guys had mentioned this before, this is a 4.11 feature. So, they should have access to it in the preview and all that. >>Benn: Yeah, the new preview has got it. What's also worth mentioning is Charles has set this back plate on the armor here is the only bit of something like a back plate, this cloth is APEX Cloth. So, we've been working quite closely with NVIDIA on APEX, trying to make this as performant as possible. We've been making a lot of changes and 4.11 has a bunch of cloth optimization. If anyone's projects are using cloth or you're planning on using cloth or you've had a look at it and found it was too slow. Give it another look again, because we've really spent some time hammering down that cost. It is an awful lot faster than it used to be. >>Alex: Oh, that's great. Yeah. I think that what we're hearing a lot of about 4.11 is performance enhancement after performance enhancement. So that's really amazing to hear. As long as we're on the topic of APEX and all that, there was a question that had popped up about, is the backend still PhysX or is this a custom solver for Anim Dynamics? >>Benn: In this case, as you probably guessed from the talk, it's a custom solver in the background. You have a very simple Rigid Body solver for [inaudible] for positions, [inaudible] approximation for orientation. No collision, it is simple, but it definitely- It does a really good job in this situation when we're putting this dynamic stuff on Characters. >>Alex: Very cool. Right. You guys want to do some Q&A then? >>Charles: Sure. Cool. >>Alex: Cool. Alright. Now this is something from the forums that had come in and it was sort of a first question in a series of questions. If yes, then there would be a ton more questions. But do you use ragdolls in Paragon? And the answer is there's not ragdolls. And then there's like 10 other questions about how we would do it if you're doing it, but unfortunately can't answer that one. So now do all the Characters have their own skeleton or do they share do they share the same skeleton? And if not, why not? >>Charles: Currently all of the Characters have their own skeleton. The reason why is because if you've been watching the trailers up to this point and any of the gameplay trailers and footage, they are all very, very, very unique. There's very few Characters who are similar enough that they truly could share skeleton or that there would be any real value in having them share skeleton. There's plenty of Characters that I guess technically could share, but the cost of sharing them and figuring out how to transfer animation data and rigs and everything, it was just not worth the time and effort to doing it. Aesthetically, none of these Characters move the same even if they shared the same skeleton. It just made sense visually to not do that. >>Alex: Alright, that makes sense then. >>Charles: Now that being said, all of their core structures do have the same naming convention. So, the spine three bone in their chest is the spine three bone on every single Character. You know they all use the same names for the shoulder bones, the clavicle bones, the core stuff. But then, some Characters don't have three neck bones. Some Characters have four, some Characters have two. It varies and that's where it starts to get very different. >>Alex: Yeah, when you get like the giraffe Character in there, so it's 15 and above. That makes sense. >>Charles: We don't have a giraffe Character that I'm aware of yet. >>Alex: Dang. That was going to be my main. Alright. Now let's see. Could you procedurally animate something with Anim Dynamics and I think that you have to kind of preset that up, don't you? >>Benn: There was something, I meant to mention this actually when we were looking at the graph before. There's a lot of green lines in there that I'd set up earlier when I was testing something and yeah, you can put keyed animation in there and you can apply a little bit of dynamics or REM, you can do this dynamically. So, at certain times you can completely turn the dynamics off and the animators can control the bones. I don't think, can we do it with this? Have you used that at all, Charles? >>Charles: No. I think they are doing it in some of his moves. Some of his moves that where he gets a little crazy, they're using we can switch back to the Blueprint here for a second. You'll see in here that every Anim Dynamic node has an alpha. The alpha is driven by a Dynamics Alpha, so the animators can then tap into that during an animation. They can blend it off. It plays the animation, the hand key, whatever they want on it. They can blend it back on and you could make one of these for each individual node or you can make one like in this case that drives almost the nodes. So, the animators would have control over that too, to control that so that they have the ability to hand key whatever they want and not be blocked by the Anim Dynamics. I don't know if that answers the procedural question, but- >>Benn: You can do procedural stuff as well in the sense that you can affect these bones whenever you want. If you write your own nodes, your own nodes that want to move the bones around to your own specifications? You can do that and you can apply Anim Dynamics before that or after that because it's in the graph and you have the nodes, you're in control of this chain. The chain of command. You can tell each bone what contribution it takes from all the different things. Like here we have Bone Drive Controllers that push the part up and then we apply the physics afterwards. So, the physic just sees that, oh, this is moved in space. So, we'll do some physics on that. Yeah, you can drive it by animation, you can use the alpha, you can write your own nodes that move bones. It's quite powerful. >>Alex: Alright. I guess this one's more on the technical side. Is Anim Dynamics expensive performance-wise? And I guess how do you demonstrate performance in that. >>Charles: Benn, you want to take that? >>Benn: Yeah, it's pretty good performance wise. I'm trying to remember the factor that we got from using the traditional Physics Asset. It's much more expensive, but it solves a much larger problem. So, our smaller solution is definitely one of the two choices. If you try and do something small flapping around your Character use Anim Dynamics because it's definitely going to be faster than using something like the Physics Asset. If you were going to try and use something that you need to get absolute collision on or you need a big complicated ragdoll then the Physics Assets are probably the right solution there. Yeah, it is definitely much, much faster. >>Alex: Alright. I'm sorry, I'm still going. Just making sure that I got a good question and there's still questions popping in. Alright. So, they're all rigid bodies with individual bones. Does that mean the clipping could still occur or is it handled by collision? And I feel like if you give something enough force, you can always clip it through something else. >>Charles: Yeah, there's still definitely the possibility of clipping. Really that question comes down to how you set it up. In the case of something like this, you'll notice that when he's running here, the leg clips through a little bit, but when you're playing the game back here and the Characters running around and you're in the middle of the game, but you never noticed that. So, things like that, it all comes down to how detailed you want to get. I could probably go in here and modify this Bone Driven node or add another one to it or go on and hand key the movement so that there's absolutely no clipping. And I know it can easily get rid of all of that type of thing, but it comes down to a matter of how much time and resources you want to spend on something like that. So that that comes down to purely up to you as the user, how you want to do it. You can definitely avoid clipping. You can definitely prevent it. For the most part, it's just a question of time. >>Alex: Alright. Now this one might not actually be Anim Dynamics on there. Sure. That's just basic physics simulation. >>Charles: So yeah, we can answer that. >>Alex: The question is, if you apply simulations to e.g. head tentacles, do you also animate them or do you do 50% anim 50% sim, or are the simulated bones locked in animations? >>Charles: So, the way it works is the Anim Dynamics are calculated in the anim Blueprint after everything that comes before them in the path. So, in this case here you can see I put a jog animation in here. The jog animation has animation on all the bones that are simulated, but the simulation is set to the alpha value here for, I guess it isn't going to show me the value, but the Dynamics Alpha value is set to one. So, the alpha is going to be one, which means this Dynamics is going to be 100% on. Now, the way it's going to calculate it is, whenever the tree is evaluating; the graph is evaluating the joints location, it looks at the animation, it uses the animation position as a starting point and then it allows it to move based off of the settings that you've put in here, like the angular limits based off of that position. So, if the position is at 45 degrees out, and you've given it the ability to rotate 45 degrees on positive and negative, it's going to be able to move 45 there and to 45 there. So, it's going to move up to there and up to there. But if the animation then moves the joint down to here, its 45-degree rotation limited from there to there now. Right? So, it's not like just from its starting point or from its ending point. It's purely based off of the rotation of that. So that's why I was saying early, you can, the way I kind of nudged this area here is I hand animated it to give it a little bounce to push it to give it a little movement. So I've just got it kind of going up and down like that in the animation and when it pushes it up like that, when it falls down instead of it just kind of falling and hanging, this kind of pushes it and it just kind of keeps bouncing it up and down and up and like that. >>Benn: And this when we get the positions you have from the animation, if you've got it on a 1.0 alpha, the physics can do whatever it likes. If you accidentally put your Character's arm on a free Z limit linear, it will just fall infinitely. If you then allow some of your custom animation in there. If you give it like 0.5 alpha and give half to animation, you're still getting some of that data through. >>Charles: And that also plays to using other nodes, like the Bone Driven node. You can also use a Look At node or even a Single Bone node. There's a whole bunch of different types of Skel Controls that you can use to drive it. And all of those, if there before the Anim Dynamic for that specific bone, they will also affect it and they will determine its start position for the Anim Dynamics and everything. The Anim Dynamics will then pick up from there. So that's how you kind of string multiple things together to get a certain effect or a certain look you're going for. >>Alex: Alright. I guess this will be a pretty fast one. How many Anim Dynamics nodes are in this particular Character? I guess you could zoom out for a second. Give them an idea. Alright. >>Charles: He has- >>Alex: There you go guys. Take a screenshot and start counting. >>Charles: Yeah. >>Alex: It's quite a few. >>Charles: They're not all Anim Dynamics in there. There's like these two here are not Anim Dynamics, these two aren't Anim Dynamics, but pretty much everything else. I think that one's not Anim Dynamics either but three. >>Alex: Count them up minus five or something. >>Charles: Yeah. So close to 25, 30 or so. >>Alex: Oh, that's pretty impressive. >>Charles: This one's a chain which is more expensive. >>Alex: Speaking of the chain, could you explain the broken chain setup and exactly why you've done that? >>Charles: What do you mean by broken chain I wonder? >>Alex: I think earlier you mentioned that there was a chain, it's like a series of chains that's been broken up. >>Charles: Oh, as opposed to doing three individuals as opposed to doing a chain. >>Alex: Yeah what's the exact reasoning? >>Charles: The only reason for that was primarily an optimization thing. For these, because I knew that they weren't going to be a very- they weren't going to be a flowing swinging type of thing. I mean they spin a little bit, but they only pretty much move on one axis. The extra expense of having them calculate up and down the chain and having the expense of having a three-bone chain is going to be quite a bit more than having three individuals. So, it was purely an optimization for performance reasons. I could switch those over and get us similar, maybe better look by switching it to a single node with multiple chains or with multiple bones in it as a chain, but the cost was more than having three individuals. So, I just didn't see the reason. >>Alex: And visually it's just diminishing returns at that point, but the behind the scenes cost is more. >>Charles: If I switched it over right now and showed you the difference, you probably couldn't tell which one was honestly. >>Benn: The good thing about it is the more you add, the more expensive it gets. But this is a game where one of the motivations is if we use the more expensive solution, we just couldn't do this much. I mean, this guy is a really dynamic Character. He's got a lot of things going on. And without this solution we just, you couldn't do this much. We just did- the more we optimized it, the more we could do on each Character. And yeah, you take out the chain on the eyelets and that brings down the performance of this Character; makes him quicker to process. >>Charles: And honestly, again, like Benn was saying earlier, the chain option is really more for more than three bones, more than four bones type of thing. If you get something that absolutely has to be a chain and is seven bones, eight bones, nine bones, setting it up as individuals like this, you're going to start to really notice that it's not a chain hierarchy at all. It'll start to look different because the further down it gets to the chain, the less information it's going to have about what's going on above it and vice versa. You're just not going to get as good of a look. >>Benn: And what you end up seeing within a chain that long is you pass all these forces down and you have this mass at the bottom that moves, but it doesn't pass its force back up. Essentially, you get this pendulum that goes backwards and forwards and backwards and forwards and never stops moving because the force is only going in one direction. The Chain node is really, if you start to notice that happening, that's when you need to use the Chain node. >>Charles: Yep. >>Alex: Alright. That makes, I guess that makes sense then. Yeah. I think we'll do this one last question then I'll let you guys go. Because I know you have a lot of stuff to do. But someone is building off of the other question about if you had kind of floppy parts of a body coming off of them. When you're using Anim Dynamics and it's deforming things, is that actually changing where the Mesh is? If I'm doing line traces, is it going to still see the Mesh in its original spot or is it going to actually be moving the Mesh? >>Benn: That all depends on the setup. So, what we do is we move bones inside the Skeletal Mesh. So, if that bone has a body in the Physics Asset, that's going to move with the bone as well. So yeah, I don't think that we don't use it for anything that we can then line trace afterwards, but the line trace of the PhysX bodies is attached bones and all we're doing is moving those bones around. So yeah, that should work fine. >>Alex: Awesome. Alright. Yeah, that'll be the last one for today. Thank you guys so much for coming out and talking about all of this. It's very new and unique stuff. A lot of people seem to be very excited about it, so I'm sure we'll have a lot of people picking up the 4.11, preview of it to try it out and give us feedback and report bugs, et cetera. >>Benn: Try and get some stuff up on the forum so you can see what you guys can do with that. >>Charles: Yeah, I'd be really curious. >>Alex: Yeah, please tell us everything you can. Just go in and try to break it. It really helps us out. And since I know a lot of people had come in today wondering about the game jam results, that's next week guys. So next week on Thursday we'll have a game jam results full show reel and all that stuff happening. So, make sure to tune in then. And thank you all for coming up. We'll see you next Tuesday.
Info
Channel: Unreal Engine
Views: 39,581
Rating: undefined out of 5
Keywords: Unreal Engine, Epic Games, UE4, Unreal, Paragon, Game Developement
Id: 5h5CvZEBBWo
Channel Id: undefined
Length: 55min 31sec (3331 seconds)
Published: Fri Jan 22 2016
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.