AMANDA: Hey, everyone! Last week we wrapped
up Unreal Indies Week, a celebration of indie
teams from around the world. Make sure to check out the
indie-inspired tales of finding funding, how your surroundings
can impact your game's design, choosing whether or not to work
with a publisher and many more. Pop over to the feed to explore
these resources to help you on your game
development journey. Previously we shared the news
that RAD Game Tools had joined the Epic Games family and now,
its industry-leading compression technology
"Oodle" is available for free in Unreal Engine. You can start slashing
your download times and get players in your game
faster by pulling the master branch in GitHub
- or if you can wait, it'll be integrated into the
Unreal Engine 4.27 binary. April's free Marketplace content
has arrived and it's no joke! Adopt your own German Shepherd,
scale up with some fin-tastic fish,
give them a voice with a
plethora of sounds, snuggle up with
some purr-fect cats, and keep them safe in a
brand-new modular home. Download them all
from the Marketplace! Volume 2 of the Virtual
Production Field Guide is now available--this resource for
filmmakers offers a deep dive into remote collaboration,
visualization, in-camera VFX, and animation, in addition to
insights from creators who have embraced the craft. Download it for
free from the feed. If you haven't seen them yet,
new Unreal Engine forums have arrived as the
first in a series of updates coming to the community. The new platform boasts a fresh
coat of paint and the upgraded experience features better
search and discoverability, performance improvements,
more customizable preferences and notifications. We hope you jump over,
try out the new site, and share any
feedback you have for us! NVIDIA GTC is on the horizon! Join the Unreal
Engine team April 12 -16 for an action-packed
schedule of presentations covering the latest developments
in real-time visualization. Head to the feed and take a
look at what's on the agenda. With the world
coming to a standstill, BMW shifted to an immersive,
multi-format digital event to unveil its
next-generation of vehicles. Go inside the virtual
production and discover how this new
approach allowed them to reach their global audience. Now popping over to our
top weekly karma earners. Shout-outs to: BamaGame, ClockworkOcean,
Everynone, GrumbleBunny, LunaNelis, Nightjass,
T_Sumisaki, Nachomonkey2, Pierdek, and mightyenigma First up, we're featuring
the Epic MegaGrant recipient ABERTHOL,
a contemporary ballet feature film created by the Renaissance
Dance Theatre Company. Watch the complete trailer
of this fascinating piece, then take a peek behind the
scenes at renaissancedance theatre.com/aberthol. Play as an imp, created
by the sun's last spark in Imp of the Sun,
a handdrawn 2D platformer, from Sunwolf Entertainment,
where fast-paced action meets a Peruvian-influenced
artstyle and soundtrack. Follow the game's journey
to its upcoming release, on the Epic Games Store. And last up, DayDream is a
stylized narrative platformer, created by the small
Russian team Frozen Line. As Griffin, you'll be saved
from the clutches of despair by your friend Birley and begin
a puzzle-solving adventure. Wishlist DayDream now on Steam. Thanks for watching this week's
News and Community Spotlight. VICTOR: Hey, everyone. And welcome to Inside Unreal,
a weekly show where we learn, explore,
and celebrate everything Unreal. I'm your host, Victor Brodin,
and today we've invited a couple of developers,
designers. From Torn Banner,
please let me introduce Aurelien Larue,
senior level designer, as well as James Arkwright,
lead environment artist. JAMES: Hey, nice to be here. VICTOR: It's good
to have you here. I mentioned this on my Twitter,
but also previously, that I think I talked
to your colleague Alex. E3 2019 was when we
started talking about it. And I pitched, hey, I want you
guys to come on the livestream and talk about Chivalry. And today, here you are. So I'm very excited. Hoping we're going to
see a lot of cool stuff today. I've already seen a little bit. But I'm going to do a
very little amount of talking, or as little as possible. And so I would like to
hand it over to James. JAMES: Awesome, yeah,
definitely a long time coming. And the game's been in
development for a couple years now. So that's kind of funny to
see those little interactions kind of come to fruition
down the line later. So I'll talk a little
bit about the studio, just to start,
and give a bit of the context. Torn Banner Studios is
located in Toronto, Canada. It's a studio about 35 to
40 developers, depending. And the game we're
making right now, which is coming out
in two months today, is Chivalry 2, which is a sequel
to Chivalry: Medieval Warfare. It's best described as
a first person slasher. And today we're going
to talk about the art and design for our levels,
which for Chivalry 2 are a lot larger. It's 64 players,
these big team objective maps. So we're going to hopefully
break it down a little bit and show you some of
the workflows we've used, and how we've made
some of the stuff. And we'll talk about level design,
and art, and kind of touch on as many
subjects as possible I suppose. Cool, I have the editor open. I guess I can get started. Anything else you want
to cover beforehand? Cool. VICTOR: You're
looking good on my end. JAMES: Beautiful, OK. Let me full screen. So this is one of our maps. It's called Red Helm. It's a team objective map. And what that
means is that there's two factions in the game. There's the blue
people basically, which is Agatha,
and the red team, which is Mason. And they hate each other. And they're always
trying to kill each other. So in this map,
in this context it's the Agathian army invading
this big Mason fortress. And you can see in
the background here is this castle,
which is the goal of the level, which is where the Agathians
are trying to breach into. So you start off in this field. And most of the
goal of the map is to push these siege ramps
by walking along and fighting alongside them. And you're trying to push
them all through this part of the map. I've turned down
some settings because my pandemic work-from-home
computer is not great. So I'm going to like
adjust some stuff on the fly. So if you see my frame
rate change dramatically, I apologize. But to give a better overview
of the map and the size, this is one of our bigger maps. And this is about as big
as it gets for 64 players. So you start off in this field,
pushing these siege ramps. You're actually starting with
these siege towers, which allow you to climb this wall. So you push the siege
towers all along these fields full of burning rubble. There's catapults
firing this whole time trying to destroy the wall. The siege towers back there,
big, tall guys, they reach this wall. You breach the wall and
capture the wall as Agatha. Once you've captured the
wall you get to open this gate. The siege ramps come through
and kind of set up position here. And then you burn down
all of these Mason tents. And then you
continue on to the city, pushing those siege
ramps all through this huge like dense city. There's a bunch of
branching paths that they take. One of them comes along here. There's more city in
the back over there. And you push up to
these walls of the keep. And this is where the
siege ramps set up, allowing you to cross this moat. And so you go up this moat. And you get into this wall area. And you capture this courtyard. And when the
courtyard's captured, you finally get into the keep. And here you kill
the Mason heir. So all of that was
basically me trying to set up that there's a
lot to each of these maps. There's multiple
different stages. Every objective,
stage to stage, changes. So in the first one,
the first objective is you're pushing something. And then the second objective
you're capturing something. And the third objective,
you're burning this thing down. And so throughout the
course of each level, it changes a lot,
at least for team objective. There's also deathmatch,
which is just killing people. For the context of this,
we're talking about these big, open maps,
and how we've made them. I'm going to turn this back down
and get some performance back. So broad brush strokes
artistically for the level, we've tried to focus more
on making large sets of things and dealing with these
big environments, which means that we're not
focusing on individual props too much, or slower workflows
like sculpting and baking things. But a lot of our
workflows involve tiling textures or trim sheet
textures, which you can very quickly apply to a simple mesh. And it gives you the
idea of something quickly. So when we're making things,
we try to make a lot of them at a time. So for these spikes,
for example, we don't just make a single set of these. We make all of these different
variations of these spikes. And when we make this big,
wood wall, we're not just
making this one thing, and sculpting it all
nicely and calling it a day. We're trying to make
this huge wall that spans the entire level. So a lot of our
artistic workflow is about using a couple of things,
and stretching it as far as possible,
and getting a lot out of the smallest amount of effort and resources,
I suppose. I could take a look
at some of these. Our mesh and material set
up is really simple for a lot of the art here. If anything needs any more context,
let me know. Hopefully this is
fairly straightforward. I'll try to keep it
not too or low level and try to land
somewhere in the middle. The meshes are very
simple and straightforward. It's just spikes. These might have
been Megascan spikes. I'm not sure. It's hard to remember. There's been a lot of
things that go into the game. So we have these
spikes and this rope. And there's a little decal. Oh, that's broken in 4.25. You can't isolate it anymore. The tips of them
are a little decal thing to give it more wear. But that's it. It's very straightforward. The wood material that's
applied is literally just like a tiling wood
texture left and right. There's no baked nothing. And some things we
do sculpt and bake, and pour love and time into. But many things-- and this
is like a pretty common game workflow-- you can get away with these
easier and faster construction methods. And you don't lose
any fidelity at all hardly, especially in a game with
64 players where heads are being cut off,
there's catapults going off, and it's raining. No one is really
stopping to look. They're just taking in all of
the cool stuff around them. So instead of spending a
week making one set of spikes, we spend a week and
get 100 set of spikes. And then we can
make a really cool level. One thing that we've done
to various effect, hit-and-miss, is to separate
these things out by-- we've leaned into
these material IDs more. So you can see
I isolate the rope. That's the rope material. I can isolate the wood. That's the wood material. And then we had the decal. Maybe it does work and it's a decal,
and it's not showing. That makes more sense. But the idea here is that
it's a little bit less performant. It's an extra set of draws
to have another material on a mesh like this. But again,
it allows us to work faster. And we can make
up for it in other ways. And I'll try to talk a little bit
about performance later on, and culling,
and some of the lot optimizations and stuff we've done,
which allow us to kind of push it. You could also
combine these things into a trim sheet,
which we've started to do more recently,
which has allowed us to have more and more
savings for our future maps. So we're kind of always
trying to iterate on it and improve our process,
and make things more performant as well. So yeah,
that's just like a basic mesh. And that's what
populates the vast majority of all of these levels. We use things like a
landscape for the landscape. Shocking, I know. And there's the procedural
grass in the landscape, which populates
based on terrain layers. That's pretty much
the extent of it. We have toyed
around with the idea of doing like rocks or
other procedural meshes in these sort of areas. But it's kind of nicer to
just hand place those, I find. Some other things we've done,
we have these like scattering
plank masses and all of these rock piles. Doing it this way allows
us to really quickly put down an entire group of
a mesh real quick, and populate a big
environment like this. Originally we had done
things such as placing the rocks individually and converting
them into instances, which allows it to be performant,
and allows us to have a really granular
control over the placement of things. But it's a little bit too
much effort for the result. And so using things like these
allows us to work way faster and to cover this huge area. Let's see if I can get a
character for reference size. So that's how
big a character is. So this first landscape
area is pretty big, and takes quite a bit of
time to get through, especially if defenders are holding it. We have this huge, awesome,
like fortress, curtain wall thing. Basically built the
same as those spikes, in principle, just with a
couple of simple materials. I think there was a decal that
goes along this interior space here. You can go in the interior
of this where you fight a lot. Again,
the same sort of thing where it's like a tiling wood material. And then we add things like decals,
like this for variety. See,
I could toggle it on and off, and you could see what it does. It just kind of
adds like grunge. So most of our
workflow is about trying to make it look as good as possible,
obviously. But because the maps are so big,
we're leaning into these
ways of working fast. Just a lot of other games do. This is nothing super revolutionary,
of course. We're just trying to keep it
like fundamental and solid so that we can produce
as much as possible, and keep pushing
the quality bar. I can show a material,
cause I think that comes up from time to time. So here's a material
and what it looks like. I would open the
master material. It's nothing super fancy to show,
though. And I'll have to compile
shaders because I'm at home. So in an effort to not
disrupt the stream in any way, we'll look at the material instance,
which is this. It has all the parameters. And you can just see,
there's not really too much to it at all. There's like a detail
normal map applied, which you can see in
a preview window here. I can make it
something ridiculous. And you can see,
it adds detail normals. A very fundamental
thing as well, which is used in a lot
of games and places. There's a really
simple texturing setup, which is just a color texture,
an ARM texture. So ARM for Ambient occlusion,
Roughness, and Metallic, ARM. And then a normal map
is a very common thing. In any sort of like
marketplace asset pack, you'll find a very similar
setup to what we have here. A couple of switches
for random stuff, using the detail normals. We try to keep it
as lean as possible. And this particular
shader is used on like 90% of the objects in the game. So we want it to be
as minimal as possible. We have some other parameters here,
like brightness. Hey! Even these things could
be roped into the textures, and it would save a
little bit of shader effort. It would just mean
we have more textures to manage, and deal with,
and produce. So in lieu of doing that,
we do have some parameters to adjust them. We can adjust roughness,
desaturation, things like that, which give us
some different looks. One thing to manage, and
we've had a little bit of difficulty managing this,
but I think we're in a better spot now than when we started,
is that it's really easy to go, and choose, and adjust
the material in a way that's not compliant with
physically based rendering. So you can get a wood
that has a metal to it, which is impossible in real life. Wood isn't metal. So by exposing these parameters,
it kind of puts the onus on art more to be careful with
what they're making. And you have to check stuff. A lot of the time you'll be
making this wood shader. And I want it to be like darker
really quick, in the beginning. We don't do this as much now,
but let's say in the beginning, and we just want to make
it darker or something, or go for a specific
look and dial it in. And so we give it a little
bit of metalness, which you're not supposed to do that. So by having these exposed,
we have to manage it a little bit more. But it does give us
some more things to play with when we need to,
which is often. Again, big maps. We're trying to
cover a lot of ground. So when we want
to vary materials, varying it in material instances
is generally very fast for us compared to making a
new texture or something. Yeah, there's some other
cool stuff happening here. There's some
simple particle effects on this burning section. This is where the Agathians
storm this part of the town. And they try to burn down
these tents, and this wagon and stuff. Pretty much anything red
can be burnt down and broken. And for that,
it's really simple. Basically just
dissolve the mesh out and add a fire effect,
similar to what you'd see here. So it's nothing too crazy. But it gets the job done
and looks pretty cool. And it allows us to
have this cool objective of burning something down. And it's really like a
middle sort of objective. The bulk of the action
of the game takes place-- or in the map, rather,
takes place in this town. And that's where a lot
of the art effort went into is trying to make this
as detailed as possible. So you see we have
all these little paper meshes,
these like hundreds of rock meshes, little grass tufts and stuff. Just trying to cram as
much detail as possible into it, little rock meshes
that kind of like go along the sides of
things to hide that seam. Without them,
it looks very video gamey. There's this harsh, jagged line. And when you put it in,
that line mostly goes away. So that sort of thing
really boosts the quality. And if you do that everywhere,
or as much as you can, the overall quality of the
level goes up significantly. And so all of the detail that
we can pack into here, we try to. It is kind of a push and a pull
to manage the performance of this sort of thing. Let me get my
details panel over. So when I selected this guy,
it selected a bunch of them, right? And you can see that one
is culling in and out, if I move back and forward on the camera. It's a hierarchical instanced
static mesh you can see here. Which basically means is
that the HISM, as it's referred to, is like an instanced
container that controls the placement
of all of these meshes. So we place all of these meshes,
and then we convert it via this little-- let me see if I
can get that going. We have like a scripted
actor actions thing. And we can convert it to
an HISM with a little Python script that was written. And basically
what that does is it takes all of those
individual meshes, and that makes one big actor. And the only
thing that it retains is the transform and the location,
scale, position, rotation of those meshes. So it converts-- I don't know-- 100 actors throughout
this part of the level into one actor,
which is huge savings in terms of performance. It dramatically
reduces the amount of stuff cluttering
up the outliner that we have to look at. So it's really good. It's just like a little bit
more clumsy to work with. But we've tried to
do that sort of thing where possible to keep these
little detail objects in check. Without that, if like start
removing a lot of these, you can see how
it gets really empty. Like the bulk of the environment
is still there, of course. But all the stuff
that like adds detail and makes it come to life,
when you take all of that away,
it's like almost a completely different environment
and a completely different level of quality. So finding ways to continually
add these little small meshes, decals,
and stuff has really added a lot to these big environments
and allowed us to get away with a lot of the stuff we do. I mentioned decals just now. We use a lot of decals. They are not the most
performant thing in the world, especially on
consoles sometimes. So we've had to rein it in. I think we used to
use them very liberally. And now we just use
them sort of liberally. The decal here is
like some footprints. And we just place
a footprint decal. And it adds these nice,
muddy footprints. It has very similar parameters
to what I showed with the wood where you can kind
of tint the puddle color, tint the roughness and stuff
to make it look more wet, things of that nature. And we use decals
pretty much everywhere. You can see,
they're on the corner of this that turns this horrible,
sharp edge into like a way
less horrible edge. So yeah,
all sorts of tricks and little things that we've used to get away
with and to try to make it detailed. Pretty much everything,
though, is constructed in those same ways. It's not like a very
high resolution mesh. Where's wireframe? You can see like the
individual triangles here. It's like pretty simple. Then the walls are
like completely flat here. All of the detail
comes from just adding these wood boards in a geometry,
adding a decal in here, and adding some material
variance in the material. And then when you
layer on like this porch and like all the roofs,
the chimney, this fire, the cart, all the papers on the ground. And the end result
is very detailed. But it's really just a
simple mesh operation that we've done like
10 times in a row. So that has allowed us to
make all these different houses. It kind of goes back to what
I mentioned at the beginning with the wood spikes,
where we don't just want to make one thing
and invest all of our time into making one thing,
even if it looks really nice. We want to make
like 50 objects in a set, and invest our time into
making like a width of things as opposed to one
really nice thing. I'll keep going through
the level a little bit, just to touch on
some of the other stuff. This is the courtyard that
you have to take as Agatha. There's a hanging man there. Oh, no. The courtyard is in front of
this giant, awesome castle, which is, again, constructed
very similarly to the houses, the wood, and everything else. It's all pretty much the same
fundamental sort of thing. I clicked on one of the
edge meshes for this castle. We added these edges that really
gives it more detail and depth. You can see I can turn it
off and then hide it again. And it's like a pretty
substantial amount of detail in silhouette of the edge. You can see this edge of it. It completely transforms it. It turns it from something
that's very simple and not the most interesting,
to something with a lot of character,
all this broken stonework here. So again, it's an HISM,
as I showed before with the rock, just like a bunch of
meshes grouped together in a very performant way. We use a script for it,
but you can do it with blueprints and other methods to do this. We do it less now because
of the recent engine rendering adjustments that have happened,
which kind of does a lot of it dynamically. We are seeing a huge benefit
in the recent engine upgrade. We were on I
forget what version, 4.19 or 4.20 for a long time. And now we're on 4.25 with
some things taken or leave them. So the dynamic mesh
instancing is like huge. It has allowed us to
gain a lot of performance without having to do this,
if necessary. We still do. This map was created
largely before we switched engine versions as well. So we still use
these techniques. And they're still super valid. And we'll still use them
going forward in certain areas. But we're less dependent upon
it now since the engine upgrade. And kind of every
engine upgrade seems to have something
like that that is good that we can take that
makes our life a little bit easier in terms of art. We get a little bit
more performance from somewhere or another. So eventually the
attackers take the courtyard and open this door. We're now in this keep. The keep is really cool. Cause it forces all 64
players into this one, tiny, little spot,
which is really chaotic. There's a thrown over here
where the heir of the Mason dynasty lives. Well,
he doesn't live-- whatever, he lives in the castle. He sits on the throne. And one of the players-- the top scoring player on the
Mason team spawns as this VIP, as it's called. And their job to win
or lose the map-- it's pretty much all up to them. And they just have to
survive this last stage for a few minutes. And then if they survive,
Mason wins. And if they die, Agatha wins. So it's a really unique stage,
very similar to other games that have like hero characters
that the player can play as in a multiplayer setting. All of the focus, though,
is just on one person for this, though. So the whole team tries to
crowd around and defend him. The whole attacking
team is trying to do anything
possible to kill him, like throwing fire pots at him
and shooting him with arrows. We have these destructible. So up here is a chandelier. And you can shoot
the chandelier, and it falls down and
shatters into a bunch of pieces using this cool system
that exists in Houdini, which basically simulates the
fracturing of an object, and then allows us to import
it in a couple of different ways. I can actually-- a
little bit easier example of that is back here with
these mantlets, which are these like shields on wheels,
which just exist to basically protect the player
character from like archer fire. So I'll drag in-- this is just like a skeletal
mesh with the animation on it. And see what happens. I'm just dragging the
timeline to play the animation. And so when you
break the mantlet by striking it enough times,
the health reaches zero, and it explodes. And this is all done in Houdini. You can see, it's just these
different parts of the mesh. They're all detached
and separate. And we try to keep them
enclosed to prevent holes being seen by the player, of course. And basically what
happens in Houdini is a little explosion is spawned
in the middle of this mantlet, kind of like where the cross is. And all the parts just
fall away with gravity. And then we take
that simulation, and we import it into Unreal
as either a skeletal mesh, or as a rigid body vertex
animation material, which is kind of a weird concept. It's starting to gain
more popularity. I'll see if I could find
a good example of it that I can demonstrate. Which will take a minute. VICTOR: Got
plenty of time so far. JAMES: Sweet. There we go. There's a texture in question,
once it loads. Which is slow because my
computer is slow, apologies. Hey, there it is, OK. I'll turn off the alpha. I can turn off every channel. The vertex animation
texture is baked in Houdini. There's a lot of
good documentation on the internet about it,
if you would like to deep dive in this sort of thing. It allows you to take a
simulation from Houdini and convert it into a
regular static mesh. And then using world position offset,
every piece, like I showed with
the destruction before,
like every piece of this, it becomes like a pixel of
its location in this texture. So basically,
the shader just reads the texture in whatever direction. And that controls the transform
of each of those pieces. And it allows us to do
this same thing done here with a skeletal mesh,
but a little bit cheaper using a static mesh. There's some drawbacks. There's some weird
shading stuff that happens. So we kind of use it
in particular instances. But again, another
technique to retain optimization over these things--
and it also allows us to add this cool
stuff to the environment that we may not be able
to get away with otherwise. So the chandelier that
fell down back in the keep, for example,
we can use that on it. And we don't necessarily
want to make the chandelier a skeletal mesh,
because there's so many parts. There's all these little candles,
and bolts, and rivets, and stuff. And it gets even worse for
more complicated things too. So we can use that technique
and make this a static mesh that explodes using that. And it's just a lot cheaper. It's really fast to
iterate on and produce. And it adds this cool
stuff to the environment that you can interact
with as you're playing. You can shoot
down the chandelier. That hanging body that
I mentioned previously, you can shoot that guy down too. The goal is that anything
that's like hanging up is a trap that can be
shot down by players, and land and kill enemies,
which is really fun. You can like time it with a bow,
or you can like throw your sword,
or whatever. So we're always trying to
add more cool little events and spots like
that into the map. Same with these catapults
way back here at the start. They can be broken. So yeah,
just as we go and produce the game, and in the future as we
produce future content as well, we're trying to make it all
as like interactive as possible and add these interactive
parts to the map. It is a big map. It takes a long amount of
time to complete, generally. It's somewhere like
maybe like 15 to 20 minutes if one team crushes and like
skims through the whole map. You can fail at any stage. So if the defenders
win after five minutes by just holding the first stage,
that's possible. But to complete the map,
they're long maps. It's like 15 or 20 minutes. And maybe longer,
maybe more like 30 if it's like a good
back and forth battle. So we're trying to
always add little things that the player can use to
have fun and keep it interesting. There's lots of carryables. There's this bell you
can pick up and throw. There's all of these like barrels,
and wheels, and stuff that you
can pick up and throw. Pretty much constantly
trying to add as many things to the environment as
possible that the player can interact with and play with,
because the game isn't just about cutting
people's heads off. It's also about hitting
people with barrels, and having fun in like these weird,
wacky ways. So there's like these ballistas,
which just shoot really strong bolts,
like a giant arrow bolt at people and kill them. Yeah, just always trying to
come up with new ways for people to kill each other,
which is a fun design task, and a fun for art as well,
because I get to blow everything up. Yeah, any questions
so far about any of that? Or anything you want
me to go deeper on? VICTOR: Yeah,
let's dive through some of them. One that stood out early on,
they were wondering if
this was just one map or if it was sectioned
into sublevels? JAMES: Sure, yeah. I'll show the sublevel thing. So real quick to touch on
what just happened here, as I back away there's
distance culling, which is an optimization method to
remove things from the screen. So the character
never gets this high. So you see things cull
out really aggressively. What I did earlier was
I adjusted the scale to keep everything in view,
which happens on like higher quality settings. Sometimes we play
with that and adjust it. Anyways, I digress,
but that's why things are culling in and out. To answer the question,
we do use sublevels, but we actually keep most
of the art on an art sublevel. And we restrict other things
for like non mesh stuff generally. In this case we
have a high level, which is like higher detail stuff,
which actually should be merged into art so
it doesn't really need to exist. We have a sublevel
for atmospherics, which covers the lighting,
like the sun, the fog, all of that stuff,
our entire lighting setup, and then particle systems. Like you can see
the fire and stuff. A lot of that's in atmospherics,
the birds. There's a sublevel
for Level Design, LD,
for them to put whatever they need to function in the game
to make the map happen, and just some other random stuff,
the sound. The terrain has its own sublevel,
et cetera. And a lot of our
levels are very similar. So the persistent level handles
a lot of the level logic stuff, and then like
the level blueprint for transitioning from stages. But in terms of
separating the art out, we actually kept it
all on to one sublevel. As we produce it, sometimes
we'll have a different level. We'll segment it more,
and then we'll merge it into the end. We don't load or unload
anything like at different stages. Because you can spawn
very far back in the map. And you'll have
to run all the way. So it's not super viable
for us to de-load this castle, because a player can spawn like here,
for example, when they're fighting in here. So a lot of the times
when we're making it, we'll have more sublevels. And then we'll combine
them down into one. And that's been a pretty
good workflow so far. It allows each artist to work
independently without stepping on each other's toes that way. Because there's many artists
working in each level at one time, generally speaking. And it also allows us to not
interfere with level design, because they are also
concurrently working with stuff. And sound is going in,
and all these different departments. So we've segmented it in
that way to kind of separate by department. And then everything
comes together at the end. In terms of departments,
the art team is four or five environment
artists right now, which is about what
it's been for the duration of the project. It's kind of like
gone up and down. But it's not a huge environment,
our team, for the amount of maps
and the size of the maps that we're going for,
which kind of speaks to a lot of the
techniques that I've described and how we've gone
about constructing things to keep it as fast
as possible and try to keep the quality bar up
as high as possible as well. There's also character
artists on the team. I think we have
three character artists. And they've done an incredible
job with all the characters as well. They help out
time to time as well. Those hanging
bodies you saw earlier are based on character art. There's all sorts of
like customization options for the characters. But in terms of the art team,
that's pretty much it. It's a pretty small team
for the scope of the game and what we're
trying to produce. And this is just one level,
and there's many of these. And many deathmatch
levels as well, which are smaller,
but equally as detailed. So yeah,
kind of a constant struggle to keep elevating
the bar as well. VICTOR: Think we can
do another question? JAMES: Sure, go ahead. VICTOR: All right,
PredragPesic16 asked, it would be interesting to see
the collision on those spikes, for example. Was it done with the UCX
tool or by some other method? JAMES: Sure, yeah, absolutely. Oop, OK. Turn on collision. It'll probably get real slow. Hey, there we go. So the collision for these,
as you can see here, is basically just
a big mesh blob that captures all of the spikes
and keeps them as one piece. I'll turn it off and I'll
look at the mesh instead. That's probably a lot faster. We've done that for
player collision purposes. That was generated in an
outside modeling program and imported as a UCX collision,
so one primitive collision. There it is. That's the guy that
controls the player collision. There's also on
everything generally, there's a set of
complex collision, which handles interaction
for things like weapons. So you could shoot an
arrow through this hole. But if I go to the
simple collision, you could see that
you would not be able to walk through
that same area. There's also settings to control
that a little bit more as well. So you can like use simple
as complex or complex as simple, which allows us for-- let me see if I can find a
good example of where that would be used. If this is an individual spike,
that's perfect. So this individual spike-- I don't know if it does right
now-- it does, I'm not a liar. You could see the simple
collision is just a box. It may actually be-- it is a convex. So we did import that
for whatever reason. It's not like a box
generated through here. But it uses simple
as complex because it doesn't need a special
set of weapon collision to get around it. It can have the same collision
for the player and the weapons, and it's totally fine cause
it's such a simple shape. There's nothing
complicated about it. So I did the collision
view mode earlier. There's lots of elements
in the map obviously. Especially in a field like this
or when you get into these more town sections, it's really
complicated with like stairs going up,
and all these like planks and stuff. So we've done our
best to smooth that out. There's a little bit
of leeway for what players can walk across. And it's totally fine
without too much hitching. And you can also see on
things like here have the collision removed to make it smoother. There's a little bit of clipping
with the feet sometimes. We kind of just tune this as
we go to see what will work and what won't and if
it'll cause a hitch or not. But yeah, we're kind of
always mindful of collision. Collusion is a big issue
with 64 players as well. It's kind of like
a constant battle to keep things
smoothly colliding, and also have all
of this little detail, because we want these
little curves and things, but we don't want them to
interfere with the gameplay. Kind of level design requirement
as well that they're always trying to keep everything low. But if you remove it,
it's like now that it's flat, it's a very uninteresting
ground section. So adding it adds a lot,
but it adds a collision problem that we have to address. Yeah, it's a constant struggle. VICTOR: GamerMaximas is asking, are you regenerating
nav mesh at runtime after physical destruction,
I think relating to what did you call those? Mantle? JAMES: Mantlets. VICTOR: Mantlets, cool. I learned a new
medieval word today. JAMES: Oh, yeah. VICTOR: I'm just curious. If you were regenerating
the nav mesh once physical
destruction has occurred, or if those are only visual? JAMES: Aurelien might know better than I.
I don't think the nav mesh is fixed after
they're destroyed. I think it stays
with an open hole. AURELIEN: There is
actually a [INAUDIBLE] that mesh to be filled. We use this with doors too. So you can still use a
nav mesh after the object has disappeared. JAMES: Beautiful, there you go. Yeah,
you can see I toggled it with P, and it kind of shows that. Yeah,
similar things like with this guy. This comes down. The players can like board
and ride the siege tower. And then when it reaches
the wall-- it has to have like a-- we've put this little like
nav mesh collision section to be generated here. So it doesn't exist
during the game. There's nothing here, obviously. But it allows the
bots to path correctly as they go down onto the wall. Yeah,
collision's real complicated. It's a big thing. It's a big thing to
constantly handle. Like I said before,
we're always trying to-- it kind of feels like
you have to fight against it as an artist to make
the stuff you want to make. But that's part of like game
development is accommodating other factors of the game. So obviously having the
game play good and be fun is goal number one,
above all else, at least as far as I'm concerned. Even as an artist,
I would prefer the game to be fun, as opposed to like
be artistic point of excellence, if I had to pick. Ideally you have both. So we're always kind
of going back and forth. And collision is definitely
one of those things. Do we have the mantlet and
have it not adjust to collision? And like which is like a
more fun and artistically better option? We're kind of always going
over those sorts of things as well. VICTOR: reopp was wondering, how are the flying birds made? JAMES: Oh, boy. I didn't make them. I think it's just-- it's definitely a
particle system. So I think it's just a bird mesh
with a world position offset on the wings. Let me see if I can open
up the material, which might show a little bit. I don't know where the mesh is. You can see it's just like
oscillating back and forth. It's called crow. I'm just going to try
to find it real quick. VICTOR: While you're doing that, I'll just ask another one. We should have a-- perfect? Oh, you found it. All right. JAMES: You can see here it's like horribly stretching the
mesh in this preview setting. But in the real game
it doesn't do that. They just go up
and down a little bit, or like side to side. But it's basically just
a particle mesh system that spawns them. And then they just rotate
around in the particle system in a loop. And we have a couple
other configurations, like seagulls for a beach level,
and things like that that kind of do
different patterns and stuff. I'm toying around with
the idea of using Niagra in some capacity to
make some cool bird stuff, but nothing yet. We're still using Cascade
for all of our particle stuff. So yeah, just like pretty simple,
straightforward setup. Just like a simple mesh
and world position offset. VICTOR: Sarah_3D was asking, what software do you guys
use for creating the 3D assets? JAMES: We use everything imaginable to
create the 3D assets. VICTOR: I guess
the modeler's choice? JAMES: Yeah, yeah. Just the people that we have
here all use different stuff. So we've kind of
gotten into the habit of like allowing for all
these different things to exist. So there's not
a lot of tools that are dependent upon
one modeling package. So I use 3DS Max. We have artists on
the team that use Maya. We have artists on
the team that use Modo. I like Blender as well I
use in particular situations. Houdini, as I mentioned before,
to generate all of the destructibles. So like literally is-- not as many as we can is not
a good way of going about it. But we do use a ton
of different software, just kind of like what's
situationally dependent. The good thing about
being a small indie team is that we don't have to
rely upon having a team that like is dedicated to having
intimate knowledge of Maya or something, which is fine,
and it's easy to learn. But people are free
to just use whatever they're most comfortable with. For texturing,
we use a lot of Megascans actually, and a lot of assets as well. Maybe I'll cover
that in a minute. We use a lot of Megascans,
textures, and the Quixel suite. We use Substance Designer
for texturing occasionally, but not too much. Most of our textures
are actually from Quixel. And that's pretty much it. There's like some other random,
one off, tiny softwares. But that's the
majority of things. Yeah,
as I mentioned with Megascans, we have used it quite a bit. All of these rocks, for example,
are Megascans rocks. Whoa. We have another set of them
over here that are more granity. I'm actually not sure
if the foliage is derived from Megascans in every case. But I think at
least some of them are derived from
Megascans scans that we then take into SpeedTree and
produce little bushes and shrubs. There's not a lot
of trees in this level. But there are trees in the game. There's like some background stuff,
but that's not the same. Yeah, we use Mixer to
generate a lot of decals. I use them for
these puddle decals that are very commonly
used throughout the game. Basically just brought
a height map into Mixer, and it generates a nice,
little puddle thing. We've tried to leverage a lot. I think I said previously
that I wasn't sure if these spikes were
Megascans or not, cause it gets a lot of-- things get crossed. There's so much
to make that I often-- pulling from Megascans,
or making my own, or using Megascans
textures on my own mesh, the lines get blurry. So I think these are based on
a Megascan asset, which I then just like manipulate
a whole bunch. But we use it pretty extensively
for a lot of our texturing. Again,
it comes back to being a small team. With only three,
or four, or five artists, depending on the
time and the project, it's pretty impossible to
have like a dedicated texture artist, for example. Maybe the setup could be
worked into such a capacity. But we prefer to have
people be more generalized. So any artist can make
almost any part of any level. Everyone is very versatile,
and like fundamentally solid. And we trust them
to make anything. So we don't have a
dedicated texture artist. We just have like a team that
can do whatever we need to. And we rely on
things like Megascans to kind of fill in the gaps. VICTOR: That sounds smart. JAMES: Smart. VICTOR: Yeah, Jorge CR asked, could you show the
render stats in the viewport? JAMES: Sure. VICTOR: Is that RHI, I believe? JAMES: I'm just
going to set that back to the true thing. Boop. Yeah, it really just
shows like tris and some like memory stats. I think it lies about triangles. It's been very
inconsistent for us. But I don't know
what is time to time. I usually use stat
scene rendering for like a more
accurate mesh draw stat. I actually don't know
and didn't check if you can see my mouse on screen. Could you see my mouse? VICTOR: Yeah, yes. JAMES: Beautiful. So mesh draw calls down here,
it shows 1,600. We try to keep it below 2,000
for any view in the game, which is not always possible,
but it's what we aim for. It is kind of just a good
benchmark for performance. And earlier on in the project
we went really hard to try and get our draw call count low. And in doing so,
it actually affected other parts of art performance negatively. So it's more of striking
a balance between all of these like spinning
plates than going super hard to
reduce any one thing, such as triangles or draw calls. So that being said,
some spots shoot up much higher. And it's pretty much fine. There's not a lot of big art
hitches in the game at all ever. It's just something that
we take into account, and we are always trying
to optimize down as well. We've done a couple of things
on that front to manage draws. Like I said
previously with culling, we cull pretty aggressively. Because the player
is always at this height, generally-- you know,
you can get up on top of this wall, but you can't fly. So that means that we can
start culling things way back here, and it's fine. It doesn't matter. Mine's a little bit
lower right now cause my computer's not good. But yeah, we cull very aggressively,
distance culling. And we literally
just go through. We have a distance culled volume,
which maybe I can show real quick. And it's basically
just a big cube volume that covers the whole level. And it has these
different size settings. So if a mesh bounds is 25 units,
it gets a call distance of 1,000. And you repeat that for
all of these different sizes. And it kind of
varies level to level, depending upon what
occluders we have. Some levels don't
have huge walls that we can rely
on to cull stuff out. Some levels are just a big,
open field. And so they kind of
need different settings. So we use that,
and that catches everything. But it doesn't tune in the
settings particularly well. Just because the way
bounds are constructed, some things that we want to
cull soon have huge bounds. Like this board--
this set of boards, rather,
the bounds is gigantic, cause it has to cover every board. But we want these boards
to come out like pretty early, because even from like here,
they're invisible. Especially in the grass,
they're invisible. So what I do is I go
through in the Details panel, and I just manually set
the distance for every actor in every map, or someone does. And we try to cover
everything and catch everything. And that's had huge
performance gains. We obviously want to avoid
popping and things culling out, and the negative impact of that,
especially in terms of gameplay. But it's very manageable. And you can be quite
aggressive in maps like this where there's a lot of
walls and surroundings. And it doesn't impact
anyone too much at all, especially on higher
graphics settings. Generally,
the experience is quite fine. And we've optimized
everywhere else pretty well. So yeah, popping hasn't
been a huge issue so far. But we spend a
lot of time trying to sort out culling,
and make it smooth, and try to like
cross all the Ts. There's also occlusion culling,
which means that all the stuff behind here,
I can try freeze rendering. And hopefully the
engine holds up. Freeze rendering. You can see up in the top here,
rendering frozen. It has now stopped changing
the settings, LOD settings, and culling settings
for all of this stuff. It just takes whatever this
view was and freezes it. And that's what's
being rendered. So you can see all this stuff
is either being distance culled, or it's being occlusion culled
because it's behind geometry. It's being completely
blocked by something. And even so, there's
still things that fall through, which we're always
trying to grab and clean up. And you don't want everything
to be gone, of course. There's a huge
castle in the back. There's all this stuff. We want these
things to be visible. But that does a nice job. Between those two systems,
it really manages draw culls well. A spot where we haven't
managed draw culls super well, but is still manageable,
again, going back to this spike example. I think I mentioned it briefly,
but having these different materials
means having different culls, doubling them, in fact. If these were of the same texture,
rope and wood, it would be like
half the amount, whatever it is, like two per
mesh because of our lighting setup. So we're trying to
optimize that more and combine things
into trim sheets. For example, we don't
necessarily need wood and rope to be one separate material. It could be combined into one sheet,
which we then apply differently. That's something we've
started doing more recently. So for these older things-- I don't know if we do it on this one,
but we might. Yeah, so we have LODs
on everything in the game, of course. It's really easy with Unreal. You just automatically
generate LODs. We, in fact, have another little
Python script, Scripted Actions LOD Setter. Which all it does is it just
generates four LODs using the Unreal system for a mesh. The cool part is that you
can select like 10 meshes, and then click on it. Oh, no. And it'll just generate
LODs for all of them. So what we've done
for a little bit more performance gains is in
these farther away LODs, we just remove materials. So you can see in this one,
the rope is completely gone. In other ones we get even lower,
so we would maybe remap this rope to the wood,
because at a certain distance it doesn't even matter. Like you don't even
see the rope go away. And if you do see the rope,
it just looks like a brown blob. There's only so many
pixels that you have to worry about on a screen. After a certain amount
of time everything becomes a brown blob. So you can just consolidate
materials over distance. And that's another
way that we've saved a lot of performance. A bit manually intensive. We've kind of played
around with the idea of making some tools
that would help with that, but so far we haven't
needed to necessarily, and we've been
able to manage it. But yeah, always trying to
manage stuff and manage stats. I use these a lot
in the beginning, the different rendering views,
or like the different stat views rather. Less so sometimes now, because
we've kind of dialed in what we need more, and we have a better
understanding of what will work and what won't. So we still obviously use them,
especially in the later stages of a map when we're trying
to dial in performance and fix things. But for most of the time,
we just generate performance
like frame captures, and things of that nature. And that is very
sufficient for us. VICTOR: Yeah, always good
to remember that performance in editor does not always
equal the performance-- in fact, never-- JAMES: Significantly worse. Again, for reference, this is my
like home, pandemic computer. It's not my nice
office computer. And this is a very taxing level. You can see my frame
per second is like 15. It's not great. Editor performance is way worse. Like for me it's significantly,
significantly worse. And there's so
much more going on. If I was to play in editor,
it would be a little bit better. But it's nothing compared
to a cooked build or the finished game
that players will play. It's like night and day
in terms of performance. So yeah, I use this as like a guide,
like I said. And I try and keep it under 2,000,
and other metrics. But we're not like devout to it. We can stray,
and it's fine generally. VICTOR: BobsNotYourUncle was asking, did you do anything
to optimize your decals, considering how many you use? JAMES: We have
a different material for each type of decal. So how can I describe this? We use like a different
buffer view mode. Some have just normals. Let me see if I can
find the material. That's just a bit of a rickety
computer performance question. Yeah,
so here's our material library which shows a lot of materials. You can see color normal roughness,
color normal color. So we do use that quite a bit. And that's basically the
big separation of materials. We've gone through a lot
of rendering changes, which have made it very-- complicated us towards what
decal performance will actually be like for us. We started off the project
with deferred rendering, and then we switched
to forward rendering for performance reasons. VICTOR: Oh, interesting. JAMES: And then we switched back to deferred rendering. VICTOR: OK,
I thought it looked like deferred. I was going to say, wow,
what have you done there, cause-- JAMES: Yeah,
it was like forward plus. So it had some of the nice
things that deferred has. But we end up switching
back for a lot of reasons. We got some other
nice things back as well. And there was no
real performance loss when we switched back
either because of gains in recent engine versions. So decal performance
between the two seemed to fluctuate
greatly for us. So we kind of moved
away from using decals a ton when we were under a
forward rendering pipeline. We still use a lot of them. And now it's pretty OK
again when rendered deferred. I actually don't know if there
is like a staunch performance difference between the two. But we've kind of operated under
the assumption that there was. But we don't do anything else,
as far as I'm aware of, in terms of decal performance. We fade them out,
like everything else. Decals all have--
where is the window? They all have a fade distance,
which we, again, are pretty aggressive with. You can set it. Which one's this guy? If you set it really high,
it goes away. If you set it really low,
it's there. You can see once you
get to a certain distance, it'll fade out. There it goes. It's gone. And once it fades out,
it's removed and then not rendered anymore. So as long as we set that,
and as long as we're like careful about
how we use them, and we don't go super
crazy with them, it's pretty fine. It's been OK so far. VICTOR: I didn't actually know there was this
separate culling power. Not culling, but a separate
distance culling method used for decals. JAMES: Yeah, fade screen size. It's great. You can do some blueprint
stuff to set it as well. And we've kind of toyed
with some other options. But we largely just use what
Unreal has out of the box. VICTOR: Cool,
I love when I learn stuff. BobsNotYourUncle was asking,
how are you handling wind in the levels? Is it individually for cloth
and separate for the foliage? JAMES: Yeah,
there's a couple different materials. There's no one governing
actor or force on them. I can like rotate individual
flags any direction, and you see they just double
up in different directions. We've used a couple
different methods. The thing we use most is like
a rotate around axis shader. The principle is
very similar to what you would find anywhere else,
though, which is just noise
being applied in world position offset over a mesh. Same for the grass. It's just rotating
around its axis and then being
disrupted with noise. But a lot of our
wind setups from-- we've had a couple
of different ones. We had a Houdini
wind simulation setup that we used for a long time. We've switched away from that,
and now into a more generalized
approach that doesn't involve baking it per mesh. So we can just
take a wind material and apply it to any cloth mesh. And we don't have
to like bake it out in Houdini, which was a pain. But you can see here,
it's pretty visible. It's just like a wavy noise
going across it for this guy. But it actually varies depending
upon the flag and the context. We have some
things that are vertical, which act a little differently. You can see this guy uses
a rotate around access. So it just blows
away from the wall. It's like only projecting the
wind on the forward direction. And there's ones that
only work on the sides, and things like that. So we have a couple
of different options. And it allows us to like really
hand dictate what exactly that we want for
all of these things, because there's often
a lot of like clipping for cloth and stuff. So we have to get really
careful and specific with it. VICTOR: Cool,
we have some more questions related to environment. But I think it's
time to let Aurelien go through the presentation. And then in chat, don't worry. We're keeping all the questions. And we'll come back to
Q&A after Aurel's presentation. JAMES: Wonderful. AURELIEN: OK, thank you, gents. That was very interesting. There are some things I didn't
know myself, despite the fact that we work together. OK,
so we're going to move into sim map. But I'm going to talk about
how we make it on a level design point of view, how we make
it enticing and fun for players. So just as a little reminder,
and for those who don't know, this is what we call a
team objective map, which means that we have
the two teams fighting each other over a few stages. And each stage has an
objective that the attackers need to fulfill to progress
to the next stage, the following stage. So, for example,
here the objective for the attackers is to push those siege
towers up to the wall. And the defenders
have to prevent them to do so by gathering
around the seige towers and preventing the move. Because the way it works is
that the more players of a team is next to a siege tower,
the more it belongs to them. And then you can move on it,
depending if you are a defender or an attacker. So that's the basics
for a team objective. Progress through stages. In average,
we have five stages per map. And each map is
around 30 minutes. So it's an average of 5,
6 minutes per stage. This is what we aim for. But then like James said earlier,
it depends. If defenders are very good,
it can last longer. Or defenders can
just win before the end if they are very, very good. The way for defenders
to win is to have the game time reach zero. So yeah. So that's what it was,
64 players, 32 against 32. We have bots
filling the ranks of teams who are lacking human players. But overall,
it's always 64 players. So this is quite a challenge,
because 64 players, that's a lot of players. But at the same time,
it's not always 64. I will explain in details
what I mean after. But basically,
each stage should be able to comfortably
welcome 64 players, and add more options for
them for those same players to not be always
in the same spot. I will talk about this and
two more details after. So I'm not going to talk
more about this particular map, because James has already
given us a very good overview. For a disclaimer,
I did not work on this map. It has been made
by Ludovic Piraud who is the lead level designer,
and who has tons of experience. But we all contribute to
the maps during the process. So now I will tell
you how we come up with a map like this
in terms of experience. First of all, we have so Steve,
who is the CEO. And he is Chivalry himself,
right? So Steve, Ludovic,
myself, and John, who is our other level designer,
we gather and we discuss about
what kind of experience we want to give the
players for a specific map. So we always go for
the Hollywood fantasy of epic fights and heroes
who can defy great odds, that can take on 100 enemies. If you think about 300,
for example, that's a very good reference. But we also have Game of Thrones,
Kingdom Of Heaven, for example. I think actually this stage
with the siege towers, on the other hand, actually I
believe it comes from Kingdom Of Heaven. I think at some point there
is a siege of Jerusalem. And they bring big
towers to the walls. And then some
towers get tipped over. And people climb the walls. So of course,
since we have only 64 players, and we are a video game,
it's not as huge and epic as in the movie. But the core experience is here. We push siege towers. We climb them. We climb the wall thanks to
ladders that you have to build. For example,
you have a cart here. You take a ladder piece,
rig it to this ladder here. And then the ladder is built,
and you can climb the wall. And then when
you're on the wall, you have to take
[INAUDIBLE] house. So it's very close to the
experience from the movie. But, of course, we add our own twist,
our own style on vision, right? So this is just to give you an
example of how we function. So we come from an [INAUDIBLE]. And we link it to the narrative. So over here the Agatha
forces are retaliating against the Mason forces,
and are now trying to kill the heir
of the Mason empire-- kingdom, sorry. So the idea is it's a siege. And then we have forces
going through the city, up to where the heir is hiding. This is the basic
pitch that we start with. Then the way we work
is we split this fantasy in two different stages,
which are the stages that you can see here. I will just show each
stage very quickly, just to give you an idea. So here, like I said,
as an attacker you push the siege
towers to climb the walls. Then when you are in the city,
you attack the towers-- each tower and this and
this part to get the tower gate. Then you grab
torches from those fire pits to burn down the tents. Then you have ramps coming. And you have to push
them through the city. Let's see-- OK, so for this pass on this
one up to those walls here. When the ramps
reach those towers, then the next objective
is to take this courtyard. This works by being
the greatest number of players of one team in here. And once the courtyard is taken,
then you can access the keep. And you the heir. And the heir is played,
like Jim said, by the top scoring player
on the defending team. So as you can see, we have one stage,
two stages, three, four, five, six stages. So the way that we work on
those stages in the concept phase, usually what we do,
or what we used to do before the pandemic
is in our meeting room there are glass panels all around. So we can actually draw on them. So each panel is a stage. And we make a very rough
concept of what's going to happen. So for example, if I go back to
the siege tower stage, the very first stage,
I will draw two squares for the siege towers,
the wall, where people spawn for each team. And we know that
this is the experience that we want to give. Then we move to the next stage. And so on, and so on. And when we are
happy with this concept, that's when one level designer
will actually do the work. So we are three level designers. Each one of us has a few
maps that they are responsible for and that they maintain. But, of course, we help
each other for different tasks. So the level designer will
start creating each stage. Also our map depends
on what they want to do. By using what we call gray blocking. Gray blocking is creating
a space with literal blocks, like this,
when I do it quickly here. So let's say, for example,
that I want to create a wall here. I will put just a simple block. And then I can
very easily scale it. And now I have like,
let's say, two big walls here. And what we also have to
express to artists and to ourselves what we want-- let's say that,
for example, here it's a huge ramp. I will use a block out color. Green means, that's a pass. That's parkour. That's climbing. And this will be like
orange because it's static. And if, for example,
we wanted to remove this, we would use red. I will go into more details. But basically,
what you have here already is the beginning of a blockout. It is important for many,
many reasons. First of all,
it allows us to iterate very fast when we create a map. For example, if we decide
that this needs to be like this, there. It took me two seconds. If I had to do the same with this,
it is fully arted. I have to select
1,000 components, turn them where I
[INAUDIBLE] some. Try to select them again. So it is a huge gain of time. And so that's how
we will do it at first. We block out. Every week we meet,
and we look at what we have done, whatever the progress is. And then we can discuss things,
and see if the things that we planned
earlier in the concept phase still work in the
block out phase. So this is the phase that
has the most iteration, because that's where we need to ship,
literally ship the player experience, how to make it fun,
how to make it cool, how to make it so that
you want to do the objective, how to make it so that
you want to go around. What makes this playable,
comfortable to fighting, and fun. Because that's really
what we want to do. We want to make it fun. If not, why make games, right? So we have fun
while we make this so that you can have
fun when you play it. So basically,
we iterate, iterate, iterate until we think
it's good enough to move to the next
phase where it's going to be a bit more detailed. For example, let's say that
I am working on this stage. So those tents, carts,
and those are tents too, are our objectives,
what you need to burn. So what we will do then,
we will actually use actors. So as you can see, if you
look on the right on the Details, we can put a static mesh,
so a visual like this tent. To it we can attach
multiple components that gives them properties. This one has a
burnable component, which means that it is
an object that we can burn. What it does is that
when it's burning, it's going to assign
certain materials so that it can burn, certain-- a different static mesh
when it's rendered. But also,
what kind of damage we can do, like only fire,
or we can [INAUDIBLE] at this rate? In that case, no,
we only want fire, right? What kind of score it gives
to players when they do it. They are rewarded. The text that is displayed
on it when we look at it. Burn this tent. And the hit points of the tent,
et cetera. What matters here is that we
can very easily set up objectives, because we have lots of
components available to us that have been made by the
coders in C++. And we can very easily
prototype even a new actor like this. And then then,
thanks to Blueprint, we can link it to the
actual logic of the level. So I'm loading it right now. I'm not sure how
long it's going to take, but it shouldn't be too long. But just so you know,
as level designers, we do not touch C++. We have people
who do this for us. We only use Blueprint. There we go. So just a slow overview,
and then I will talk about all this
more detailed after. But, for example, all the tents
should be somewhere on here. There we go, burn tents. We can,
thanks to the component, know when a tent is burned,
which allows us to add a score to this stage. And this is very,
very easy to set up, which means that
our prototype maps are set up very, very fast. And that allows us to,
like I said, iterate on them very, very fast. Where it's longer,
where it takes more time is to actually make as a
flow interesting for players. So here actually I had
a very good example. I cannot draw on screen. So I'm going to
cheat and use this. Hoping it works. No it does not. OK, sorry, I cannot draw. So I hope you can see my mouse. And I will show you it. OK, so we have a philosophy to
make moving around a stage fun and enticing. We are putting options in front
of you too [INAUDIBLE] I mean. We call it the
[INAUDIBLE] effect. So for those who don't know,
a Plinko board is a little board of
wood with nails set up at very regular intervals. Then you drop a ball. And then the ball
just moves around, bouncing on little nails
until it reaches the bottom. That's what we want
to do for players too. So let's say,
for example, I spawn in this tower as an attacker. When I come out of the
tower I have a few options. I could get down the stairs,
or I could go left and right if I wanted to. So that's already a few options. Now that I reach the bottom here,
I have other options. I could take this
pass or this pass. Let's say I take this pass. Now I have more options. I can take this one or this one,
or keep straight. And let's say I go to this pass. I can go this way or this way. Do you see what I mean? It's a little bit like a
river flowing through our landscape. It's like a delta of a river. You have multiple paths. And you just follow
them as you feel like. Or if your attention is
captured by whatever is happening, like if I spawn
here and I see a fight here, I have a good view to see it,
so I'm actually going through and up. I can reach the
fight very easily. So this is the most
challenging for us, because if we don't nail this,
then the whole experience of the stage can
be-- can fail actually. Even if the objective is fun,
even if the art is perfected, and if you have everything
that looks very, very cool, if you cannot find your way,
if it's hard to get to anywhere, if you don't have options,
that's not fun. And all this is something
that players don't notice. Because like I said,
you just follow the path as you feel like. You follow cues. You just follow your instinct,
literally, to get to your objective,
whatever your objective is, whether it's the stage objective,
or people to kill, or maybe you want
to grab some ammo. Whatever your objective is,
we give you the ways to reach it by multiple means. And that also means
that when we do things like, for example,
this market here, this is great for our archers,
right? Archers can stand here and
shoot at people literally 360. But to not make it
too dominant, we have multiple access. For example,
there is a ladder here. On the other side,
we have little ramps. So you can climb
and jump on the roof. And I believe on
this side you can climb on some objects,
which means that we have always three ways
to get to some place, whatever this place is. So there are lots of places
that are good for you to fight in. But you will never
be always safe. So this little detail. So this is our navigation,
what I just said, all right, how to get
from one place to the next. But another challenge
for us is actually what you do while you are
going from A to B. Obviously it is a melee combat game. So you will fight
people with your sword, your spear, your mace, whatever. So we need to focus
some parts of each stage to allow combat easily. I still cannot draw. So I'm going to try to
show with my cursor. So we have what we
call main combat pockets. So, for example,
this is one here. We have a bigger one here. We have one here and one here. Why? Because the ramps come this way. Right? They follow those paths. So all the way that attack,
that's where we have the combat pockets. Because it is your objective,
and the objective is moving. And here it's even
more interesting, because they can
be close to each other. Actually, I'm sorry. One comes this way. Yeah,
so this wall space here on the tree is where both ramps can be
at some point at the same time. So it becomes a very
big combat pocket. So those combat
pockets are where the main gameplay takes place. But like I said just before,
we want to give options to players,
options to navigate around. But there's options to flank,
options to avoid a fight if they want to. So that's where we have
secondary combat pockets. So here,
that would be a good one. Here, another one. Let me get closer so you can
understand better what I mean. Right,
so on each side here and here, you imagine that the
ramps are coming. Me, as an attacker,
I decide to come this way. And I see that there
is a lot of fighting here. And I don't really want
to join because I think my team may win this fight. Or maybe I don't want to. Or maybe I want to
actually go around. So what I will do,
I will actually take one of the side paths. And when I'm here,
I have the option to flank by going back to
where the people were fighting, right? Or actually I can totally
go around the other side where the other ramp may be. This way I can switch
combat pockets almost at will. And for that,
I have multiple paths. And even when I take a
class like in this courtyard here, I have multiple options. Let's say that I want
to flank the people who guards around here, and here. I can go back into the fray. I can try to go back a little
bit further away, maybe because I really want some
space to take on the defenders here. Or maybe the ramp has
moved and so has our front line. Or maybe I want to oppose
any reinforcement that may come. Another option that
we have is to climb here, take the ballista, and try to
shoot defenders in the back. This is a defending
ballista obviously, but anybody can use it. So that's very viable tactics. Which brings me
to my next point. We have, in each stage,
actors, like this ballista, or like the hanging traps
that James described. For those who were not there yet,
this is one. It's something that you
can hit with anything that you have in your hands,
like a rock, your sword, a head, whatever. And when it's touched it will
break down, fall, and inflict damage on the people under. This is a hanging trap. Those need to be placed
in strategic locations, right? Let's say that this is a place
where people fight a lot, so a combat pocket. It would be interesting
to have one trap here so that when people fight here,
somebody can just make some room. The strategic elements are ballistas,
catapults, and catapults here. Personally I love ballista. And everybody [INAUDIBLE]
like hate me for it because I always kill them with it. And I don't care. I love it. So having ballistas
that are very powerful-- sorry, let me describe what
it is for those who don't know. It's basically
like a sniper rifle. It is very slow to reload,
but it fires a big bolt that actually
kills in one hit anybody that it hits. And it can actually
make a skewer of people. I once managed to make a skewer
of three players with one bolt. So it's very powerful. That's why it needs to be
placed in strategic locations. Fortunately, for everyone,
those can be destroyed. So you can remove
this asset temporarily. Catapults too. Catapults obviously
work the best when we have open fields like this. We have a few maps
where we have catapults in a huge battlefield,
and it works very, very well. So one player is
reloading the catapult. You'll notice that the
arm basically is lowered. Then somebody else
can grab a rock from here, put the rock on top
of this little platform. Then whoever is
at a catapult can just move around like this to
find targets, and then release. And then the catapult rock
will just fly, hit the ground, and kill everyone there,
allies and enemies. As always, you can jump on
the catapult and be propelled too. That's very fun. And it's also very useful,
because you can get behind enemy lines. So anyway,
all this to say that those actors are very, very strong. So we need to place them
at locations that make sense and that are not too powerful,
but so that players can still have fun using them. So here,
that's a very good location for this one and this one,
because defenders respawn from this wall. Sorry, this wall and this wall. So you can already
try to get them before they reach the towers. Those are kind of
factors that we add. And actually James
already covered this, so I won't speak
about it too much. There's little
objects like this bell, for example, that you can
grab and throw at people, and even kill them with,
because it does damage when it hits someone. We have also
zone laying weapons. So, for example, this is an axe
that you can grab and go fight with. We have, I believe,
more stuff over here. Yeah, for example,
this one, this fork that you can
grab and fight with. All those,
we as level designers, we place them as
early as possible. But that doesn't mean too early. We place them
early on because we know that it's going to
give an edge to players. So we want to make
sure that it is placed in a location that makes sense. Then when we iterate after
doing reviews with all the level designers, we can change them. We can add some, remove some. Same thing with the ammo box. Ammo boxes are a focal point
for players because they will go there to get ammo or bandage. So you can expect people
to fight around those. So it's important to place
them in good locations. Anyways, so we iterate actor
placement, space, navigation, volumes,
and the overall experience. We play test it internally. So among us devs
are we sometimes-- actually,
often now internal testers. And by playing it, we see what works,
what doesn't work. So we iterate. We change things all the time. Even this map that is very,
very, very complex, There are still some
little things that we modify. Like the last
thing that we tuned that was about the balance,
to make sure that both teams have
equal fighting chances. So for that, what we do is
move where people spawn. We change how
long it takes for them to spawn back into the action. We can also change the score. So for example,
if we realize that people are burning all those
tents way too fast, we could give them
more health points, or we could add
more tents to burn, which means that the
score would be slower to be filled to the max. So all those are very-- that's the last phase. In between-- so I want to
say the happy blockout, because that's the
blockout we are happy with. That's a blockout
that we know will work, and that will not change much. Like 75% of it is here
and won't change much. So that's when we hand
off the map to the artists. So the way it works is we
have a meeting with the artists. And the level designer
in charge of this level will go through it,
a little bit like I just did to you, but in more details,
and explaining more the intentions
behind each stage, the location of each block. For example,
if this ramp is very important, I will explain
why it's important so they can understand why. For example, I can say here
we really, really need a landmark, because players,
when they are in this field, they tend to confuse
this wall and this wall. So if we make this
a very big tower, then it's easier
for them to find their way,
the kind of visual cues that we use everywhere
to help players go around. So then artists understand
that this is important. Me, as a level designer,
I put a tower here because we have walls. That makes sense. But artists may
have a better idea. They can say,
sorry, no, actually, this looks like it could be a
good place for actually a siege tower that is broken. It has no wheels. So they will put a siege
tower with no wheels. It'll take the same space. And as a level designer map here,
that does work. I see that it's a landmark. It is different from
everything else. And it does the job. So we don't need
more landmarks now. And I think my
computer is crashing, or my editor is crashing. OK, well, so anyway, I don't
need really the editor anymore. But I will just keep talking
about our interaction with the artists. So what have I done? All right, anyway,
sorry, that's all my bad. I did something wrong
with my keyboard. I'm very sorry about this. Anyway,
so when we work with artists there is a lot of
back and forth, because they have to make
things obviously pretty, but also functional. They have to respect the views
that players have of each other from different parts of the map. They have to ensure that we
have cover where we want it. When I say we,
it's level designers. So it's a lot of
constraint to them. But they also have
a lot of creativity in how they want to
approach those constraints. And if they think they
have better ideas than what we have done, they tell us. And if we think that works,
then we can make it happen. And this is how we work. We do back and forth. We do lots of
internal play tests. We iterate each
one of our sides. And we have all layers. So level designer
has their own layer, and artist has
their own layer too. Usually I think a team
objective map like this one will be worked on by if not all
artists, at least most of them. We have smaller maps,
the team death match maps. Team death match
maps are actually more like-- in terms of size,
more like this battlefield, because the only
goal is for people to kill each other
until one team doesn't have any reinforcements left. So it's a very classic game
mode that you have in all games since Quake or before. Those maps are smaller. So they are worked
on by only one artist mainly, sometimes with
support of another artist. And this makes the
iteration a bit easier too, because there's only one
LD and one artist talking to each other. It makes it a bit faster. And also we really
communicate a lot together. So that helps us to design
and iterate in a very smooth way. I don't think we have
had any issue with this. Quite the contrary,
the artists that we have are very, very good. They managed to turn-- just look at this. Imagine this like this. And tell yourself that's
what we had before. Those towers here were
stupid blocks like this. And look what they
have done with it. So as a level designer,
personally, to me it's very gratifying to see
my ugly [INAUDIBLE] art job made beautiful and
playable by the artists. So that's why we
as level designers, we always do our best
to facilitate the artists' job. And the artists always
make sure that they don't impact negatively the
gameplay that we want too much. Or there are times
where James cries because I've done something
very hard to do or very stupid. And since I don't like
to see a grown man cry, I try to change it. But that's always-- that
always go [INAUDIBLE]. JAMES: You promised
you wouldn't bring that up, Aurelien. AURELIEN: I'm sorry,
but the people need to know. JAMES: That's OK. AURELIEN: What else? I think I've covered everything. Yeah, I think can-- let me think. But yeah,
I think I've covered most of it. James, do you see anything
else I could say if you want? JAMES: It might be cool
real quick to just spend like a minute on the spawners. Because the spawning
system's kind of unique and how it groups people. AURELIEN: Yes,
you're absolutely right. And spawners actually
are a huge challenge for this. And even sometimes,
not the system itself, but because the
way the game works-- and not because the game sucks,
but because people suck. No, players don't suck. I'm sorry. No, OK, more seriously,
spawners, the way they work
is that you see those little blue
characters here? Each one of them is a
point on which a player will respawn after this. So as you can see,
there are lots of them. But in that case, a reason is
because since the towers move forward in this direction,
spawners do too. So, for example,
those are actually initial spawners. And those-- so blue against red,
of course. This is what you would
call the initial clash. When you start a map
people will already be fighting, or will start a charge
to fight each other. After that, different attackers
respawn from the back. And attackers and defenders
respawn from behind the walls. And then they have ways to
reach each other on the battlefield. Now, where it changes,
for example, here-- because the ramps move,
attackers and defenders need to move roughly with them. So let's say that
the ramps are here, I'm not going to
spawn back there. It took me way too
long to get back here. So instead,
players respawn closer here. Same with defenders. At first defenders respawn here. But when the ramps
have been closed, then they respawn
on the next stage. So that's what
we do all the time. Now,
why spawns are actually a challenge, it's because of two things. First of all, they need to
be protected, because it's very easy for enemy players-- in theory, it's easy for enemy
players to go to a spawn, and spawn and kill people. And again, it doesn't happen
because we make sure that you cannot do this. So we protect the
spawns by different ways. Like I don't know if-- yes,
there is one here. So those doors,
this door, for example, we have people spawning behind. If I go, you will see
spawners here in the distance. So those doors will
open automatically when someone gets into
this volume that you see here. But on the other side-- I think it can show this way. This blue panel
that you have here is actually a one way wall. Which means that you cannot get in,
but you can only get out. Which means that if
you want to spawn camp, you can do it only
here on this platform. But even then, you cannot. Because we have something
that we call the combat zone. So let me just hide most
of them and show you the one that matters. Oh, let's see, this one. Sorry, just give me one sec. OK, I can't find it. But OK, I'm going to just
use this one as an example. We have a combat
zone that encompasses everywhere people need to fight,
but will not cover some parts. Like for example,
there's this part here that I said earlier that
you could spawn camp. That actually is not
covered by the combat zone. Which means that if
you get into this area, you will have a
deserter warning. And if you stay in this area
while a count down is playing, you will be killed. So sure,
you can try to get here. But you know that you're
going to die if you stay there. If not because of the volume,
because of the people too. So placing those
combat volumes help us with placing safe
areas for the spawn. Second reason why
the spawns are so hard it's because when you
play you don't want to see players pop out of existence in the distance,
right? Now, let's say, for example,
that I am here. And those people
here are spawning. I will just see them appear. And that to me look very,
very bad. That's why we always
hide the spawners in places like, for example,
this little street. So people who spawn here,
they will spawn when we do the tents,
burning the tent here. So as you can see,
they are far away, but not too far away that
it's annoying for them to run back to the fight. But far enough that they
have to go through a few pass, a few options that
are visually obstructed. See,
from here I cannot see them at all. They are [INAUDIBLE]. So it was very easy
to show it to you. But we have maps
with stages that are quite narrow or quite small. And sometimes it's very hard
to place the spawners the way that is the best for them. Fortunately for us,
this is something that we tackled very,
very early on. Actually,
when we do the blockouts, we actually do the spawners
too at the same time. So we know roughly
which areas we have to be reserved for spawners. And this way artists know too
that those areas where spawners are need to be wide
enough so that people can have the room to respawn,
and then reach the Plinko options board. So sometimes we
realize a bit after the art has been done that spawners
don't work in one way. Or maybe we
change the objectives. So in that case, we do our
best to use other parts of the level to place the spawners. And if really we
don't have a choice, but we need to change the art,
then we see with art what can be done. For example, let's say that
this house here doesn't exist, and we have people
spawning here. I realize that
actually it's too close. It doesn't work. And those guys cannot be
here because it's too far away, or it doesn't work. We say, hey, guys,
can we maybe close off this thing? If it's not too much
work for the artists, then it can happen. If not,
then we find other solutions. What I mean by all
this is that every thing that you do and see,
and experience in the game as a player,
that's stuff that we think about very, very early on. And we make our best for ourselves,
but also for the players to
make our best so that it's smooth for everyone,
devs and players alike. And this is why
we iterate a lot. And this is why a amp like
this can take six months to build. The blockout can take I don't know,
three weeks, one month, maybe more. It depends. And then we have more iterations
and art working for two months. During those two months
we iterate on actors and so on. So it can take a lot of time. But that's for the best. Also it takes a lot of time
because we have multiple maps to work on. So usually we have a
map that is being built, a map that is finished,
but just we maintain, and a map that is close
to be finished, an average of-- So we don't have
time to get bored. And this is also why play
testing is very important. This is why we have alphas. This is why we have internal
testers so that we can tune and fine tune all
respects of a map as often as it needs to
be perfectly enjoyable. Lots of work. Anything else you think, James? JAMES: That was
pretty comprehensive. Might ask if there's
any questions that we want to get to? AURELIEN: I think we
can get to questions, yes. VICTOR: And we
do have questions. JAMES: Sweet. VICTOR: Some related
to environment art, but also a couple in regards
to the level design. First up here comes
a question from GIRU. I want you to dive into-- well, I'll just read it. Do you gray box the objectives
and play test the map flow? Or do you approach the maps
from an art, story perspective when it comes to objective design? AURELIEN: It's a bit of both. So the objectives
need to make sense in the context of the map,
right? And so here we have
siege towers going to a wall. That makes sense. It would not make sense if
we just had to knock at the door and open. What we do is that we have
the overall narrative for the world map. And then each stage is like
a chapter in this narrative, and needs to make sense
by itself and with the rest. And that's actually something
that we talk about a lot, because sometimes we find
a very good solution or a very good objective, but there is
no way to actually justify it. Or there is no way to
make it into this map in particular for
X or Y reasons. So in that case,
we keep the idea for another map. But yeah, narrative--
the fun of objectives and the justification
of narrative both go together and
are very important to us. VICTOR: It helps
bring the player into the world of Chivalry too,
right? AURELIEN: Exactly, yeah. And if you look around, you
can see lots of little bits of lore all around the map,
even in the objectives. VICTOR: Another question
from BobsNotYourUncle. They're saying,
you mentioned these epic fantasy slash medieval set
Hollywood movies as inspiration and reference. Does music or other
media influence the game and its design process? AURELIEN: Music, I'm not sure. Though we do listen to epic music,
I'm sure, all of us. Movies, TV shows,
and games, of course, are good reference to us. That's the main
media that we use. Because they are the more visual,
right? And what we do is visual arts. So that makes sense. We also have fantasies that
come from our imagination, things that we would love to see in a movie,
for example. So then we can make
it happen in Chivalry 2. VICTOR: Using Unreal Engine. AURELIEN: Yes. VICTOR: I did
notice what I think looked like-- and for all
the audio fans out there, I think you're using Wwise. That's the audio engine. AURELIEN: We do, yes. VICTOR: Just
a little tidbit there if anyone was interested. Hm, let's see here. The next question
comes from Andrej. How do you plan out
things during the pandemic? Do you sketch your own ideas
and then share and discuss? Or do you have any cool,
online, collaborative tools for this task? AURELIEN: Yep, yep. So what we do is
actually we gather together exactly like we will do in
a really physical meeting. But instead of drawing
on glass panels, we actually draw on the screen. We are using Slack. And Slack has a little
drawing tool that everybody can use at the same time. And so far it has been very,
very useful. And it has not been an
obstacle for us to design maps. JAMES: Yeah,
I think it's actually pretty similar to how
it was pre pandemic. We just kind of check
in with the other half of the level more. Like the level designers
check in with the artists, and vise versa. And we've gotten a lot
smoother at collaborating together and working together
at the same time on it. And when LD has finished
or has progressed the map to the point where
art is ready for it, we've gotten a lot
better at that handoff part. So we know what to expect,
and they kind of know what is optimal to give us. And we're constantly
improving on that. But it's definitely
gotten a lot smoother, especially over the
last year and change when we've all been at home. AURELIEN: Yep,
and like all other game tutorials, we do a lot of documentation. So that IDs and
explanations stay somewhere, and that anybody
can access at any time. VICTOR: Thank you. Thank you. Let's go back to
some of the questions that we received earlier. robbiejg was asking,
do you also use hierarchical
level of details? JAMES: We did initially. That was one of the big
things that we implemented to reduce draws was we had HLODs,
which if you don't know, it's difficult to describe. A level of LOD or a Level
Of Detail takes a mesh and reduces it as
you get farther away to save on triangles. And HLOD works very similarly,
but it batches objects together. So it saves draw calls,
and it technically saves triangles as well when it does that. And it does this so
that something that's-- these are made up values,
but, say, something that's two kilometers
away is reduced greatly. And then something that's
one kilometer away is reduced, but not as much, and so on. So it kind of like cascades out. We had that set up initially
to help with performance. And we actually had a
Houdini implementation with it. So the meshes that would
generate these clusters, it would gather
every object in a level and separate them into all
these different, little clusters. And then it would send those
to Houdini as merged meshes. And Houdini would
do a bunch of cool stuff to optimize them
in particular ways, like deleting small parts,
and deleting some occluded
triangles and stuff. And then it would
send it back to Unreal. And it worked well. And we got it
working pretty well. But the final implementation was
actually worse for performance, because these reduced,
combined meshes were still like a million triangles a
piece for this massive mesh, because it had to combine
like 500 objects into one. And so we tried. We played with
it for a long time, but we eventually
did not use it. So we don't use it anymore. VICTOR: A question
here that came. I think a lot of
people were asking. But it came originally
from Moon Light. Will there be an
SDK for the modders? JAMES: I think that's in the plans,
but I'm not sure. AURELIEN: Yeah,
that's something that we want to do, but we don't have
any time to give. VICTOR: Easy answer. Another question from Echoltis. Due to the world of cross play,
have you had any troubles in balancing the
difference in performance across different
platforms to avoid an advantage during combat? AURELIEN: Go ahead, James. JAMES: Yeah, sure. Yeah, obviously it's more
complicated when developing for consoles as well. Our publisher,
Tripwire, has handled a lot of the like console
porting and development side of it. As well as they've really
helped with optimizations and gotten things in
line for consoles as well. I don't think there's any
real graphical performance issues from one to the other,
or things that would impact players. Definitely like
using the controller takes getting used to. But I quite like it now,
and I've done very well in games using
the controller like pretty much just as well as I've done
using mouse and keyboard. So especially for us
making the content, I don't think it's
impacted us too much. It's just been like
this extra thing that's kind of happened in
the background for us, this whole other like
side of development. VICTOR: And you support
controller on PC as well? AURELIEN: We do. JAMES: Yes. Oh, yeah,
what am I talking about? Of course, we do. Yeah, that's how I played it. I don't have an
Xbox SDK at home. VICTOR: Let's see here. Another question
from Shockify_DEV. They're wondering,
what do you use for the atmosphere? Are you able to go
over the clouds and fog? JAMES: Sure,
if you can share my thing, I can show it real quick. It's very straightforward. VICTOR: Yeah, just a moment. Yeah, you're good. JAMES: Sweet. Yeah, so still in Red Helm here. Let me just find
it in the outliner. Cool, will that do it? Yeah, OK. So it's just a skydome.
Short answer, it's a skydome. It's a skydome with an
HDRI image projected onto it. We initially had, and we still
might have some cloud planes. Maybe we've removed
them from this level. Oh, yeah, see, like there. That's like a plane of
clouds that we've added in. We kind of add
those in artistically where we deem appropriate. That one's kind of nice. It gives a little less contrast
and works the values in a bit better. But it's really just
an HDRI image. We've lined up the sun. The sun is just like a sphere
blueprint you can see here. I could turn it off with
like god rays on it. So it's just like literally a
glowing, emissive sphere. And then the skybox. And then that was a cloud. And then the skybox. And then all those clouds. And the rest is handled
through exponential height fog. And that's pretty much it. It's not too complicated. There's no dynamic
sky or anything. I actually prefer-- we
don't need a dynamic sky, because the map-- it's not
like an open world game, where like the time of day
is changing or anything. And I actually really prefer
the look of HDRI skies. I find them to be like the
highest fidelity currently. Maybe as like engine
technology progresses-- I've seen some like really cool,
volumetric Unreal Engine clouds and like some really
cool tech art stuff coming. I still find it is
tricky for people to capture the fidelity of a
captured sky from an image. So it's very
straightforward and simple. And the lighting is also
just like a basic setup of a skylight and
a directional light. They're both stationary. Let me just see if I can find-- there's no crazy settings. Just a directional light. You know, stationary
directional light casting shadows, cascade shadow maps. So we have baked shadows. But they like fade
out as you get closer. So you get like crisper shadows. Yeah, very basic lighting
and atmospheric setup. Just fog,
directional light, skylight. And then we also added a couple tiny,
little static point lights for like
filling the area. So this area in particular might
be too dark when we bake it. So we'll just put
lights to taste kind of, and dress it up that way. And all of these little
flaming brassieres here,
these like fire torch things, they have lights
attached to them. But everything's static,
except for the sky and the directional,
which really helps with the performance as well,
because static lighting is pretty much free. You just have to account
for shadow and light map size. So it's like a bit
of a memory hit, but there's no
performance hit to it. So static lighting
all the way for us. VICTOR: That's great. You already answered
my next question. JAMES: Sweet. VICTOR: I'm curious,
were you using the GPU Lightmass? JAMES: No,
we still use regular Lightmass. I don't know when
that was implemented. Maybe we have access to it. But we are so deep in
production that we've just been going with the
same regular Lightmass. We still are connected
to Swarm in the office. So all the office
computers still contribute to building
lighting for the maps, which is really nice. It actually is quite quick
when using that system. It's like maybe half
an hour for a big map, and even smaller for
some of our smaller maps. So it actually hasn't
been that much of an issue to keep up with it. And we don't have any
automated systems or anything. We just remember
to build lighting. And it's been OK so far. VICTOR: Next question
comes from Skillz1333. They're asking,
for the internal and external parts of the buildings,
did you go with a single mesh or a separate mesh,
and/or sublevels for interiors? JAMES: So it really
depends on the situation. Most of the meshes
aren't super modular. And it's like a single,
bespoke house piece. You know? Yeah, so it kind of depends
on the case by case basis. There aren't
sublevels for interiors. We had that earlier on
some other maps for interiors that you could go into. But for whatever reason,
we've just consolidated them, or cut them. Things like the giant castle
in Red Helm, the outside would be one mesh,
and the interior would be a separate mesh. A lot of the houses
and structures in the game, though-- the amount of
interiors are limited. It's really hard to
have like a good sword fight in like a shed. So we need a lot of space. So a lot of the houses
and stuff are closed off. There are a lot you can go into. But most of the time it's
just like a shell exterior mesh with no interior to it. VICTOR: Next
question comes from-- oh, my camera's good. The next question comes from-- another question
from PredragPesic16. It would be cool to see a couple
of textured trim sheets, walls, floors, et cetera. JAMES: Sure, yeah. VICTOR: And I
think it's something that we haven't really covered
on the stream before either. If you want to go into
the trim sheets a little bit and what it entails,
that'd be awesome. JAMES: Yeah, absolutely. Let me see if I can find a
good example of something. Oh, I know something
that has stuff to it. So we have this street light,
or this street lamp rather. And on it are a bunch
of the trim textures. And this is what
the texture looks like. So you can see, top to bottom. So it's just like a 1K map. It's not huge, of course. Half of it is wood. Half of it is metal. And then the metal is kind
of divided into these strips. And there's also
some other sections. You can see these
square sections are used for more
square parts as needed. So it allows us to basically
take a piece of geometry and map it to the wood section. It tiles vertically this one. So we can have a huge-- the geometry can extend well
beyond the bounds of the UV space. And it'll just keep
tiling up and down. So let me see if I get the
UVS on this street lamp mesh. It may not be super visible,
depending on how it's set up. Yeah, OK. You can see here. I wish I could zoom out
to show the extents of it. But you could see all the
red stuff is where it goes out of bounds out of 0 to 1 space,
which is fine, because it's still
on the trim sheet and still tiling vertically. So yeah,
you can just compare this to how we've laid it out here. But this sheet,
which is mapped to this mesh, it covers like a lot of these. There's like 30 or 40
meshes here or whatever. And they all just use the
same sheet and the same setup. So basically, yeah, the idea is
that instead of hand sculpting 30 of these street lamps,
you make one nice trim sheet. And you kind of
establish the process of UVing it onto these textures. And then it's just
taking-- and then you can, from there,
extrapolate as many more as you want. Even the normal
map is very simple. A lot of the times we
use face weighted normals instead of normals in the trim,
or baked normals, or anything. I don't know if we
did in this exact case. But it basically
just averages out. Where's normals? It straightens out the normals
at the edges of like bevels on meshes,
which makes this edge a lot smoother. A 3D art principle
is that you always want to have these like big,
chunky, visible edges. When you have very sharp edges,
are very geometric, it looks 3D and fake. And things in real life
have these big bevels and like craftsmanship to it. So by averaging out
the normals and using that simple trim sheet,
it kind of gets a nice, smooth look to it at like a
very robust setup. So hopefully that covers
trim sheets pretty well. VICTOR: Yeah, thank you. JAMES: No problem. VICTOR: The next question
comes from Juan Milanese. Milanes? Are you using distance fields? If yes, at what resolution? JAMES: I don't think
we use them at all. I could be wrong. Maybe we have like distance
field ambient occlusion. But I don't think we use any
sort of mesh distance field anything. And I don't think in any
material capacity either. We've done a lot of,
I don't know if it's memory optimization either,
but it might be. But we've also done other
memory optimizations. So like there's like vertex
buffers that we've removed, adjacency buffer,
and like some other one that has saved us a lot of memory,
especially on consoles. And the cost of that is
that we can't invert meshes, and we can't have displacement,
which as long as we work
around those two things, it's like a big memory savings. So yeah, there's a couple
things like that and distance fields that we've selectively
chose to not use. VICTOR: Cool,
CG TECH was wondering a little bit if the ground was using
the landscape system? Or if it was just a mesh? JAMES: Yeah, we mix and match. For a big level here,
like in Red Helm, it's a landscape, the terrain. And it uses, yeah, like built
in landscape tools, nothing really fancy there. Our material is as lean
as we can make it really, because the
landscape has been one of the more expensive
things for us in the past. In some levels-- there's
other parts of Red Helm, like as you progress into the town,
the landscape goes away, and we start using
these customly designed static meshes. And we texture them
with a material that just has vertex paint blending on it. So it kind of mimics
terrain or landscape in the traditional
implementation. It just allows us to control
like corners better and have like a lot of accuracy with it. And we can also drop off
the terrain as soon as possible. So we really often try to like
lose landscape components and keep it as
small as possible so that we don't have
to be like extending it for the bounds of the map. VICTOR: Cool,
only a few more questions here. And then I'm going
to let you both go. JAMES: Sweet, sounds good. VICTOR: theLeon was curious, what's your advice for new
level artists as students for trying out bigger
and more complex worlds in Unreal Engine? JAMES: My advice is to go smaller, which is probably
not the advice you're looking for or desire. The same principles
can be applied to a scene or piece regardless of size. The benefit, if you're new,
or a student, or learning,
or trying to break into the industry, is that if you make something
that's small and really good, it's still really good. It's just small. If you make something
that's big and sucks, it sucks, regardless. So I would definitely
100% prefer to see something
in a portfolio that is tiny and good,
a little diorama that uses principles that can be applied
to a big thing, as opposed to like a
100 kilometer world. It's very easy to generate
like a 100 kilometer world, or like a planet. And now Unreal has
like an atmosphere system that can support
going between them and stuff. A lot of those things exist. So yeah,
probably not what you're looking for. If you really want to
make something big I would dynamic
lighting for sure. And I would lean
into proceduralism as much as possible. So the landscape auto
grass is an example of that. Automated foliage placement
could be an example of that, or things like Houdini for
populating it across huge areas is also becoming more common. We don't use that,
but it's very powerful. And a lot of places do
use that to great effect. So you can have algorithms
that control the placement of trees and shrubs. Unreal has a little bit of that. Yeah, I would definitely
lean in towards like the leanest and most efficient workflows
possible that you can find. I'd research that. VICTOR: Solid advice. Last question comes
from Tripwire Interactive. JAMES: Ooh. VICTOR: What is your
favorite part of the map? And why is it the trapdoors? JAMES: Yeah,
that's a great-- yeah, it's definitely the trapdoors. I don't know if my
stream's still visible. But there's trapdoors. You press a button. VICTOR: Can see it now. JAMES: Sweet. You can go back here. A little secret if
you play the game. You go back here. You press this. And it like unwinds the
chain and opens the trap door. And people fall down
and die on these spikes. It's incredible. AURELIEN: [INAUDIBLE] it
works on anyone, even allies. JAMES: Yes, yep, even allies. It's an equal opportunity,
beautiful place to kill anyone. I don't know if that's
my favorite spot, though. The problem is,
they provided me an answer. I don't really have an answer. Aurelien, what's your
favorite part of the level? AURELIEN: I will say
when you're at the gatehouse and you look towards the keep. You can see a lot of the city. And it's beautiful. No, the other way around. Where you were actually. JAMES: Oh, like here? AURELIEN: Go to the gatehouses. No, stage two. JAMES: Oh. [LAUGHTER] AURELIEN: Well,
that's a good view too. That's not what I was saying,
but that's good too. I like it too. Yeah, so two towers at the beginning,
stage two. JAMES: Here. AURELIEN: No. It's OK. JAMES: OK. AURELIEN: Right here, yes. JAMES: It's my favorite part. Yes, beautiful level. AURELIEN: [INAUDIBLE]. Yeah, right here, this way. JAMES: OK, perfect. AURELIEN: Because here
you can see your objective at the end, the keep,
the village in between, and multiple stages of the village,
destroyed and intact. So I like it because
it builds anticipation. JAMES: Yeah,
that's a good answer. It's a nice view. It turned out well. And it's one of the more
representative of, yeah, like you said. Like the whole
map you can take in. I like that we are able
to show the final objective spot from anywhere
in the map basically. You can always see this huge,
massive castle in the back. And then when you get up close,
it still holds up. And it's like super oppressive. Like that view is
like almost brutalist. But yeah, that's really cool. I like that a lot too. AURELIEN: And something we have played with in other maps that
haven't been announced, where you can see clearly
the following stages, and the last
stage in particular. So it gives you a
sense of progression. JAMES: Yeah, it ties it
all together in a nice way. AURELIEN: And creates
nice postcard views, you know? Vistas. That's something that we are
working on very early on too when we do the blockout. We already plan where we
are going to see very cool stuff. And then the artists
create even more. VICTOR: Awesome,
thank you both so much for coming on the stream today. AURELIEN: Thank
you for having us. JAMES: Yeah,
thanks for having us. This has been a lot of fun. VICTOR: I'm not going
to let you go just yet. First, I wanted to let chat
know that if you're watching this on demand on either
YouTube or Twitch, Aurelien said that if you
have any follow up questions, you can head over to the
forum announcement post. And they will go ahead
and take a look at that and potentially
provide some answers if you have post-stream,
which is very considerate of them. As always, that happens
with most of our livestreams. Post livestream discussion,
YouTube comments is not really the best place for that. The forum announcement
post we're paying much better attention to. And so make sure
you head over there. That's also where we
announce all the livestreams first. So that's where
you will see them. Before I let James
and Aurelien go, I do want to let us know,
or tell you all that thank you so much
for watching the stream today. If you've been with us
here from the beginning, it's awesome to have you. Chat, please give an applause,
or 1s, or Fs, or whatever you feel like
for James and Aurelien. Just want to show
them a little bit of love for coming on the stream
today, sharing their knowledge. If you're interested in getting
started in game development and you sort of just
stumbled across this on Twitch or YouTube,
head over to UnrealEngine.com. You can download the
engine for free and get started. If you already have the Epic
Games launcher installed, you can just head over
to the Unreal Engine tab, hit the Download
button on 4.26.1. 4.26.2 is coming soon. If you're interested
in meeting others in the community who
might be working on games, or new to games, or just find
folks to talk about this with, because game development
can be rather difficult at times-- not to tell you that
you shouldn't do this, but it is true. It is a complex subject. And there are a lot of
things that are involved with it. We could talk for days. And I'm probably actually
going to do another stream where we discuss a little bit
about sort of the philosophy when you get started,
because it can feel very overwhelming at first. But know that
that's the reason why there are a significant
amount of roles at any studio, cause there's a lot to do,
and there are very many different things to learn. But if that's what
you're interested in, head over to
communities.unrealengine.com where you can find
local groups in your area that you can connect with. Now, there clearly aren't
any physical meetups going on during the pandemic. But these groups have opted
in to do virtual meetups usually on Discord. So it's a great
place to hang out. If you are interested in forming
a meetup group in your area, there's a button at the
top right that you can hit. That's Become a Leader. You fill out a form,
get in touch with us, and we'll hopefully get
back to you real soon. Make sure you visit our forums. We have an unofficial Discord
channel called Unreal Slackers. That's UnrealSlackers.org. Great place for real
time communications. And on the note of the forums,
we did just spin up our new forums. They're live at
forums.unrealengine.com. Go ahead and check
them out if you haven't yet. And please make sure
to provide us feedback. It is going to be a little bit
of a build up to what the best forums can be for us. So make sure
that you leave us all of the feedback you might have. Cause we're going to try to
jump on that as soon as we can. We do highlight a couple of
titles or projects each week on our community
spotlight to let us know what you're working on. You can either
find us on Twitter. The forums, released,
and work in progress channels are great places
to post your projects as well as to provide
continuous updates. Always fun to follow along. You can use them as a dev diary. I've seen some developers do. It's pretty cool. If you stream on Twitch,
make sure you use the #UnrealEngine
tag as well as the #gamedevelopment tag. Those two make it easy
for us to filter to find you. Sometimes we jump on
just to show a little bit of love. And we're also
going to see if we can go ahead and
rate someone here once we're done with the stream. Make sure you follow
us on social media. And hit that notification
bell on YouTube if you're watching there
to make sure that you can see when we go live. Next week I actually
currently don't have a stream planned because it got canceled. So we'll see what
happens next week. Who knows. It will be a mystery
until the day I book it. Check out the forum announcement,
the events category on the forums. Cause that's where
we will announce it. And once again, thank you
so much to James and Aurelien, and Torn Banner for
letting you all come on here. Alex Hader I should
probably give a shout out to since he was the person
who made this all possible. It's been a pleasure
to have you. I'm glad we did this. Looking out to play
Chivalry on the date of-- AURELIEN: June 8. VICTOR: June 8. Awesome. JAMES: Join us. Awesome, thanks for having us. AURELIEN: In two months. VICTOR: Awesome. We will see you
all again next week. I hope you're
staying safe out there. Take care.
This is a list of links to comments made by Torn Banner employees in this thread:
Comment by TBS-MoonMoon:
This is a bot providing a service. If you have any questions, please contact the moderators.
I am so excited OMFG !!
This game looks so good.
map design was chivs strong point, hopefully they keep that going
Torn Banner are masters of map design. I wonder if Chiv 2's maps will have easter eggs like in the first game.
Im so hyped! We don't have games like this on console.