[Music] thank you hey everyone I am a torfrik I'm a creative director and general art person at the neon Giant and welcome to my talk uh building the world of the ascent and this talk is diving into how we approached and solved some of the specific challenges we faced when when we built the world of the ascent and a big chunk of it is talking about the the process that made us arrive where we are with our Pipeline and you know deep dive into some of the tools we created to make the world and you know some general unreal advice sprinkled in so this is like a short trailer it's a game without sound you have shown an aptitude for applying
lethal solutions to conflicted situations looks like we're gonna have to work together on this one let's get it done [Music] foreign so what is the ascent it's a solo and Co-op action RPG set in any dystopians ipunk future and it's uh made in Unreal Engine 4 and it's available on PC Xbox one network series PS4 and five and uh we released it last year on Xbox and PC and yesterday on Playstation so please go and buy it and it's the first game from uh from neon Giant and we're a small in the studio from uppsala in Sweden and we are 11 people a team of extremely talented and awesome
developers and I'm very honored to work alongside and we all come from AAA various part of the Triple A and Industry and we've been around as a studio for about four years now so from the very beginning when we we made this game like it we had a couple of both you know really obvious and some non-obvious challenges ahead of us being a new small developer of course we made it easy for ourselves and we uh we picked the easiest subject like uh an open world dance sci-fi City Escape you know handcrafted and Rich with storytelling and we started with one artist that was me uh and we peaked with four artists including Tech art and VFX and this meant of course several things I mean we are a small team and we're working with we're essentially one of the most time consuming topics uh an urban imaginary environment where like every single object need to be both designed and built and you know making sci-fi means that almost every asset needs to be uh need to be designed and
we didn't have any concept artists at all on the team uh which means it's uh it's very demanding from a from a design point of view uh so this you know the subject itself and we needed a very fast and flexible content pipeline a very fast pipeline because we needed to build a lot of objects to to cover the world and also the art style because I mean we're making a dirty salami lived in kind of cityscape and uh we had to push shaders and content you know a lot further you know if you make something that is uh a bit more uh clean and shiny it would be a lot easier to find a suitable pipeline so not only do we need to fast find a fast pipeline we also need to find the uh a pipeline that didn't you know sacrifice the uh the art style and then the third major challenge we had which is assembling the world itself it's a it's a large scale game with a very very high acid density and not only that we also wanted to uh you know make a world
that feel you know alive and handcrafted with a lot of Storytelling so that in cell that in itself was another challenge so how do we how do we make a large Urban World and Achieve the high degree of the World building that we want to aim for so to uh to give you an idea of like the the scale of the world this is uh maybe like a third of the game world or so and then you know we go full CSI and you know start zooming in a little bit and uh into this city this is one of the uh the hubs in the game cluster 13 and we know zooming closer uh you know we start to see the the asset density uh this is a weapon shop and then inside the weapon shop and then you know enhance so that's kind of the uh the scale that we were working with so we always knew that there's like there was no way we compete we could compete with you know larger titles uh
without picking our battles extremely carefully and uh we need a very fast and transparent pipeline so that allowed artists to you know not only create art very quickly but also stay in the creative flow and uh not just being fast but also you know removing distractions and the two main themes that allowed us to do that was Simplicity and limitations and that might sound a little bit counterintuitive considering you know the complex subject matter but what it allowed us to do was to focus on the big picture and leave room to polish and it's also not the sexiest words to use to you know pitch a pipeline to artists but we're studio with a pretty you know strong background in technical art so the like an alternative title for this talk would have been you know Tech art all the things because that's what we did so if we start with the very building box of the game like the 3D models themselves um so from the very beginning we knew that we couldn't have a traditional approach to making models we needed we needed speed and we also needed something that will
help in making like visuals consistent with a minimum of iteration so we needed to support our Direction at every turn so we could just maintain momentum and thankfully there was no point in making AAA quality assets because of the camera distance so we had a lot of options to explore different approaches so so let's look at the uh look at the look at the options so first of all a traditional method like with you know High poly low poly modeling that just wouldn't work like for several reasons like first of all you know the whole thing like you're building two different models you need to bake you need to import textures it's just too many steps there's like no way and another problem with that is that the traditional concept art to you know in-game model workflow doesn't work either because we don't have any concept art so we built the entire world and all the assets without any concept art and we need a workflow where we could iterate on assets really really quickly without bakes and so on so you know how about tiling materials and decals which is you know great for
like cleaner art styles but it doesn't really uh like with more abstract shapes but it doesn't work for the kind of detail level and the busy art style that we're going for and we want lots of you know paneling fine detail and uh you know the workload would just be you know intense if we were doing it like that way plus that we couldn't we couldn't really support that you know amount of geometry that would be needed so we can't rely on the title textures so how about trim sheets I mean they're they are you know standard sci-fi solution right like they're great for you know getting a lot of shapes and details uh you know perfect for sci-fi panels streams like that um it also helps a lot with the art Direction because you know you get a lot of the art Direction built into the texture so you know it's very it's very it's very good for keeping down the iteration and maintaining like a shared shape language right but stream sheets on their own are like they're too expensive to make the kind of granular detail that we wanted we wanted a lot of you know mechanical
pieces you know chunky engine bits and it's just it's a pain it has to unwrap those plus you know you get a lot of to get that kind of density you need so many polygons and the only really way to to have a shapes that are you know smoother than the the amount of polygons you have is to bake them but we already said that we didn't want to bake things so that was a bit of a problem so so how about we use like one set of baked assets and one set of trim sheets you know that could work but then we would need to have you know two materials for for each asset and we're going for a very very dense world so that would just you know explode the amount of draw calls and not to mention like the setup time because then we you know we need to set up two materials for each asset and that would also just be very time consuming but at the same time we really need those big bits to get the detail level that we that we wanted so we solved that by just putting the baked Parts in the trim sheets and that was you know problem solved so we sacrificed
a bit of space in our trim sheet and then put the baked bits in there and uh that was great I mean because then we can do both but at the same time that also makes it a little bit less flexible because you have a you know essentially a 4K texture and you can't really scale that however much you want you can't make giant assets because you know it can't scale you know forever right it also makes it really really time consuming to make a set of textures because not only do you make a trim sheet which is pretty simple but you also need to make all those little mechanical bits and baked bits and that's that's a bit of a pain in the ass so so we just didn't uh so we made this texture uh and then we left some space in it even so because we thought well we surely you know the texture is not perfect we're gonna need lots of different bits which we then never did so we just have like a semi-finished texture and this is where the uh the limitations
and the Simplicity comes in so with a modern engine and modern workflows I mean you have basically infinite possibilities you know how do we approach each asset like you use a unique texture they use you know a mix of the tiling textures to have like multiple detailed normal maps to do I make the details in painter or in the mesh you know like do artists pick different workflows and you know how do you keep them consistent so and when you're you know dealing with assets that's not necessarily not necessarily a great thing like we want to focus on the big picture and get there as quickly as possible so we can iterate on it that's the goal like assets don't actually matter that much compared to the big picture so what we did was that we enforced this single workflow for the vast vast majority of all the Assets in the game and that meant we had to cut a lot of Corners visually but the speed was very high so if you look at certain assets they don't look very good and uh that's on purpose and since we knew the camera distance we can kind of put a cap on how detailed do we want to
make our assets because there are details that you can't just see right it's just wasteful so so we picked a polygon density and like a detailed density that fit our camera distance because we have a bit of a zoomed out camera right and uh you know this put a little bit of a cap on the Fidelity that we could reach but at the same time there was like there was no reason to stop and think we put this limitation on ourselves so that we could you know stop second guessing and always just you know focus on creating and uh and since we're using a shared texture sheet and a keepage library a lot of the design language just comes from that which cuts down on the design feedback and the iteration on assets like like a lot but once we do need to iterate we have like a shared system for the assets so every hard surface object in the entire game is using the same texture so every Mech every vehicle every sci-fi wall computer plastic chair box whatever is using the same texture and same
Shader so for example in this scene you have you know the ship in the background you have the the railings the yeah everything basically is using the same texture so you know to summarize it like we we split between a modular trim sheet for you know for the flexibility but then we use the the baked parts for the Fidelity and then we used you know weighted normals because it's the year 2022 and we're not barbarians and uh and then we just only used one texture for all objects all hardships obvious objects in the entire game and we only use local geometry it was like work mid poly like there was no high polish and so on and then we extended this with you know mesh decals that we could uh for flexibility to hide the fact that we only have one texture in the entire game sometimes you want a little bit of extra so that's good because then you can have normal decals and you can all Bend and stretch them and that works great so we use that a lot for like more intricate pieces right
um but now that we have the modeling in place the Second Challenge we needed to to face was you know how do we even texture this how do we even you know shade this so like I said before we're aiming for like a very dirty and Greek the art style you know full of full of detail and you know clean is a little bit more simple and more predictable dirt is very contextual like you know you can't just put like random dirt everywhere right it needs to be in the right places so we need to find a way of doing this with as little to no work we also need a lot of variety so for example how do we even have colors so we can't just use one color per asset because that's boring and several materials are out of the question so you know how about we just use a mask for different textures or like different colors that that would mean creating thousands of textures and how to just ex you know just adding them in per force would be a you know a giant pain in the ass and you know we don't have time for that
so what we did was we essentially used the UV sets for the uh for the meshes and then we just basically use the udem approach where we just offset the UVS and use that as a mask and that way we could just have different colors without having any any textures so using that you know the primary materials we needed in the game was you know because it's hard surface so it's either you know bare or painted metal or sometimes plastic you know when we're going a bit crazy uh and the main shading difference is basically you know either metal or non-metals right so we use the same method of just shifting the UVS to mask between metals uh so that was kind of our you know key based feature set and uh and now that we have those basic in place we could focus on adding adding rust dirt and other effects in you know a decently believable way and uh we wanted to have something that looked as close to hand authored as possible but without putting any in any work so we ended up experimenting and adding
like several layers so first of all I mean we're using a trim sheet so it's very easy to just ask you know to to add some texture masks that can drive things like details around bolts and like you know verifying detail like dirt and wear and tear and so on like but and that that's great it gives you a little bit of a base pass right but it doesn't give you any any contextual dirt it doesn't use the shapes of the mesh you know you want you want dirt behind some pipes you want dirt and some little hatch you want some scratched metal on the exposed parts of a Mac so we still can't use textures so we just use vertex colors so we break down the ambient occlusion and the convexity and we use that to drive dirt wear and tear and rust just like in a generalized way so Assets Now work much better you know on their own but we're still thinking about the scene and the big picture it's not about the assets it's about the scene so now we have the case where like you know
have some very clean surfaces that meet some very dirty ones and you know like the this is not a world where you know everything is not a bunch of clean objects so we just put in a pile right it's like it's dirty things have been sitting there for a while so we needed to to to get like that cohesion in and we can't just uh you know vertex paint the entire world manually because first of all it would take an insane amount of time and it would also heat up like all the memory for all the the instances so that was out of the question so this is where the the light baking in in a reel comes in handy so we uh when we bake light in in unreal you can use the option to also bake out an ambient occlusion mask so that's what we used to just drive like the third aspect of the dirt so so assets that are next to each other are actually getting like the like dirt you know under the crates behind some pipe meshes things like that so you know we'll swap back and forth you can see some of the
you know some of the objects that they're in the background for example and uh it comes with a pretty hefty texture cost but you know more on that later and it also doesn't require any hand authoring which is good so we don't need to put in any actual work but even with you know this we you know it's it's still sci-fi we need glowy bits we need decals uh so what we did was that and this is the little guy that you use so we used a secondary UV set and then we use the same approach with the udems to just mask between decals and emissive surfaces and uh that you know now we have like a whole bunch of little tricks to use to make the asset look handcrafted without you know actually you know doing anything and once we once we have the dirt it's very easy to turn it back off again uh so we could share the materials across a very wide range of props and assets so for example you know we have this you
know slum seed and then we have this you know this little uh lab from later in the game and they're sharing the same textures the same materials the same assets so it gives us a lot of you know perceived variety because we didn't actually have the time to create that much variety and uh now that we have you know a pretty flexible approach that can you know give us all these different things we need to Speed it back up again because we're back to having like super many choices and a very complicated setup and we needed you know we needed this very fast pipeline so to tackle this we uh we set a lot of limitations on what we could do like on ourselves so we set the amount of colors to three colors and three metals and that was the maximum amount that we had in our Shader and uh that was on purpose and we you know and then we built our tools to fit uh that pipeline because no we have a we have a very simple uh tagging system in model with just a little pie chart Like Pie menu to just
complete with a preview shading like that so you can just see roughly what it looks like and then we combine that just with you know a very you know simple preset vertex color bake and all of that is just applied when we export the model so it's like a one-click thing and one of the additional benefits is because you know we we made the pipeline simpler by putting a limitation on the amount of colors but what it also do with that is that it helps with the art Direction because it sets a very simple framework on the assets you only have three colors so when you're designing the assets you already know the limitations you you start designing your assets with the primary secondary tertiary color because that's all you get and uh this was one of the one of the tools that were like it just helped with the visual polish and and the design of the game because we needed to balance the visuals
so so with all these things in place there was like quite a few things that happened like automatically first of all we have very low texture usage it's very easy to have 4K textures when you only have one so we managed to lower the texture pool on console for example to from the default is like one gig and unreal we had 400 megabytes and the vast vast majority of that was things like reflection probes light maps and and the volumetric light for example so we had less way less than 100 Megs spent on the actual textures for the game at any time so it was very easy to scale it down to you know basically whatever but we also have the additional benefit of having reusable materials because and this was a very very big thing and we didn't really intend for this to happen either because we we enforced this limited palette and a single workflow what happened is that we have the same texture set for all the assets we have the same Shader set up for all
the assets so we can just swap materials back and forth and we can iterate on the look of an area really really quickly because if you make one material for a Mech it's going to fit the railings as well so if you want to share the color palettes that's very easy and also we're using material instances in unreal and the way that works is that we make an instance of something it inherits from the the properties any properties that you don't override from the parent so what you can do is that you can very simply make a chain of inheritance and then you can eat the rate on for example you know how dirty is a scene you know the color balance and you can do that on an entire scene with just a few sliders so that's also something like we're like well that makes a lot of sense now that we've built it but you know it wasn't really on purpose so we could reuse a lot of content really really quickly so for example you know we have you know this data core that we also have this you know uh dirty sewer and it's using the same models the same textures same base materials but it's just like very different setups
so that gave us a lot of a lot of extra mileage we also have the benefit of enforcing the art Direction so texture details and keep patch pieces they are forced to be shared which means that everything will have the same artistic Direction by default no one will make you know pieces that stand out because you know they will be consistent the shape language will be shared without having any concept art and without you know anyone having to point that out and uh is also made it very easy to tweak because all the materials all the meshes are using the same setup so if you ever wanted you know grab someone else's model someone else's materials like you always know where to look because it's the same setup it also cuts down on things like uh you know iteration and we also have very iteratable models because there's no baking process so you know I built a Mech and now it needs like a hatch that can open and a new gun
it's just go in build it export done same thing like you know we need more guns for the game we just grab a gun add some more stuff to it you know done it was very very efficient and it also feeds into like a loop of everything you do since everything is sharing the same texture like we made this cool looking pipe into the kit patch Library you know we made these cool chunk of cables that looks really nice into the keypad Library like every time we found like a nice pleasing shape something that you know looked good we could just we could just reuse that just copy paste it to a different model you know so you find you find all these new ways to like uh to make cool details and then you can just reuse that uh instantly in any other model so we also have the benefit of no technical surprises everything was built with the same polygon density Shader complexity amount of materials so it was very easy to extend the feature set you know we wanted to have rain puddles we want to
have you know a little randomized blinky bits uh you know better shading details detailed over Maps you know very easy to just add it because it's just you know one place to do so and this ticket took out a very big chunk of work when it comes to optimizing because you know we never had to care about polygon density material complexity like for almost any scene and when we did it was very easy because there was only one place to go so very easy to optimize it also allowed us to you know go beyond what we thought was the limit visually so as I said before we were like very smart and we were like okay we know our camera distance so we're gonna put a cap on you know how much detail we have and that was completely wrong because it turns out when we're kid bashing we could just you know for example we have this little well it's called fuel station but I don't know what it is uh and then you're like well you can put it on the Sci-Fi pillar thing and it still looks good and it's actually really detailed but that's not at all what we intended to do so it
kind of like allowed us to you know push beyond what we what we what we thought we should do visually and same thing you know we made these you know pipes pipe sets and things like that that were meant to be like this big and then we just scale them down to like half the size and we're like actually it looks better so so we were a bit wrong uh in a good way and the end result is that we created over 8 000 assets which is like roughly three assets per artist per day um but most of the time we did not make any assets so it's a bit of a skewed number and I mean even the biggest assets like the biggest set piece pieces took like three days like you know the the Big Macs took like one and a half day so it was very very quick so that really achieved what we wanted so you know armed with this very large pile of models you know we have the next challenge which is you know assembling the world itself as you know it's a very cluttered cityscape you know full with
layers movable parts and a very lived in feeling and uh that was you know uh that was a challenge in itself because not only do we have a lot of literal ground to cover we also wanted to make a game full of you know life and World building and you know movement I mean it's a it's a Sci-Fi Metropolis it's not an empty Forest right you know we need a lot of we need a lot of happening so that meant not only did we have to uh to build the world really quickly we have to build it quickly enough that we had you know time to go back and just add lots of life so we need to get to the part where you know we put the cherry on top really quickly and this is where all these limitations that we put in earlier in the pipeline comes in so we had a lot of content to create and plays in the world so we tried to create tools that allowed us to get rid of monotonous tasks so we didn't create uh you know like this this giant Advanced things you know to solve big problems we tried to get rid of all the the
monotonous boring tasks for artists so that they can focus more on the creative Parts unless on the the modernist stuff and we used Houdini for a lot of this and we created you know multiple tools to help us so for example our pipe generation tool so this is for making modular sets of pipes and uh it started like it's a very simple but not very simple it's amazing but uh just use the the profile of uh the pipe and it created an entire uh modular set of pipes from that and uh and then Magnus worked some you know black magic so not only is it a simple set of pipes but it also fits the art direction of the game you have all these little bendy bits and you know tons and tons of extra detail and then you know it all tiles both mesh wise and texture wise and that's you know like the kind of stuff like you don't want to create 20 variations of the same pipe right it's pretty boring uh so what we then did was that we also had the placement of the pipes you know
placing lots and lots and lots of pipes in a game is really really boring so we have a tool that is using splines to place those sets of modular assets that we made and we can also just change sets for you know changing visuals instantly and you know swap between different visuals and what this allowed us to do was not only does this speed up you know placing pipes but since placing pipes is now less boring and more you know satisf you know it's more satisfying artists can now create things that they didn't think about creating before because it lowered like the mental barrier of like oh God I don't want to place more pipes so the game you know looks a lot better for us because we have a lot of pipes in our game we also have the aptly name you know roommaker which just makes rooms or buildings based on sets of defined assets same thing there you know we have modular sets that have all the pieces and then we can just add the cubes and basically make Boolean operations and it would just make
make buildings out of that so we use this a lot in some places in the game like you know in the sewers for example a big big chunk of of the set dressing is basically just these boxes that then just had they were like then displaced all of these Assets in an optimal fashion automatically and then we have the destruction you know we love destruction uh but it's also very time consuming to make so we had uh two main goals with with the destruction first of all making it very very you know fast to author and also make it very very cheap to render so since the game is like essentially taking place in a two-dimensional plane you know we always know which direction like the direction the shots will come from what we could do was just cheat so instead of having actual destruction what we're doing is that we're playing animations based on the direction that you hit the meshes so we just baked out simulations based on multiple directions and then we just pick which one to play
so it looks like destruction but it's just an animation right so that allowed us to have a lot of Destruction that looked like it was reacting to the players you know explosions you know shooting rocket launchers and stuff but actually it's just fake and you know to take things further like what you can do for example is that you can have you know an animation blueprint then you can just blend between different animations to make you know even more precise but we didn't do that because we thought this looked good enough but you could and then we had the cables we have a lot of cables in our world we love cables they're also very tedious to make use drawing splines so we had a whole array of tools for making different types of cables we had everything from you know fake simulated ones on the ground to making cables between different uh just two different walls you can just put you know add lots of cables and what made this work really well is because the the tool itself you know was the hard part
is making it look good and fit the art Direction and that's a I think where where they really shine because the amount of complexity we can have in the cables uh to making them by hand it would be very time consuming but we also here made like a whole bunch of like smaller tools instead of having like one enormous Mega Tool we just had like four or five different cable tools and we mostly limited ourselves to not making any you know custom models because we just didn't have time but when we did we tried to use uh tools to speed up the process so we can help with the World building so for example we had the decal tool which does exactly what it says on the box you type out text and you get decals mesh decals in the editor and it's very very efficient because this is one of those things that takes you out of the flow you know you're going to make a sign you have to go back to your content application you're gonna you're gonna make that you're gonna export it you're gonna set it up instead
we could just type things directly in the editor and just output mesh decals and then we had a bunch of features in it to make them you know a bit more visually interesting than just text but this also allowed us to do a lot more you know World building and very you know context specific decals really really quickly and we also had you know lots and lots of science because you know it's a cyberpunk cityscape so everything from neon science with model letters to you know different kind of generic plastic signs handmade science and this tools you know ended up being pretty pretty much of a a beast but it could handle like everything from like the simpler science to even you know complicated animated science we're using like preset vertex shaders so you can have like Blinky signs so you can just we can just type out whatever we wanted into the editor and get output geometry so with the you know basic construction uh
out of the world out of the way we could focus on adding life to the world and some things we something we noticed during the project was that when whenever we tried doing these things and adding more life and movement to the world it was never enough we just we always had to you know revisit it over and over again and uh we evaluated it we realized we wanted or needed more and then we went back and then we know improved what we had and the running theme that happened was that you know we we ended up doing multiple solutions for almost every single thing instead of having this Mega complex Advanced systems uh instead we just made multiple things to solve uh like each problem because we didn't have a separate team that would go in and add stuff after the artists were done like everything needed to be functional and usable enough for the artists to just go crazy with it because they did all of it uh so it was very much a you know a collaborative and iterative effort and we worked a lot on
adding new features and options to extend the tools so that we could get more mileage out of them and uh we developed many ways to add life to a scene and you know these are some of the the highlights so one of the things that we did different was that we had you know a big goal that we wanted to have was to make the Vistas in the world not feel like a Vista and you know even when we used like the you know the same kind of art and it was like very high fidelity the Vista still you know they still felt pretty dead it had this enormous cityscape you know nothing in it right so we needed to add people and we started adding you know NPCs standing on the balconies which you know you couldn't really appreciate that they were moving so we added you know more wavy animations and you know that worked uh but you know still not enough so we had you know NPCs walking on splines in the background which and I'll give you a lot more movement in the background feels a bit alive but then we got this weird thing that this city is like completely dead where you are and everyone is just like walking over there in the background
so the goal was always to have those you know characters in The playable space and eventually we we added AIS for this so here's before and after for example before we added more life to the world so we added lots and lots of people like everywhere and as we added them we kept adding more visual variations setups reactions so what we could now do that we could we could set dress using NPCs so instead of you know like you know lots of people talking fighting going about their business and you know ins this helped a lot with making the world More Alive because instead of you know having some system that would Place crowds in in this in the scene we made them part of the set dressing process so you know that the artist could actually you know start when they're making a scene you know they plan for using the NPCs and they would make all these little setups like oh here are the hobos and they're you know here's the the guys in the cafe so instead so they could actually you know
build the scene up in one go using all of the uh these kind of features that normally artists will not use so the best part of you know getting them into the game was really making them part of the set dressing and then making sure that they actually just worked and another thing you know when it comes to mind when you're thinking of you know cyberpunk City escapes it's like all these you know Big commercials animated things so uh I thought I was gonna make you know shaders for that but that's super time consuming so we're like okay let's use actual movies uh instead and just play those because you have a lot more you know you have a lot more uh potential there right uh but they're like super expensive to render in unreal and each movie you have have a very you know a fixed cost on the CPU threads especially on Console so you can't just have 10 movies you have like
a fixed limitation of how many you can have so what we did was that we just made a whole pile of models and then we or like models movies and we put them into one movie and we had made sure that they were equal length and then we just scale that down like to like be a small movie and that meant that we can actually have like these you know different commercials playing but the problem was that they didn't cast light and with our camera you know with our camera we don't get so much screen space Reflections and things like that so really wanted this you know feeling where they're casting light dynamically so we want to use the colors from the movies to drive a light source um but uh when you have the light functions in unreal they don't support support RGB so what we did instead was that we took the movies each movie and we blurred them down to one pixel the average color in Houdini and then we outputed that as a CSV file and then we just animate the light source using that CSV file and uh that allowed us to have you know
this this light animated and looks like they're casting light from the movie but they are not and since we then had you know all these movies in in one texture what we could do is that we could just move the texture in UV space and we're swapping channels so we just made like a very simple like playlist system and then just swapping the color curve at the same time so it could look like you know you have randomized movies playing on these big screens and you have you know like giant blimps flying past and you know casting light with the you know commercials and it's basically just a Shader that moves around in UV space and an additional benefit was then well we have all these cool Blinky color curves so then we start adding them to like the window shaders so it looks like people are watching TVs or uh other light sources that are off screen so we can have you know big Dynamic light that changes color all the time so we got a lot of usage out of that and
another thing we added as well obviously things like traffic and moving parts and the same thing there we just realized that the amount of stuff you need is just insane because it's the variety right so we we kept adding layers or layers so for the traffic we also had we had like three types of traffic we had like five types of random spinny moving bits for all the different sci-fi stuff and it's really like the the variety that is the key so we needed a lot of very simple things so having successfully you know built all these things like we're like we have so much stuff we have too much stuff so we removed a lot of the technical guesswork from uh from the uh from the asset Pipeline with our with our workflow right uh problem was like we just moved that forward in the into later into the chain because our ambition grew throughout the project so thanks thanks to the very you know like simple content pipeline we had a very
very limited part of optimizations that we could focus on so we had draw calls they were a major problem uh same thing with streaming so for draw calls what we did was a bunch of you know a combination of Thick Art some hand optimization and uh and uh lighting optimizations I'm going to focus on the lighting optimizations so it's an extremely extremely important part of the game uh the lighting we we have artificial light at all times there's almost no sunlight and we want to have a softer look but also have a very very scalable game in terms of uh rendering and we evaluated both Dynamic and static light and you know dynamic is great but it doesn't really scale very well so we ended up with a hybrid mix so we may we use the very very large scale static lights that we hand placed we couldn't use a skylight because you know we want to have a different feeling in different areas right and when we optimized we actually switched a lot of lights to static
because you know we basically use the default texture like the default light map resolution in unreal with some tweaks uh which you know not doesn't work great when you're making FPS but when you're making this kind of game it works really well and we don't really have any textures so we have plenty of space protected for light Maps so we actually used a lot of a lot of static lighting but static lighting actually doesn't look very good if you don't have reflection probes and uh they are like the real heroes of the lighting so this is how it looks like without reflection probes and making a game from this camera angle we can't really use reflection probes in the regular way because it looks kind of meh so what we did essentially was that we hand painted the world using reflection probes because you just pick where they look good because I mean it doesn't matter because you're not going to be in the first person and see if they align well so we
just like we just place like here's a water puddle we're gonna have a reflection probe and it's going to look all nice and dynamic so a lot of what people think is dynamic lighting is actually just reflection problems but they're super expensive like they take like a megabyte of memory um but once again with our camera distance we don't really care because we don't need that we don't need that resolution so we just put them to like 64 by 64 Cube Maps uh and then we just maxed out the amount at all times and we just basically painted lighting and uh then to fight the draw calls another thing we we did was that the light map resolution by default in unreal is 1K and we increased it to a 2K and that saved us 10 of draw calls and you know why does that happen well when you by default when you increase the the light map resolution in unreal it doesn't actually increase the resolution right it packs all the assets into a texture so you just pack more
assets into the same texture and and we'll have an automated uh or automatic instancing but you can only instance if it's the same mesh same material also the same light map so by increasing the light Map size you just have more assets on the same texture so the likelihood that they can alter instance is just higher um but that means we also needed you know to load more light maps that was once again very okay because we didn't really use textures so we cost us about 50 Megs on Xbox one but cut draw calls by 10 then it allowed us to really have you know the kind of density that we wanted and then another key key part of the lighting was the volumetric light and we wanted to have this you know Blade Runner feeling you know lots of volumetric lights all the time but that's also really expensive so we use the bake light for that but that's also a bit challenging because it's built for making like you know a
first person or things like that and and all the volumetric light is like it keeps close to the geometry to keep the density High the problem is that we have a lot of Vistas and we don't really need like you know probes every like one meter like 100 meters into the background so so we use these uh the volumetric light map density volumes to to optimize all of that and you know that was great you know it it freed up some memory but it still took an enormous chunk of memory because the the default you know uh lighting grid just doesn't go any any lower by default it's not really built for making an open world game with base lighting so we just like you know I Googled it and uh I just added an extra MIP to the volumetric Light Grid which is just changing a variable and that allowed it to optimize itself a lot heavier which took the cost down from like 150 to 40 Megs
but we also had to optimize the lighting and one of the things that uh you know you think about like cuddling I mean we're making basically having a a isometric type game so you you don't think that you have to use culling a lot but unreal is very very forgiving so what we did was we actually went in and we just placed like a distance based fading on all the lights so that they will fade out nicely at the edge of the screen and that was like the biggest optimization we did because and really like I said unreal is very forgiving and they have like a fading for light but it's super super uh conservative so we just did that because we thought like surely we don't need to do that we're you know top down camera but it was actually the single biggest optimization we did in the entire project and uh there was a that was like the biggest optimization and the other was just you know basically turning lights static but we also didn't want to sacrifice Fidelity on any platform so we built tools so we could turn off Shadows per
platform per light because you can't really do that either you turn on Shadows or you turn them off and there's not really anything that you can do there so we we made you know tools and then we basically made a hand pass on the entire world and turned off shadows in problematic areas no one noticed so it worked but that allowed us to really have the you know you know Shadows on everything on next-gen Shadows or not really anything on the car engine so in the end uh our enforced limitations was a great success it allowed us to uh you know maintain momentum when we're building things and it allowed us to focus our attention but it also removed a lot of visual and Technical noise because you know we didn't have many colors we have a very busy game visually and we restrained the use of you know colors and the and held the art Direction along the way and uh we also unlocked a lot of new possibilities like the sharing of materials which also helped with you
know reinforcing the art Direction and it's uh it saved us a lot of time that you normally spend on assets so we can focus on creating the world because that was the whole thing we wanted to do like we wanted to move a lot of the time spent from the assets to working on the world and making sure the world felt alive and Polished so we moved a lot of those savings along the line and it's uh it's some of the downsides of working with a pipeline like this it's that it's really scary because you know you're making a prototype and you're like this is really cool but you don't really know like well in six months will be will we be really really tired of using like the same kind of rivets the same kind of like sci-fi bits that we're using all the time and we kind of have so it's a little bit of scary to to commit to it because you don't know um but I think it works out well and uh it's also very easy to set rules and
it's very very boring to follow them you know if there's one thing I know is that everyone loves making really really smart systems and then no one likes to use them and uh it takes discipline and it's not always fun you know it's uh because sometimes you're like I want to do this thing like Well it can't do exactly that thing and you're like and they're like no I'm gonna abandon the pipeline it's like it takes a lot of you know discipline to to maintain that throughout the entire project and you know thinking of the big picture but you know if if I would do all of this again which you know spoiler alert we are because we're making another game um we definitely underestimated the uh the end result and I have a pack charge we uh we focused a lot of the time on quantity instead of quality because in the end you know we instead of spending like one month setting everything up and then just like three years just like we could have spent you know maybe five months making sure the game actually looked a lot better and then focused Less on the quantity so
that would probably make the game look better we also didn't apply the same kind of similar thinking that we did on the asset pipeline the asset pipeline was you know very very thought out but the rest of the pipeline was very reactive we're like we're adding some stuff not enough wearing more stuff uh so we didn't really have the same kind of uh discipline uh so that's something that I hope that we can improve on and uh yeah yeah that's it and if you think this sounds very exciting and cool and you want to do that we are hiring you know for basically all positions and uh working on our next game which is a next-gen Sci-Fi cyberpunk immersive Sim so thank you [Applause] and uh please remember to uh leave
feedback on the way out and uh yeah questions oh thank you um would you talk a bit more about um why you guys decided not to use um skylights or was there at least any HDR use because it looks like the light is very nicely built and a lot of Bounce light basically a bit more about the lighting process and iterations and you know I mean basically we uh we wanted to have like a soft look to the lighting so that's why we had a very very soft bass pass um and then we use the the dynamic lighting like much more for spotlighting because it was it's like having to
having the kind of uh camera distance that we have it doesn't really work nicely to have like full screen light so it was very much divided up into smaller spotlights for like you know shadows and you know High Fidelity lighting and then we had like a very very like a strong base pass with the brake lighting and then we just abuse the reflection probes like crazy like instead of just having them by default we just cranked up the intensity to whatever we felt looked good so it's like it's like 100 not physically correct thank you all right thank you [Applause] [Music]
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Game Developers Conference · 2019
Comments