>>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.