- My name is Jeremy Cox. I'm from Imaginary Forces.
We are a creative studio and production company based in
Los Angeles and New York. I work out of the New York office.
So, yesterday, I kind of went through a little more of what
Imaginary Forces does. I figured that'd be a little boring to do a second time if any
of you are coming back for a second demo. So actually, I've been at Imaginary Forces
for 10 years, so I've actually never done my own demo reel. So I actually cut
together my own demo reel for the first time since I was in college.
So you're in for a treat, I hope, unless it's terrible.
♪ [music ] ♪
Thank you. As I've said, I've been at Imaginary Forces for 10 years.
They hired me right out of college and it's been an amazing experience,
being there. IF is actually just about to turn 20 years old, so I've been there
for about half its life, which is pretty crazy.
I feel like I just started there, still. But anyway, today I'm going to talk about
a couple things. But the first one is, we did the opening for the
SXSW Gaming Awards. We had done this last year as well. So this is the
second year in a row we've done it. And if anything, the biggest challenge
initially was, "Okay, we did it last year. Everyone actually really loved it,
and it got a great response. And how do we top that? How do we do that again,
essentially the exact same brief? What do we do? How do we take it
and do it the next year?" And we kind of decided,
"Well, let's just ignore that and do something from scratch.
Just kind of do what we find interesting."
So first, I'm going to show you the final piece, and then we can
talk about a bunch of the creative process that went into it as well as some of
the technical challenges and technical solutions we found to those.
♪ [music] ♪
So that was obviously a lot of fun to make.
And it's funny how we kind of-- it really evolved from what we
did the previous year. If you saw what we did the last year for it, it was kind of
this retrospective of gaming, and this very sort of impressionistic thing.
And then suddenly this year, we had all these other ideas and kind of turned it
into almost a narrative short, in a weird way. It was a totally different
thing that was a lot of fun to do. So the first thing I'm going to show you how to
do is model that character. It took a lot of work. There's the character. If you
missed that the first time, I'll zoom in on it, and you can see it here, close up.
It was kind of funny that, literally, it's a d20. It was the icon of
the gaming awards. So that's just the icosahedron platonic solid that comes with
C4D by default. So that was a fun thing, just to spend as little time as possible
doing any character modeling. So, just conceptually, where this came
from, I just did a lot of, sort of, thinking about playing games and gaming in
general, and what some of the themes were, and some of the ideas. Something I kept on
coming back to was this idea of this spawn and re-spawn. You're playing a level,
you're playing a game. And you're just playing it over and over and over again.
And every time you die, you go back to the beginning, and you try and you get better
and you get better, and the kind of, frustration of it. There's something about
that kind of repetition, and it almost reminded me of Groundhog's Day, or
something like that. It's almost like, that's kind of in a weird way, how
gaming works. There is this sort of, repetition. I thought of that as almost
being our narrative structure. So that's where this idea of the death and
rebirth came from. This was a very early illustration that our Designer and
Art Director, Max Strizich, put together. And I think this really embodied
conceptually what we were thinking, and then just visually, this idea of, we
needed a mission for this little character to go on. Again, it all came from
this little guy. We saw this little d20, this icosahedron, as a character.
He can roll around and... [purring noises]
But what does he do? We kind of came up with this idea. Well, he needs a mission.
He needs to be going for something. So this idea of discovering
this pinnacle off in the distance. And making that his mission that
he's going for. And then just, the idea of the kind of, structure of it, of having
this kind of like, spiraling thing you can go up. I think this really got us off on
the right track with that. So, something about this project is that there were both
no limitations at all, and some pretty extreme limitations. So, there was not
much of a budget, and not much in the way of resources to work on it. So that's a
huge limitation. But on the other hand, the client had almost no restrictions in
terms of what we did. So as long as we had fun doing it,
and had something tangentially to do with gaming, they were on board.
They just wanted us to do something fun and cool.
So, in a weird way, although that's kind of like, the fewest limitations you can
get in a brief from a client, that's the hardest. You always want some kind of
box to be playing in. You want fences to guide your thinking, and when
there's none at all, it's like, where do you start? What do you do? So that was
actually a huge challenge. So, if anything, I really embraced the idea of,
"Okay, we have no resources to work on this. How do we do it?" And use those
limitations to guide what we did. So, for example, you saw these scenes throughout
the piece. And the idea was, these were kind of this like almost purgatory, kind
of death scene. And they would change each time. Each time he kind of dies,
and gets torn apart and re-assembled, and then gets re-spawned at the beginning.
The reason we actually added these was both, I thought it was kind of creative
and interesting idea, and also aesthetically, we could mix it up and do
some fun things with these. It actually came about because in the previous years'
gaming awards, we realized-- we get people for an hour or two at a time, a day at a
time. And rather than have to get them familiar with our aesthetic and our style
that we're trying to create, we can just say, "Hey, go make one of these. Have fun.
Here's our icosahedron character. Let's do something. I don't know, animate
something." It doesn't matter what it is, because the whole point of it is that it's
an eclectic style that can all mixed together. And it'll work because it's in
this separate sort of, chapter of the piece that is these sort of, death
animations. And then, another area that we really took that limitation, and ran with
it, was the aesthetic. I'm just going to go through a bunch of these early renders.
These were just as we went, these were just some things we saved, and these were
us establishing what the look of the piece was going to be. It was important from the
very beginning that it be something we could both render quickly, work in
quickly. We knew it was going to be at least a minute long. It ended up being,
I think, two minutes long. We just needed it very quick to work with. At the time,
the number of people working on it, and the schedule wasn't all that great in
terms of actually being able to churn this stuff out. So, really we just went through
it, and just started experimenting. And we quickly arrived on the idea of this fog.
And we really liked the idea of this color and depth.
And the changing color as the atmosphere sort of occludes things.
But doing it in a very sort of stylized graphic way, so using these kind of
low-poly objects, even like sort of being inspired by the GI calculation,
then going weird with it. Like going super bright and super funky with the colors.
So in making this, I'll show it later, and it'll make more sense. But essentially, an
important part of this process was Max who I mentioned earlier, who doing a lot of
this kind of look development. He was actually largely learning
Cinema 4D at the time. And so he would be just messing around, breaking things, and
going crazy with it, and making images like this, which are awesome. And then, I
would be sort of in the background making rigs and things that would make this
easier to do. So, in terms of being able to control these gradients and these
colors and things, I was sort of making it easier for him to quickly change things
and sort of mess with it. But as soon as I made a new rig or something for him,
he would just go nuts with it, and break something. And then I would go, "Well,
I can actually control that. And that's really cool, so let's make a way to sort
of make that a part of it." Like this is actually rendered through the wrong
camera. This is the whole scene viewed from the outside, from like, the front
view or something. It looks crazy all on its own. It was really just a quick
process of very quickly iterating through different aesthetics, and trying different
color palettes, and trying something with ambient occlusion and
global illumination, how that stuff looks. And here, I think this is where it really
started to lock in, to kind of a little more refined, kind of, "Here's the palette
and the aesthetic that we're going for." And especially with these, we are starting
to get some clouds and things in there. We started going a little more naturalistic,
although it's really cool how crazy it went. We kind of brought it back to a
little more-- some of these almost kind of look like Road Runner cartoons,
which I think is really cool. But this is where we arrived at. This was like our
color script for the piece. We found these six frames of all the
experiments we were doing, kind of put them in order, and realized, we're kind of
telling a story here through the color palette. It starts in the dawn, and then
the sun sort of comes up, then it becomes this daytime. In the piece, we never
actually really got to the last two, just because it kind of became more
complicated than it was worth to keep on changing the color palette of each scene,
and try to figure out the order of things as we're editing it. Suddenly things would
be changed, and the colors would be wrong. So at a certain point we simplified it a
little bit. But, this is essentially the color palette we were using. And because
these are all rendered out in Cinema 4D with just a tiny bit of like, Photoshop
compositing on them, we essentially were able to take the settings we were using in
these and just copying and pasting them into our pre-vis that we were doing
concurrently, and render it. And that was pretty much our final piece. So I'm going
to quickly show you, in Cinema 4D, how we set up some of these color palettes,
and specifically, how I set up controls to very quickly iterate through them.
So let me open up the project file really quickly.
This is the scene from the project, or close enough to an actual scene
from the project. As you can see, the actual view port preview is
extremely similar to what it looks like rendered.
If I hit Render, you'll see it renders extremely quickly, but it really isn't
changing much. It's almost like it's just slightly different as it renders.
But, really, just working in the view port in doing like a hardware preview,
you get an extremely good idea of what the final product is going to look like.
And that was very important in terms of how quickly we worked.
But, I think what's interesting here is, we built this controller system.
And so, if I click on Controller... We have these environment controls,
and essentially we're using user data to link to all our materials so that in one
place we have all of the controls we need to set the look of our scene.
So let's say right now, it's kind of this, desert-y orange thing, but let's say I
want to go to maybe a more green lush with a blue sky. These gradients are
controlling everything. So I can just say, "Okay, my fog color, that's like the
environment." Let's go in here, pick a different color. Okay, so this is like,
the ground, so maybe it would have to be more of a green color. We can go in here
and find kind of a nice green. And like, instantly, we have that changed.
We probably want to do a little bit more blue in the distant haze. And the sky,
I said, I wanted to go kind of a little more of a nice blue. You see how quickly
we can iterate through and just explore different color palettes. And, that was so
important in the early process, being able to just experiment, because we didn't know
what we wanted to do. It always looks like, in the final piece, it always seems,
like, "Oh yeah, that's what we always meant to do. That's what it was going to
be." But you don't know that when you're working on it. And it's really important
to just experiment and try things, and iterate as quickly as possible through
them. So, I'm going to show you how I set up this controller. I won't show you all
of these, because obviously it's a lot of linking things and a little complicated,
but just the basic idea of setting user data, linking it through Xpresso, and all
of that. I'll show you very quickly how we set up that. There are more controls,
even just the distance of the fog, like depending on where we go in the
scene. Maybe you want it to be a little bit kind of closer like that.
It's again, just extremely interactive, even the light color, which is what's
giving us some of the definition in here, I can change that. We might even be able
to... Let's see how the view port handles it. Yeah, we can even see a certain
amount of interactive live shadows to see where our shadows are going to fall once
we actually render it. Anyway, so I'm going to show you the basics of how we set
up this rig. So I'm just going to take my environment and put in a new scene,
just to start from scratch. And I'm going to take out materials.
So, we're really starting from scratch here. Let me grab the sky, too.
All right, so first thing I'm going to do is make a new material.
And pretty much everything in that entire scene is driven through gradients.
It's using 3-D gradients. So, usually when you make a gradient--
I'm actually going to use the luminance, just because that's mostly how
this is all driven. So, in luminance, I'm going to add a gradient. And usually, you
probably just take this and, "Oh, let's just change some colors and things."
But there are a bunch of settings down here that you might not have usually
touched. And, the big one we were using is these 3-D linear gradients, and what that
means, is that rather than it being in the texture space on the object, it's actually
traveling through the environment. So if you think of a volumetric fog, which is
essentially what we were mimicking, that is what this is doing. So it's like a
gradient passing through space. So, I set it to "linear," and then, you kind of
need to get a little bit of spatial orientation about where you are, or where
things are. So you get this kind of start-end in x-y-z. So if you think of
a point in 3D space where the gradient is starting, and then a point in 3D
space where it's ending, it's like, those are these two points you're setting here.
But before I do that, the one thing that you'll notice is that, as in with the
camera, that fog changes, because it's all in relation to where you are. So, rather
than being in object space, we're actually putting it in camera space. So that means
that if I zero this out, if I zero both these out, essentially, both points that
I was talking about in 3D space are on the lens of the camera. So what I need to
do is take the far one, or the end point, and push it way out in the distance.
So in terms of coordinates, like, "y" is always up, "x" is always side to side, and
"z" is the one that goes back in depth. So, it's x, y, and z, so the end, I want
to make this number go way back in space. So let's just change this, and we can see
what it does. I'm just going to make something big, like 10,000. And if I put
this material on my environment, you can see it's a little crazy right now, and
that's actually because I have this cycle turned on. So it's repeating it over and
over and over. That gradient is being repeated. So right now it's still not
far enough. I guess that 10,000 is a little too close. Let's try another zero.
There we go. That's what I'm looking for. So you can see, as I move my
view around, it gets darker as I get closer and lighter as it gets further
away. Now, you may recognize this as essentially just a depth map, which you
can essentially just create your own depth pass just straight out of materials like
this, which would be useful if you want to change the anti-alias setting or
something like that, when you're running depth pass. Anyway, what I really want to
show is, this is all great, but what I was actually doing was, I was thinking,
"Let's take this texture. I want to use the same one. Also my color because
I want some interactive lighting, so let's paste that in there.
And now, if I put a light in there..."
You'll see, it gets very complex quickly, because now if I want to change
those colors, there are two places where I need to change those gradients. And
there's no good way of linking those together except if you link them both to
somewhere else that they're both referencing. So, that's what I'm doing
here. 'm just going to make a new null, and I promise this wont be too crazy
if you don't know Xpresso. I think you can pick this up pretty quickly, but on
this null, I'm going to make an Xpresso tag. And, Xpresso is essentially a
nodal system in which you can link values together. Essentially it's just sending
data around. So it's just moving data in your scene. And, again, like, my use of
this is extremely simple. You can get very complicated. But, what I'm going to
first do, here is my Xpresso. But what I need is a UI to actually control
it. What I want is a single point in which I can change the gradients, that sort of
focal distance of how far back that gradient goes, and all these things like
that. So, what I do is add user data. You can see on anything in here, there is
a user data menu. What you do is, you just do "user data, " "add user data."
And, you can add any different type in here, but what I want is a gradient.
So I can select it as a gradient. And let's call this, "fog color."
And, that's all right. So, now I have one item, and I'm going to
link this fog color to both of those instances in that texture, so that when
I change this, it will change both of the other ones. So I'm going to quickly add my
gradient here. I'm actually going to make it a little different, just so I can see
when I link it up that this actually worked. So now it's going from black in
the foreground to kind of pink in the background. And, so, the way you actually
add things to Xpresso, is all you need to do is just drag them in. Because on this
null I have user data, I can just drag the null in, and then I can drag the fog color
onto the right side, which is the output. And then I need to pipe this into
something, so you can think of it as, this is piping out of this into something
else. So, opening up my material, and go into this gradient, and I'm going to drag
my gradient in. And then I need to set the input and it's a little easier-- maybe I
can do it. Yeah, I can drag that gradient into there. And then I also wanted to do
the color gradient because these I want to be the same. So I can drag this gradient
in and go into that one, and drag the actual gradient values themselves into
here. So now all I need to do is just connect the dots. So out of that and into
that, and out of that and into that. And you can see now, if I go into the user
data, and I probably don't want it black in the foreground, maybe I want it like, a
deep blue, or something. Now I can change all of these different values at the same
time, very interactively. So the other thing I said I wanted to do was this
distance. And again, because it's in both places, I don't want to have to change
these one at a time. So 100,000 was the number I liked, but I'll
probably want to change that as I just fool around and mess with this whole
thing. So, again I'm just going to go into my null, user data, add user data.
This time I want it to be a "float," which is the default, which is correct.
It's essentially just a number, it just means I want to set this to some number
that's a certain distance. Rather than percentage, I want it to be real, and that
just means that it's not zero to 100, or something. I guess you could
think of it as your normal definition of number is a real number.
I'm just going to call this "far clip." And in this case I'm actually going to set
it to have a float slider, and set the maximum to be something nice and big, and
then you'll actually get a thing you can drag around which is very useful rather
than having to punch in numbers. So, I can do the exact same thing with the Xpresso.
So here, I'm going to already have-- the other way you can add things rather than
dragging them in is you actually click on here and go to user data, and you'll see
it right there. So there's my far clip. Now in both of these-- it's a little
hard, like I can't drag that one value out, so again I'm probably going to need
to use the same method here, where I click on here, go to "shader properties,"
"gradient," and then "End Z." So the End Z, as I said, it was X-Y-Z,
is the order it goes in. And End Z will be the one I want. And then, same
thing, and, "End Z." If I connect that to the far clip, because that is still set at
zero, I believe, it essentially just reset it. So those are now back to zero. But now
I go to my user data and drag this around. You can see it nice and interactively
change the distance of my fog. Now, this is really as advanced as what I did, got.
It's really just putting things in and connecting them. And ultimately, we did a
lot of things like-- I'll go back to the original scene.
I can describe some of the ways in which we used this.
So you can see we did clouds, we did some controls for the
colors of the clouds. I have them off right now for the preview. We did this
sort of volumetric ray system. And this is really interesting. Again, the whole thing
we were going very graphic, so you could've done a light with a Gobo or
something in front of it, for like volumetric light, but that would take
forever to render, and just look soft. And because we're going for this graphic
aesthetic, all this is-- you can see it when I zoom out--
It's just a bunch of cubes stretched out, put in a cloner, and sort of randomized at
an angle. So, it's like the hackiest, cheating way to do it, but because we're
going for this really sort of, simple, aesthetic, it ends up working really well.
Let's get back in here. You can see it poking through the sky right there.
And as I said, like, same thing, just navigating around,
you get a really good sense of what it would look like, even
though the transparency doesn't exactly come through the way you'd hope. But, you
kind of get a sense of the angles of the rays and everything like that. But again,
we had controls for that. So you go down to-- we have ray intensity, and that won't
actually preview. But then we have like a random seed, where if you just don't like
where some of them are standing, you can randomize it and they'll bounce around.
Then just change the angle at which they are coming at. So, just having all of this
information in one place, rather than needing to go in here and say,
"Okay, I'll go to my rays, I want to go to the rotation," and mess with the
values in each one, you'd just have it all in one spot.
And being able to build a rig things like that so you can just
very quickly iterate and change them, makes you able to work that much faster.
I don't think there is anything else in here. Oh yeah, so there is one other
thing that I think was kind of interesting. We did a lot of work on this
shader, and there's a lot of really subtle things going on in here. Again, a lot of
it doesn't really preview in the view port, but if I hit "render," hopefully we
can see some of them and I can show you how we did it.
I don't know how well it's coming through, how well you can see it.
On any vertical surface, we added these sort of vertical striations.
We wanted it to feel like it's very kind of smooth on the surface, and it's clean
and graphic, but then on any vertical things you almost got this kind of feeling
of like a graphic version of erosion. So it's almost like you took a pencil and
kind of squiggled up and down on it to get this, again, a graphic version of these
vertical cliff-faces. So, the way we did that, again, it's using
world space, like the idea of putting things in world space. In this case, it's
putting noise in world space, and just stretching it out vertically.
I'm actually using that in the diffusion channel, so you can see it's a diffusion
shader, and I'll talk about that in a moment. We go under noise, it's at
"world space" and then it's stretched out ridiculously tall in the "y." It's like
taking a normal noise, which you can think of it as the same in all directions, and
just kind of this undulating thing. But we are then just stretching it out really far
up and down. So when you stick it on something, you'll just get these nice long
lines moving through our geometry. What I was talking about with the diffusion
shader, I skipped over there a moment ago is, we actually used a terrain mask to
make it so it only appeared on the vertical sides. And this is a really
interesting shader because essentially, it-- I guess you could think of it as--
it's intended purpose is, like, say you wanted to put snow on the ground, and of
course snow only settles on the ground, it won't settle on vertical faces, so if I--
let me do a new shader and I can show it in there. I'll do luminance just because
it's the easy way to show it. If I do a-- where is it? -- train mask, and I'll just
use the defaults and put it on my environment. Now it doesn't preview in the
view port, but if I render it...
it seems to be appearing black. I'm sure I have something I'm screwing up here.
I need to disable that. So this means that at different heights, it'll
behave differently. So say you only want snow high up in the mountains, it will
only apply it at certain elevations of your scene. So hopefully that fixes it.
There we go. So, it's really just a mask of different angles, so it looks for
angles that are pointing up, and essentially gives you a map you can use
elsewhere to essentially chop things out. So in this case I had that noise that I
was going to put on the side, so I'm using this to chop out the top parts and only
use the vertical parts. So you can get very complicated like that with your
shaders, and sort of add a lot of little details in. Or say you wanted it to have a
noise or something, or a texture even, or an image that just appeared on the surface
of the terrain, but not on the vertical portions. So, I think that gives you a
pretty good overview of sort of our look development process. Really, it was as I
said, an evolution. As we worked on it, we would kind of come across problems, we'd
have little things we wanted to change. It's like, "Oh, rather than have to change
that every single time we want to do it, I'll just put a control in there."
And then that's our new scene, we update everything, and then suddenly, we have
that control in every single scene. And really it was probably up until like, a
couple days up until we delivered I was like tinkering with it and making changes
because it was still saving time in delivering the final product. So the next
thing I want to talk about is actually animating that character. So what I'm
going to show you now is-- maybe, if it's going to play-- there we go. So this is
like an early pre-vis of the piece. And really, this is-- I'm just going to talk
about animation as this is playing. The issue was, we knew we wanted this sort of
geometric character to walk around, essentially, as much as this guy can walk.
But the problem was we both needed it to be completely directable. We needed to be
able to tell it where we wanted it to go, when to go slow, when to go fast, kind of
what path to go over, and even to go over complex geometry. It couldn't just go over
a plane. But, it also needed to behave like it used physics, like it's rolling
around. We can't just animate the position and say that's that.
So really I had a bunch of different ideas on how to do this, or they sort of
evolved as I worked on the project, as tends to happen with these things.
And so, my initial idea was, okay, gravity goes down, so let's take the
entire world and move the world around, and use physics on the object. So it's
almost like one of those old marble games where you just dial the things in and they
make the world change and the marble rolls around. Like, well maybe I can do it that
way. And then I of course tried that and it was terrible. But, I'm going to show
you a few of the different-- the process I went through in figuring this
out, and then really I just came up with couple different methods in which you
could use to do this. So I'm going to make a plane. This is just going to be our
ground that we're walking around on. And then I'm going to, again, go through the
very complex modeling process of creating our character. Just make him a little
smaller, and there we go. So, obviously we want this guy to use physics. We want him
to roll around like he's a physical object. We don't want to have to animate
that rolling, because he's always going to intersect with the ground
and it's not going to look good. So, we really want to use the dynamics in
Cinema to do that, the rigid body. I'm going to make a "collider body," which is
going to be the ground, and a "rigid body" which is this guy. So if I hit play,
he'll just drop to the ground and roll around a little bit. So, I mean, that's
fine, but that's not really what we want him to do. We want to actually have
control over him. So, the first thing I actually tried was going into-- it's kind
of like what I talked about-- moving the earth, except I was like, "Oh, I can just
point gravity in different directions, and make gravity go this way. And if I put
gravity that way, he'll roll that way." So, I turned off the gravity in the scene.
You can use particle effectors to affect dynamic objects.
So I thought, "Oh, well, let's put a gravity in there."
And, by default, it's going to do kind of the same thing. I think I have
to turn it up to 1,000. Is that the default? So, now he falls, but if I point
it, you can see he's sliding. And that's because the friction isn't high enough, so
he's just sliding over the surface. So if I go into both these tags and go to
collision and up the friction, I could probably just put 100 or something really
high, so he never slides, he's always going to roll. So in theory I was
thinking, "Oh I could kind of just like animate this around, and make it so it's
almost like a joystick." I could point in each direction I wanted him to go. It was
like a fun idea, but then actually trying to get any sort of control over where he
went was like a disaster. It was almost like we were trying to play the game that
this character is trying to play, where we're trying to have him go over these
like, narrow ledges and things, and it was as hard for us to do it as it seemed he
was in the actual video. So this didn't last long. It was kind of a mostly-failed
experiment. It was great if we just wanted him to go in one direction, and then like
fly off the cliff. It was perfect for setting up that. With any sort of actual
control we couldn't really do this. So the next step was-- well, I'm going to turn on
the default gravity again, just because I'm not going to go back to that anytime
soon. So the next thing was, well maybe gravity isn't the way to do that in here.
If I look at these there's an "attractor." Attractor would probably do that. So I'll
still have gravity pointing down but then I can attract it to go in different
directions. So, this is the next test, and you can see-- I don't really think it's
going to do much by default, I think because the value is too low, and it just
can't pull it. So I think I need to turn up the strength. That's better. So you can
see that's actually working pretty well. He's actually rolling around, he looks
pretty convincing. The problem with this is it's still kind of an issue. If you go
too fast, you leave him behind. We were also having a lot of weird bugs with it.
He would kind of snap to the ground. It would be like, it feels like an attractor,
like someone's pulling him, like it would go too far and then bounce back.
It was kind of an unpleasant kind of animation. We actually
used this in some shots and it was fine, but it still wasn't ideal. So the solution
we ended up with that ended up working really well was using "follow position" in
the dynamics body tag. And if you've ever used that, it means that it essentially
takes the actual position of the object into account when it does the simulation.
So it still tries to follow the original object, but takes physics into account
when it does that. So, if I turn that on, you'll see a problem immediately. I don't
know what that value should be, but let's just try it. Okay, now he's just floating
because-- but you can see-- I can't really drag him around. Once there is a dynamics
tag on an object, I can't actually-- I can't move it, I can't drag it, except on
frame zero. So if I say I want to put a key frame here, and then a key frame over
here, I can't move it to put a key frame in a different spot where I want to put
it. So, this is kind of an annoying thing, where we originally thought, "Oh we'll
need to delete the-- or take off the tag, put it back on every time we needed to do
animation changes, " but that obviously wasn't going to be ideal. So we came up
with another solution that I'm actually kind of surprised worked. That was, again,
using Xpresso to link it. So, even though you can't move it and apply animation
right on here, what we could do, is if I make a copy of this object-- and I'm just
going to put a display tag on it, so that he looks a little different. Give him
lines, and we'll make the object colored. There we go. So, what I'm going to do is--
This is going to be my controller. And I'm going to apply an Xpresso tag to it.
And what I want to do, is I want to drive the position of the dynamic object through
the position that I'm animating on the controller. So, just like I did earlier--
here's my Xpresso-- what I want, is I want the controller to be the "driver, "
and I want the object itself to be the "driven." So I'm just going to do-- the
easiest thing is actually just global matrix. And that's kind of a cryptic
thing, but really that just means you're transferring all of the position,
rotation, and scale data from one object to another object. So I can do global
matrix out of the controller, and global matrix in on the platonic.
And when I drag that over, now, that's literally all the Xpresso I need
to do here. That's it. So, again, it's not going to do much, but now when I move my
controller, you can see it's as if I had animated the object with the dynamics on
it. But I actually don't need to because it's just linking to the other object.
So I can just move this around, I can do whatever I want. You can see it's nice and
interactive. The other thing you could even do if you really wanted on this,
like I did before, you could set user data on here so that you could animate the
value on the "follow" position. So say that you did want to have him rolling
around, and then he's going to fly off the edge of the cliff, you just animate down
the follow position from pretty high where he's actually following it, to nothing,
and then he'll suddenly just keep on going with whatever physics wanted him to do.
So it's a very nice, controllable system, where we were able to both have complete
control over it but still get the reality of the physics of how this guy would
actually look rolling around. I think that it definitely shows in the final piece.
You feel like this guy is rolling around, yet you also feel like he is a character.
And of course with any piece like this, that's the most challenging part. We
wanted this inanimate object to feel like a character who actually had a mission,
had a goal, was actually trying to do something. I think we were pretty
successful in doing it, through using techniques like this, and also very
careful editing to sort of find the right moments we were pre-vising out. All right.
So sort of tangentially related to this, I'm going to move on from the gaming
awards to-- this is actually just a test that I did for fun. And I was showing it
to some people, and everyone was really surprised that I did it in Cinema 4D.
But it's again, using physics in Cinema 4D to kind of drive things, and kind of
unexpected uses of physics. So in this case, I was just curious if I could do it,
and it was-- I had been experimenting with the cloth system in Cinema 4D quite a bit,
and I figured, well, all this cloth stuff actually feels like something bigger.
Like, if you play with the values, it actually starts to feel like a rigid
object actually kind of collapsing. So, this is using a couple different
techniques, but I'll jump into the project itself and show it to you, and then talk a
little more about it. Woops, getting ahead of myself. And... So here's the project
file for this. It runs a little slow, just because this is a very high-poly object.
But if I turn them off, or if I un-link them, I guess I should say, and make this
other geometry visible, I think you can get a little better idea of how I'm
actually doing this. Hopefully you can see it on the screen pretty well, but the
bright green object here-- this is like an extremely low-poly version of what you're
seeing above. You can think of it almost as a cage, like if you think of-- this
specific, it's like a power line or pylon sort of thing, and it's made of these
girders that essentially-- you can think of it like a cage. So it's almost like
I was making a low-poly version of that cage. And, the trick then, is how you get
it from one to the other. So what you want to do is drive that high-poly version
through a low-poly. And, that's just this mesh deformer. And, what I'll do is I'll
copy this into a new scene, just to give you a better sense of how to do it. This
pylon was just a stock model, and again I'll copy it and show you a little more.
Copy the ground as well. So the one thing I did to the high-poly model is, I added a
lot of cuts in it, because essentially the way it was originally modeled, all of
these pieces of steel, they were completely just single polygons,
stretching the entire length of them. And if you think of simulating that,
essentially they couldn't bend because there was no geometry in there
for it to bend along. So I just needed to add geometry in there,
and I just used the knife tool. I think I just set it to...
There we go. I actually just set it to "plane," and just
set it to different axes, and just kind of like chopped it up in world space. And it
didn't matter what it was, I just needed more geometry in there for it to deform.
Once I had done that, I just modeled the low-res version, and that was
super-simple, just box modeling. I was just creating a cube, scaling it in,
extruding, cutting it up a few times just to make it. But again, if I show the high
quality, that's really all I was creating. I could probably do that right now but
it's a waste of time to watch me model this guy. But, I'll delete all these tags,
just because I think it's more interesting to show that from scratch.
Keep the display tag.
So, in setting this up, the first thing to do is figure out the
simulation on this guy. And really, it's just using again, like I said earlier,
it's using the cloth system in Cinema 4D. So it's "simulation," "cloth," and if I
just hit "play," it's going to fall through the floor. Or, it's not falling
through the floor, but-- it doesn't have any like set points that are rigid, so
it's just not doing what we want at all. It's also the values are pretty weird for
something of this scale. So, the first thing to do is set some points along the
bottom here as "rigid" or sort of immovable. Then go into cloth, and go to
dresser, fix points-- I just want to set the ones I have selected
there. I have one selected up there which I don't want so I'm going to deselect
those. Select these, and set. So now if I hit "play" on it, it's a little better.
You can see you're getting some deformation and things. At this point it
really is just like messing with this stuff, and I wasn't worrying too much
about real world values or anything, because I honestly didn't know what they
were. So I was just cranking up the gravity, and saying,
"Let's go really far down," and it kinda does that, and then kind of going
with-- I want some wind, so I'll turn up the wind strength, and see what starts
happening there. Like, "Oh, that's a little much." But, really it's just
messing with these values and playing with the stiffness. And as I said, I don't
actually know what any of these things really are. I just move them around until
I get something I kind of like. Iterations is one I think is really useful to know,
though, because this is essentially-- to me, I would-- it almost feels like its
stiffness. Stiffness is at 100 percent by default, but it's never very stiff, so to
me it's like I just up the iterations. I think that it's essentially-- if you think
of it like-- it's literally iterating the simulation but essentially it makes it
stiffer the higher you go. So, in doing this, I was really just messing with this
and kind of finding a value where it kind of did what I want, and then changing up
other values, and then breaking-- I was just dialing it in until
I got a simulation that I liked. It's not going to look good just because I
don't know what these values were and don't want to really mess with it. Another
thing you could do is, you can see the map options in here, these map fields. You
can set it for a text map to determine what areas are the sort of stiffer or
weaker points of your cloth. So I did that, for example, up here, like this is
the portion that in all the photography references I found, they all kind of bend
at that point. It's like right at the top of that vertical part where they start to
go out to the branching part. So I set it so that right there it would be really
weak, just so that that's the part where it kind of initially broke, and it would
move from that. You could even animate those if you wanted. I think in my final,
I actually animated the gravity. It started with no gravity, and the
gravity kind of turned on as I wanted it to collapse.
Let's just make this actually collapse, because it's not very interesting
when it kind of hangs out like that. That's close enough for my
purposes right now. Okay, so now we have a simulation, but it's not actually doing
much interesting because it's a really low-res mesh, and like you don't
want anything to look like that. So, what we actually need to do is drive the
high-poly mesh with this low-poly mesh. So the way we do that is, we need to--
I'll just turn that on so it's actually visible. So there's my nice high-poly
mesh. And the other thing that's important is it's completely contained within the
low-poly mesh around it. If there are any areas not contained, they'll do really
weird stretching and breaking and things, so you just need to make sure that it's
entirely sort of a water-proof contained element. If we go into high-quality geo,
and I just need the-- where is it?-- the mesh deformer. So, you can kind of tell
what it's going to do. This is like the most literal example where I have a mesh
on the outside, and I'm deforming a mesh on the inside. And that's kind of really
what it does-- is if you have animation on one mesh, you can drive another mesh with
that animation. So I'm going to put that inside the high-quality mesh because that
is the mesh I want to deform. And then inside this mesh I need to tell it what
cage to use. And, it looks like a cage, it literally is a cage which is encapsulating
it. So I'm going to take my proxy geo, drag it into the cage. And then all I need
to do is hit "initialize, " and you can see it's loading into memory, and that's
just, it's telling it what points on here are controlling what points in there. And,
I can hide the proxy geometry right now, because all I really need to see is this
high-res geometry. I hit "play" on it. And you can see again it's not a good-- the
quality of the simulation wasn't done very well, it was done very fast. But,
especially down here, you get this really nice kind of crumpling. If you
didn't know better, I bet you might suspect that was a proper simulation, but
really it's just cloth with a couple points. It's like, extremely crude. You
didn't get those nice pops-- like every time I've seen reference videos of that,
you get these kind of like, bends, bends, bends, and then suddenly like, pops. And
the cloth simulation actually does that naturally, and gets this really nice
motion to it. Back in my original file, the other thing
I did-- which again, I won't show just because it takes a little bit of time.
I made some wires, and I was just using spline dynamics, so it's linking points on
the mesh to points on the spline. And then I have that un-linked.
No, I deleted it. But if I go back to the actual render of it...
You can see, you get all that really nice detail in the animation.
And for having a source mesh that is that low, you actually
get a ridiculous amount of detail going on there, which I was really surprised I was
able to do. And even when that top part hits, it sort of crumples and has all this
really nice sort of secondary animation. Even the insulators, the things that are
hanging from the sort of pylons sticking out, those again, I used a vertex map on
the polygons right at the very top of them, so that the moment they hit they
really sort of wobble around, because that's the weakest part of it. They move
around a lot. So, I hope this is kind of-- again, it's not like a finished product or
anything. It'd be fun to take this to more of a complete shot or put it in a
background. But as a kind of an example of the kind of simulation you can actually
do in Cinema 4D that I don't think most people associate it with. And that there
are a lot of interesting tools in here that if you use in interesting ways, you
can actually end up with a really nice finished product. So, if you're curious
about more of the work that I've done or Imaginary Forces has done,
definitely check out imaginaryforces.com. If you want to chat with m