[Music] it is said God created our beautiful world in seven days and even took Sunday off it took guerilla games seven years to create the world of horizon and we often had to work on Sundays this is the only joke that's in here the rest is just tech talk and welcome everybody it's good to see the house is full I was asked to remind everybody to turn off their cell phones so if you could do that if you haven't done already it's appreciated welcome everybody good to see you all here allow me to introduce myself my name is Gilbert Saunders and I'm a principal artist at guerilla games and together with two other artists we are responsible for the creation of the vegetation of horizon zero dawn I've
been working at guerilla games since 2006 I worked on Killzone 2 as an environment artist and then Killzone 3 as a shader texture artist and after these two games at the beginning of 2011 I was asked to join a small team of people within the studio that started testing and prototyping what later would become horizon zero dawn also did a little bit of work on shadow fall but you'll see that also later on and from 2014 onwards full-on production on horizon zero dawn now please by show of hands how many of you have played horizon zero dawn nice that's good it's good to see well playing the game you might not have focused on vegetation as much because you were focused on the dangers of the world so we're here to
talk about vegetation so let me start off with a little clip to show you what we ended up creating don't have any sound so you usually you get something like yeah I want to bother you with that so just it alrighty okay you are all gathered here today to hear me talk about the vegetation we created for our game most of you have dealt with same or similar challenges when it comes to creating simulating and rendering nature assets nature assets are still even on this generation of hardware at best annoyingly
oversimplifications of the real world which is besides annoying also what makes the subject so interesting the philosophy of make more with less certainly applies here on the screen right now are the topics that I will touch upon today together they represent the artistic and technical challenges of creating and rendering large amounts of vegetation in our décima engine but first let me start off with some overall information history after which I will quickly start addressing these subjects first some information on our decima engine and renderer we are probably not completely unique at this but within decima as an artist I'm able to create and maintain my own shaders of course this is only possible on that ever watchful eyes overt acting shader
creation happens in maya through Maya's own shader notes together with a large amount of custom shader notes provided by us provided by our graphic programmers profiling the performance of these shaders lies with the artists themselves under the guidance of our tech team but as such there's a real feeling of ownership when it comes to the quality of the shaders the assets as well as the performance of my work are decima engine uses the first shading and we targeted horizon zero dawn to run 30 frames a second at 1080p on a ps4 and 4k on a pro when we started to develop what much later would be named horizon zero dawn this new IP we were shaping was going to contain all of the things you see on screen right now and from the moment
most of us heard the pitch for this new IP we were sold especially me and especially when it comes to the BBC nature up there and seven years later I'm standing here in front of you to talk about it and to talk about what has become one of the pillars of horizon while we were slowly formulating and creating the world of horizon the rest of the studio was busy building killer Killzone Shadowfall Alliance title on the new ps4 within this game being behind enemy lines the one nature leveling Killzone Shadowfall can be seen as horizons testbed it was a first real test in dealing with the production the look and the movement of vegetation we soon discovered that since vegetation assets are not static assets but assets with a layer of separation on top outsourcing and maintaining them
proved to be slightly difficult we also got a good look at the performance of this nature level and learned and that learned us that creating Foley it's the killzone way would not work in the open world of horizon we really needed to rethink polygon shader and texture budgets this level also marked the first humble beginnings of the placement system we had a up and running in behind enemy lines in the simplest form but it told us that without the placement system we would not be able to create the world of horizon not the world that we truly envisioned to emphasize that I would like to point to a talk that my colleague yap who is here today as well gave last year at GDC and you can find the paper on gorillas website and of course you can watch it in the GDC fault but the short version is we created a system in which an
artist can describe a large variety of interesting and believable environments which can be applied anywhere in the world we want the system to be highly are direct about and seamlessly integrate with manual placed art it needed to be fully data-driven deterministic locally stable it helps us not only filling the world quickly but also in testing phases and testing the scale and performance of new assets for instance so I recommend checking out europe's talk and i'll supply a link at the end of these presentation in the last slide ok let's start with the movement of our foliage from the start we knew that simulation of nature needed to be tied in with the weather system we were designing for our game it needed to be art in gameplay driven and controllable it needed to drive the
verdicts program of our vegetation shaders so at the base of our simulation lies the global wind force field sorry before horizon force fields or wind boxes as we call them were mainly used to drive the movement of particles they were used locally they were placed by hand and a way smaller scale than the wind we were going to need for the world of horizon the global wind force field as we called it is an extension of these wind boxes but with a couple of changes our global wind force field is a computer running at the beginning of every frame that simulates the influence of a force onto four categories of spring settings and updates 3d textures that are shaders can sample that was a long sentence sorry okay first the wind is a text to the
player or the camera if you will this allows the simulation to always be at this highest resolution closest to the player over distance we gradually sample a 3d texture at a larger scale and at a lower resolution so let's have a quick small visualization over global wind force field in game so local around the player and as soon as a low stops I'll zoom out a bit and you'll see that this is the second cascade and we have another one for the others scaling is a little bit off of this one but I guess this sort of shows you what we do the setup you just saw gives us the ability to simulate four different categories of spring settings without any additional
shader logic this allows us to set a distinctive different movement for three types of assets we've divided these assets as you can see into three categories I told you we could simulate up to four so we in the end we call it special but in the end we used the last sample to drive our banners and tarps but that's a completely different story for rendering and shading for all intents and purposes we only use two shaders though we actually started off I really wanted this but I couldn't make it work we actually started off with only one shader to handle everything but over time we found that grass needed a bit more specialized approach so we build a more dedicated shader for it I would talk about grass a little bit later but I wanted to start off with a look at the verdicts program of the
shader that drives our trees and plan so we have a way to simulate wind but that still needs to translate into the movement of assets on our screens to do this we took a similar approach as described in a GPU Jemez 3 where a skinning approximation was stored in the vertex colors of her mesh back in 2011 this was one of the first articles I researched when I was starting to tinker with vegetation and to this day this way of storing skint data is one of the few things that did not change during production we change a little other things over time but this setup proved to work on all assets large and small let me show you what we did experimenting with our wind and looking at foliage in motion in real life we found that to convincingly mimic because we're still mimicking we needed three levels of detail large-scale motion or complete Bend of
entire asset medium scale motion which will deal with the branches and small motion which will deal with parts of branches or leaves so first we want to have the whole asset react to the wind we want it to bend because these assets are less rigid at the top as opposed to the bottom so we use the height of the asset as a gradient for this large-scale motion the next level of movement is that of the branches and everything attached to it starting at the trunk we give the asset a gradient for us the gradient is in blue to approximate rigidity these branches have simply put restore distance the trunk now we're getting to the last level the leaves or anything that's small and thin enough to act like leaves what we do here in our red channel is store distance to branch
we also use the green channel and we use it as an index we do this way sorry this way we can offset our animation of our branches in our shader think of it as a time offset we also store a pre computed ambient occlusion in the Alpha channel which we use for a couple of different adjustments in the shaders later on sorry with the vertex colors in place our vegetation shader can go to work all of our assets need to be driven through this vertex shader so we ended up opening a couple of variables that allowed us to tweak the animation on an asset for asset basis these variables are marked in orange and these five were enough to handle the complete amount of
variation that we have in-game rigidity is an easy one not all trees sway as much so certain trees need to be dialed down or pumped up for branches we have two controls sorry three controls we have Bend which is the motion along the vector of the wind we have sway where we can scale the amount of motion perpendicular to the factor of the wind and we have lift which is literally a scalar for our up-and-down motion that we can bump up or dowel down so we literally allow scalar of motion on three axes for our branches the last one is our micro motion or leaf motion based on the strength of the wind I move a tiny 3d noise texture through object space and I use this to move what I have designated to be my leaves so what you
just saw in the red channel all right since plans in our game have exactly the same shader as trees but are usually smaller we have the ability to kill the overall bend completely from the shader reducing costs and potentially also unwanted bending into the terrain also another big help within our shader is this little formula of a ramp function we multiply this by the maximum of the winning game and we have the ability to ramp up the influence of the wind for different assets for instance I can recall our directional feedback about the leaves of our aspen trees needing to move earlier with at lower wind speeds so this formula was a quick way to really differentiate that asset from the other ones grasses we had such ambitious plans
for the grass and when we started horizon first off and we did not really waver from this the guna the grass needed to be everywhere but we wanted our grass to be geometry no alpha plains we wanted a Lloyd to squash it with her feet and move it with our hands and all those things you envisioned when you do not know precisely what P is for is gonna bring and we had it up and running it was purred a part of our earliest prototypes and the rendering of that cross took up the entire frame so we started a journey simplifying our grass bit by bit finding out what needed to be done to make more with less and this is what we ended up with as little or as few triangles as we could a dedicated
grass shader and some clever artistic choices when it comes to the texture let me also point out in the list on screen right now sometimes I talk about high and low shaders from now on what that means is we have the ability to load out certain functionalities in our shaders on a per mesh or per load basis for grassed it would mean that lot 3 here would not have an animated vertex program at that distance and also for that instance I do not simple a normal texture anymore but I'm drifting off a bit let's go to the vertex program we sample our wind from our force field at object Center and we use the height of the grass as a gradient to mimic rigidity of the mesh we start displacing the vertices of the grass and this will be our base motion but as you can see
that this alone will not always give us something spectacular and we need more than this alone what I also wanted to avoid is having the grass tilt over to one particular direction or standing still in one position for a long period of time this gave us unwanted artifacts so we layer some additional motion on top driven by the length of the force field I added some large-scale motion to periodic functions combined to make little figure Eight's and it's quite the soothing animation I think the motion is sampled for the whole mesh so per asset the vertices will move in unison on top of that we add some small-scale motion one periodic function displacing the vertices along
their normals the ambient animation large and small together accounts for about 80% of the total animation the rest comes from the wind sample two slides ago on top of our simulation are grass also has to do a little more I really wanted to avoid the player looking down on planes and having the feeling that the geometry disappears when looking down on our mesh so we tilt our mesh planes away from the camera like that like so so when the camera moves up we push the verts a little bit further away to try to avoid having the grass look like cards because the out cards I mean our grass meshes have a footprint of one and a half meters approximately and placing them in the world without looking at the terrain
resulted in some unwanted clipping or floating issues having all vertices follow the terrain solved all this so based on the height map of our terrain we displace the vertices of our grass in object space finally we also do two little things to help with loading we scale the animation down over distance so that we can remove that animation completely from our last blot and scaling the whole mesh down makes blending the assets with the terrain easier and it gives a little performance boost all these little programs together make up the complete verdict program verdicts program over grass so let's move on to shading so we have our meshes sorted let's move on to our shading setup transparency in games even alpha tested transparencies are expensive and
we did not have a lot of experience with rendering alpha tested assets during our Killzone years and vegetation oversimplified as it is is relying a lot on alpha testing so the question was how do we handle the amount of vegetation that we know the world of horizon was going to need well we went about it like this what we do is we render all our alpha tested meshes in two passes first as early occluders after that we render them normally in this initial depth only pass we do our alpha test rendering this pass first will give us all the depth information after which we only have to do adept compared when rendering our geometry pass without an alpha test this is important because alpha test is incredibly expensive but this way we operate on a very cheap depth only shader the geometry shader is much more
expensive but is now accelerated by a very efficient fixed function depth test so let's analyze a frame of our game to see what that means for rendering x on the GPU here you can see a capture of our GPU profiler in game i am filtering if you look in the top right there's placement I'm filtering on placement right now so the percentage that you see here dear deal with all the assets placed by our placement system technically not all our alpha tested assets but because the we use the placement system for a lot more than only alpha tested assets but in a forest location like this you can bet that 95% is alpha tested but the numbers that we are interested in are our depth prime pass at almost 10% of our frame and our
geometry pass at about 11 and a half so that's 21 point 3 4 5 in total now let's see the cost of rendering all this without our depth only pass that's a huge difference so upon noticing this early on it became clear what a huge difference the depth only passed made so simply put the Alpha tested part needed to run on the cheapest shader possible so our alpha textures we started horizon zero dawn with signed distance alpha textures that could give the artist control over the size of the alpha in our shader we could enlarge and shrink our alpha in shader and we were enlarging our alpha over distance we did this to combat the quality decrease that happens when the texture just to lower mid Maps also at some
point we had dynamic snow in our shader that could also adjust the Alpha on-the-fly however as the world of horizon grew bigger and bigger and more populated we were always looking to improve performance and we found that adjusting the Alpha in the shader proved to be a costly operation and we really were looking for percentages to shave off so let's have a look at our GPU profiler again and here's a little disclaimer it's sometimes hard to replicate certain situations when so much changes over the course of a project so this is a little testing that I built to hopefully mimic the effect but here is the GPU profiler again the two numbers to look at here are once more the Det prime but also the shadow pass is influenced by the way the Alpha
texture is handled in the shader shadows are at almost 9% of the frame the prime is at 6 and here is it with what we changed it to a nice drop of almost 2% on shadow and depth prime depth dropped roughly a percent so what do we do to get these results on finding out the cost of adjusting our alpha to our shader we remove that functionality and replaced it by generating a custom map chain this makes sense because we already sample this in our shader so anything that we can get out of this is free we build an offline tool to do this forest and this tool is described on the slide here and in short it does it does this the process calculates the coverage of the alpha tested image and builds of a normal lip chain then we sample each
map we up sample each map by linear build a histogram and within that histogram find the point that matches our original coverage our alpha test value in game is 0.5 so dividing 0.5 by the value found will give us the amount with with which we need to scale that map to end up with our original coverage sounds logical right and here's a representation of our mid chain and its coverage after a clip at 0.5 and the bottom two rows that appeared represent the scaled up alpha created by our own custom coverage alpha algorithm and its coverage after a clip at 0.5 so all the work that was done by a shader now resides in a single texture sample okay
making your alpha as small as visually possible is always good practice but another thing to keep an eye on especially for assets that you know you will draw a huge amount of is wherever you can make your alpha small enough that it will fit in the cache especially for our grasses this simple change was huge win a b c a b c for compressed texture that texture over there - 5 6 by 1 - 8 comes in at 16 kilobytes without lip maps 21 kilobits with mid maps and i really started off with the version without the mid maps until the graphic programmer that it was working on our anti-aliasing solution saw my check in and wasn't too pleased about it so we went for the larger version with the mid
maps included but yeah you do really need a good anti-aliasing solution to make this look awesome so shout out to a paper that our graphic programmer did with a kijima a programmer on cigarette last year this is in short the anti-aliasing solution that we have running in game right now again I will supply a link after the talk in my last slide all right let's have a look at the rest of our pixel program so our decimal engine uses the first shading and our vegetation shaders right out to these g buffers and these are the textures that we've supply to our shader with the exception with the exception of grass which never has an
ambient occlusion texture we also omit translucency when we render most barks on the slide you you'll see a tool we have which is our texture set tool this is a cute little amazing tool that lets us load in photoshop files and with the push of a button will pack these into compressed DDS files ready for use in game and editor and what you see here is a typical setup of vegetation textures so 2b c 7s and a b c 4 all right normals if we are dealing with proper geometry like the plant on this slide we do not have to do much more than we would with any other 3d asset we only have to take into account that we need to render it double-sided so based on a check to see if we're rendering a front or a back facing triangle we flip the normal
accordingly but when our assets rely heavily on alpha planes or triangles flipping the normal incorrectly that can be extremely useful in hiding the cart like nature over canopies in our grass what we do is we adjust the normals of our vertices and take the absolute value of our view space normal to ensure we never render normals facing away from our camera we use an isosurface to generate our normals and this is an example of how the mesh would look surrounding our canopy and we transfer those normals onto the verts and this is what the normal buffer would look like so let's compare between the incorrect and the normal normals and this is a G buffer and this is what we ended up
choosing it's a highly artistic choice because you're breaking lighting and translucency in a way so we did not use it on everything but again when dealing with approximations of geometry it can help in hiding the simple nature of your assets especially on grass where we tried a lot of things to hide the fact that it literally are 32 triangles we leave two geometry normal size is but we still do the apps on the set component of our view space normal and again a GB overshot the albedo all our vegetation in our game is colorized and for the colorized colorization in our entire game we have a texture array in which we store 64 what we call eco taupe color eyes textures of 128 by 8 pixels apart
from the colorization of vegetation which is enlarged on the slide these textures also hold colorization of our rock rocks terrain dust and lichen the place in the world of an asset dictates which texture to sample so the W component different types of what we call world data are captured in one greyscale texture that drives the V component and the artist can choose from eight bends and think of these as choices for different type of assets within the colorization texture all vegetation assets take one sample for the whole object except grass which we sample per vertex to facilitate all this we average
out the color of our video textures to a mid gray value we also have a mask texture in case there are parts we do not want to colorize inner shader we overlay the sample colorized value on top of the sample albedo texture through the mask texture with an illuminated function the resulting color is the background colour mixed with the foreground color brighter where the foreground is bright and darker where the foreground is dark and this is what you get when you combine this in shader we derive our roughness and reflectance from accommodation of texture samples the ambient occlusion baked in the vertex alpha and a variable which for reflectance we fixed at 4% dielectric for roughness we still wanted a little bit of artist control so we opened up
that variable and we added a level or set range version of our translucency texture on top of that too as an easy way to differentiate the roughness between leaves and bark should that be present in a single texture on grass we do not have a vertex color stream or an ambient occlusion texture so we use the translucency texture to do similar things the first translucency the first three items on screen here are happening under the hood so to speak and it's not something that we have access to or are able to adjust in our shaders but I just wanted to put them out there for clarification the last three items are open for our artists to adjust the service thickness informs the amount of absorption inside the surface and the whiteness of the shattering cone scattering gone once it
leaves the service on the other side we encode these as translucency amount and translucency diffusion values for r g buffers the translucency amount is the amount of absorption while translucency diffusion is the amount of scattering we've pretty much locked the amount of diffusion for all vegetation at a certain value at some point and we control the translucency amount by a texture sample we also a layer onto a pre computed AO and which is a combination of our AO texture and the AOS stored in the vertex colors for grass again we use a derivative of the translucency amount texture and our pre computed AO and the last one is a big one where we break away from attempting physical correctness is in the last phase where we have the ability to boost the amount of scattered light this gives
us more of a surreal effect that visually was more in line with the overall look for the game all right that's sort of our shading explained them you know what we need for our wind simulation let us now look at the pipeline for creating vegetation answers once again when we started we were the killzone guys so we knew how to build this and things like this and I had to deep I had to dig deep but we even found this killzone vegetation so we knew we had our work cut out for us and to stretch our legs a bit we build ourselves an art benchmark to see how far we could push vegetation and I
actually found a video of that that I really wanted to share this is what we build I believe it's in the beginning of 2014 to at least inform everybody within the company how dense we wanted to go and and how much different assets we wanted to spawn within our forests this beauty ran in game at a whopping ten frames a second and there's some really funky mushrooms but because for this test we were still building our models like we kind of would any other kills on assets lots of attention to the highest Lord and hoping to crunch away enough vertices over distance to make it run and we continued to do this for some time during production and then came III 2015 our first review of horizon not
only a trailer but we were playable playable and because the game needed to be playable for our developers to showcase the game we needed to do a huge optimization pass on our LEDs through all sorts of software processes not so much on the highest lot but every other lot needed to go down so when III was out the door we tried to figure out what we could do to improve the performance and quality of our LEDs without having to resort on software solutions to reduce triangles it needed to become part of creation what we decided on doing was flipped the creation process so we build our lowest loss first and if we happy with the looking game and the performance we start adding detail that is needed for
our haier Misha's so let me illustrate this a little bit better we built the lowest load of our components that we want to address our tree or any other assets with this usually triangle or a quarte and we spent a small amount of time sketching out what the texture or the silhouette could look like and then we start building our assets with those for this we have used speedway throughout the development of horizon and when we're happy with the results we spawn these assets in-game looking at things like performance silhouette density of the canopy all stuff like that if we're not happy these changes can be made quickly and we can still modify a lot in this stage so as soon as we feel that the asset works we go into building the high-resolution component needed to create a textures from and this is a example for of a branch that we ended up
making I think this is a branch it's a combination of my ISP tree but these high-resolution components as long as they match the texture and the texture layout that you've sketched out when you were beginning this asset as long as they match you're fine and once we have all the high-resolution models built and laid out we get them into Maya for texture baking we apply our own shaders and have the ability to bake down these meshes and textures into the UV space that we will need for a game models and now with these textures baked and present we return to our speed models which we now treat as lot 3 and start loading them up in other words we start detailing look -
and the first one the little triangles you see surrounding these measures were a small workaround to make sure that in speed-read the LOD bounding boxes were similar we've used speed 3/6 route production and this is a little thing that we needed to do to make sure that they aligned perfectly newer versions do not have that issue but we did not want to switch software halfway through the pipeline or the project back in speed we we replaced our speed model meshes with our new low chain and voila we are good to go by the way did anybody notice that we hacked a lie into the UI of speedy really easy to do but quite fun when people do notice so we export a lot chain from speed read with bones and AO
to an FBX and then we use a custom Houdini process that we created in-house that takes that mesh takes that skeletal and skinning data and converts that data to the verdict color that I described at the beginning of this presentation all that's left for us now is to set up the asset in Maya and export it to our game so here is what a typical blood chain of a three asset would look like again we use high and lot and low load shaders and you'll notice that we have billboards involved in load four and five I really wanted to include some information about billboards but then I just looked at it and there nothing really special there just cross plains so this is all you get and here you can see a sort of typical setup of our
another asset okay shadow Caston we use for Cascades for our Sun shadows in the compartment Cascades that is called out first we only render a Lloyd including her hair clothing and equipment and that means that they cast high-quality shadows on a ler herself and her close surroundings oh my vegetation does not vendor in this Cascade Cascades 0 & 1 our standard standard shadow maps and we have a distance cascade which uses a height field based system to render out shadows but let's talk about Cascade 0 & 1 the standard shadow Maps since these are the ones vegetation renders into when
rendering these shadow maps we do something a little bit unusual the natural way to select LOD s for shadow rendering is distance to camera based this causes shadows to pop noticeably because there's no cross fading between the Lots when it comes to shadow map rendering however we do a crossfade between our Cascades so what we decided to do is render objects into this shadow Maps based on fixed distances and only one object per cascade so every object rendered into Cascades 0 will not we'll select a lot as if it is 5 meters from the camera every object rendered into cascade 1 will select a lot as if it's 25 metres away from the camera this fixes the shadow not popping because while an object is in a particular cascade it will always use the same shadow lot if it transitions from one
cascade to another then the smooth blend between cascades will ensure that there's absolutely no popping during the change to the different shadow load this increases render cost somewhat but it's almost completely solves the problem of shadow popping and it was definitely worth it and I've got a small little movie it goes fast so pay attention but I also have it looping so you don't have to catch it the first time around but so there you go there so here you can see that smooth transition between cascade 0 & 1 another thing we did for vegetation and some other assets is we separated out our shadow casters from our visual log chain so while our visual meshes are - also so we have two shadow casting
meshes where we have six visual meshes this is an enormous wind to begin with because you can really crunch down on things like triangle count and as you can see our second load shadow caster it's not alpha tested anymore it's not animated anymore so it is as cheap as you can possibly get so all right we're closing - we're reaching the end of my presentation and I hope you at least enjoyed it to summarize let me end up with a short list of things that I would recommend all of you trying or utilizing if you take steps into vegetation and that is
the list up and down so the stuff that I've mentioned the the DEP Prime the custom-made chain the the whole lot opened down was a big one keep your shadow caster separate from your visual meshes use yobs placement system and one of the things that also helped us is that we could we were able to do it all in-house which made it so easy to keep iterating and keep changing and keep shaving off perform so that's a really big one for me so I'd like to thank you and I promised you a slide with the references that are used so here it is and I'm welcome everybody to with questions to go up to the microphone if there's still time to do so [Applause]
sir is it working yes beautiful by the way love the game ku mazing it you are okay Oh your name my name Thomas I almost welcome yes III did have a question you didn't talk about the snow or the illusion of the weight of snow on vegetation yeah how was that achieved because I kept being impressed as I was walking down the bushes with the other with the snow on top light hitting it so I was just kind of wondering did you go through any kind of physical simulation or no i deceived the our snow started off as a dynamic snow system in the shader where we would literally just sort of poccadot a little bit of white stuff on top but it was expensive so what we ended up is creating a dedicated snow assets for where we could literally
spawn in areas of heavy snow okay and then just speed we gave us the tools to really because it is a dedicated set we knew it was snow heavy so we just sort of pushed it down and and gravity let gravity do its work and okay thanks alright thank you hi separating your shadow assets from your visual rendering assets did you have any problems making sure that those continued to line up and how did you solve those well as soon as you separate them out do you have the ability to well you start optimizing your shadow casting low chain and after that it is pretty much just a visual thing that you need to do you know everything we do is an approximation so you you be surprised how much you can get away with I mean our first shadow casting lot is about the triangle count
as a a lot 3 on our visual mesh would be so in a shadow cast thing you know within the tree it will all survive it's just crunching down those triangles and and while you know keep checking your working game and it will end up working absolutely cheers sir hello I wanted to ask you a few questions about placements mm-hm so I've seen the didn't really mention the tools for artists like how did you author all this and oh you you iterate on your placement well the okay III can talk a little bit about a placement our placement system runs in our editor and it's a node based system where we combine all sorts of
world data and what we ended up with is density maps and it's all on it's all running on GPU and you should mention imagine that you're just multiplying texture upon texture and then subtracting another texture and so you know if your hotel is a forest but there's a road in between you know that's that's you multiply that Road on top of that so that will become black so the the forest will still have a density of one but not on the road and we layer all these stuff on top of all these other stuff we look at things like slope proximity to water flow via lines all these things that you can that you need to make it sort of work in a realistic fashion and that sea paint in real time we we can paint in real time here but we
have one artist that the builds of these rule sets so that does the layering not on a road not in a river you know and then everybody else in the building can start painting in a forest or you know or now we're in open field they have the ability to paint that but there's one artist that defines what they're gonna get when they paint that okay so I'm not sure if that answers the question yeah it answered the question and because I've seen also the Ghost Recon placement technique and it's much more complex it's on new Jeany it requires like CPU forms to be processed it's like you are getting really good results also and and it's like it's almost real-time on your side and it require your kind of a farm on the other side what do you think is there something is missing in
your Technica is it only because it's your tech and it's on GPU I don't think well III thoroughly believe that the solution that we have running in game is awesome right now for us it works for us is something's missing for you in what you get oh yeah I've got a wishlist we cannot rotate assets based on any data that we have right now so what we wanted is to have trees overhanging over rivers for instance or on the outside of a forest we can we cannot do a rotation based you know on curvature of of the river or stuff like that that that's one of the biggest ones that I'm requesting now that I can you know think of right now okay did you use some kind of
capture some kind of capture to to make your vegetation like photogrammetry there's there's one tree in there that's photogrammetry okay and note this one the do you see the aspen tree by the way the the quaking aspen in the dlc we did more photogrammetry because that that was also sort of slightly kind of you know let's experiment let's go while we went really wild because the do you'll see is like we needed to scrape performance i think said in the end so yeah so hello i think thank you for sharing excellent talk yes I was wondering for the trees specifically since you have some motion going on in the shader for both trunk the branches and even like the most significant pieces of more rigid pieces of the tree mm-hmm how do you treat gameplay for that like if I shoot at a branch that is being animated in a
vertex shader if whatever you're shooting has a force field attached to it oh no like I mean an arrow like am I gonna collide with the branch for instance you have am I gonna collide with that with a branch no a collision is collision or a trees is usually just a cylinder that represents its footprint because we need to cut out the navmesh around our trees yeah and we need a low it not to run into the trees but our canopies have no collision whatsoever I see so they're just gonna push away if it has a force field associated with it yep yep okay thank you all right thanks Hey so I'm curious about the wind force field and how does that exactly get generated like where do the gusts of wind come from well this is yup where did it come from and it's magic right it's all math so
when I talk about a force field that it's it's it's just an area defined in our game our weather system uses a couple of them that sort of blend so winded max speed is like 33 so we start with a force field for 0 to 10 and then a force field at zero for scale of 10 force field of 20 and force field of 30 and we blend between those and these are just there but they're yeah so the this force field have properties like flow in flow max flow math thank you it's it's slightly above my pay grade but it's it's completely his pay grade I give time from one more question my name is Robin I'm wondering about I said I think it was explicitly the grass
shader having grasp getting matted down when the character walked over it mm-hmm I guess I was wondering in I assume that's not put into any of the other three shaders that you mentioned actually actually we didn't have any interaction of alloy with the grass but it's something that we wanted to do it's again on a mental wish list for me because I I think that's thoroughly and enjoyable if you know more interaction happens of course Oh in the context of the snow there was walking through snow with that same similar system have possibly worked in the context of grass or was it just you mean the snow in the DLC and we're we're because in the DLC we introduced a system where you could curve through snow yes and we're looking into abusing that same system for lots of other things so very cool thank you all right so that's it
to
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Game Developers Conference · 2023
Comments