Procedural World Generation of Ubisoft’s Far Cry 5 | Etienne Carrier | Houdini HIVE Utrecht

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] [Music] all right welcome everyone so my name is it's an Jackie and I'm technical at artists at Ubisoft Montreal and I've been there for three years now and I joined Ubisoft right at the beginning of the far cry 5 project and this was my first triple-a project and well since I didn't do any triple-a before I joined Ubisoft but I kind of had a secret secret weapon in my sleeve and that was my experience with procedural development so I've been passionate about that for about six years now and before joining newbie stuff I was working on indie games and that's where I started introducing procedural workflow into my my pipelines and well so today I'm happy to share with you the the procedural pipeline that we we developed for Far Cry 5 at Ubisoft so before we start this is the the constant the content that we'll see today during the presentation first a quick introduction and the some of the challenge that we wanted to tackle and then our objectives for the pipeline we will then take a look at the procedural tools that we develop and then how those tools are used from a user point of view and after this we'll dive a bit more in depth into the pipeline and look at all the cliff and biomes tools work under the hood and then quick sections and a few things that we change along the way and finally a conclusion part so what was our initial challenge that we wanted to tackle first we had a tearing that was changing constantly so this is a far cry 5 terrain over two and a half years so the challenge is how do we manage our content when there are so many iterations like this so here if we look at the smaller part of the same terrain but with let's say forests that have been applied manually by level artists let's see so the initial this like forest distribution pattern is is at first coherent with the terrain we have but if we if we look at the the change the terrain changing we quickly see that the forest patterns become incoherent so how do we solve that it would be for sure tedious work to repaint the forest every time we do a justment to the terrain and also if it was managed because the world is used if it was managed by several different users how can we ensure that the the way this is painted throughout the world remained consistent what we could do is we could lock the the terraforming really early in the project to avoid issues like this but that wouldn't be realistic because this is all iterative process as for sure it's vital to the game quality so with those challenge in mind we built a procedural pipeline and our first objective was to develop a macro management tool to fill up the world with natural-looking content and then this content needs to be consistent with the terrain topology so as we saw before here we have a same example but this time with a forest distribution that is adapting to the terrain shape and as we can see the result remains coherent with any of the terraforming change then this whole pipeline needs to be automated so we use dudeney and within the engine and as well as nightly generation on build machines to fully refresh the world every night so we have several machine that that process different part of the world one by one well the each each map actually the world is divided in maps and well it does that until the food world is generated and this ensures us that the user will have a world that up-to-date every morning then all the data generated also needs to be deterministic and which means that the generation needs to yield the same result given the same inputs so by using different build machines whether we bake the left or right portion of the terrain here the the matching part we can see the matching part in in the middle remains the same and well this is kind of important as well for the the navmesh generation in the game well because we have this nightly build process that that makes the world mapper map so the the junction between each maps needs to be seamless finally our last objective we want the whole thing to be user friendly just the nightly build alone is not enough to ensure the user have to date data we need to be able to beg the procedural generation as as they as we work as well so of course we we have all the tools available indeed stir so now let's take a quick look at the available tools that we have initially our mandate was only to tackle biome distribution but because it needs great we ended up extending way beyond that and we created many different tools so first we have a freshwater tools that generate lakes rivers streams and waterfalls and we also have fans and power line tools we have the cliff generation and steep terrain surfaces then the biome tool that spans all the vegetation throughout the world we also added Fung a fog density map and a generation that is well basically it's just a 2d map that generates based on the the topology of the terrain the position of far as freshwater and stuff like that and then it produces a map that is used by the fog shader and finally we also generate the wall map terrain along with the scattering of miniature trees on top of it so I was it like using those tools from a user point of view and this next section will take a quick glimpse of how it is like to fill up the world well actually fill up an empty map using the procedural tools so first stuff a user will do the terraforming path we did add a wall machine path to kick off the project but most of the terraforming really was was done using the tools in the instr and then the artists can lay down a freshwater network using well this is achieved by using curves and splines as we see here and this will be used as inputs for the freshwater tools so for River we have control directly on the spline foot like for the width and then once it's set up we run the procedural generation from the shelf tools and this will produce the water surface as well as some acid scattering on the water and the tarrant texturing then the user can generate the cliffs the tool is simply based from the terrain slope so there's a few control but most of the times they don't do anything they just run run the tool and under this our terrain area so but we also add a few extra control like a exclusive exclusion mask and we'll see more detail on that later and actually the user the most of that time they didn't bother like generating the cliff because the bill machine was taking care of that at night anyway so they would just work the terraforming and then send it their work and then the next morning this would all be generated now the level artists can add education and this is done with the biown painter that we see her it's a bit dark but it actually paints a dark green color then the user would run their procedural generation and the main biomes naturally distribute grass and forest biome and so this is yeah I would it scattered the vegetation the the recipes also can react to water proximity and spawning a specific assets or specific species it will also avoid spawning vegetation on the cliff erosion lines and in this case it the altitude also affect all the recipie behaves spawning a smaller and sparsely trees up in altitude so this is nice but the user will for sure want to customize a location the artist can start by clearing out an area by painting a sub biome like grass and then laying down a road spline because so far the result that we add was quite natural and well so this is how we will bring bring immense influence on the environment and override model nature if we can say once we're happy with the the inputs we back the road and refresh the the biome procedural tool and then we get the updated result we have our road generated our vegetation has been cleared out of the way and of course there will still be some assets that need to be placed by hands like I'll shed vehicles so based on those perhaps we need to readjust the the biome painting a little bit some brush that we have in the biome painter they don't do any asset scattering but simply apply a tear in texture so we can create some kind of driveway like that and then add back some trees and forests around the location by painting the forests a biome that's what we're seeing here and then we just refresh the volume to one more and take a look at the result so yeah we have little clumps of trees where we painted them and that's pretty much that then to cover all our tools we can take a look at how we can add the fence so the input for that is once again a spline the user will set the fence type he wants to generate on on the spline parameter itself and then just run their generation and we have our fence that automatically and user can also add powerlines network in the world the electric poles will spawn on each control point of the spline and then in this example we can add three different types of power lines that will automatically connect with one another so we had we added a standard line a single line and two hours connectors that we see here we make sure to snap the splines together then their user run the the procedural generation will have a transformer boxes added were required and if the user doesn't snap the spline correctly the system will do it automatically within a certain distance just as a fail-safe so here we have a bit of problem we have trees in the waiver power line but we just have to refresh our biomes and that will take care that that's because our systems they can speak with one another and they exchange data so that covers up the tools from a user point of view but just to kind of illustrate the the non-destructive workflow the tearing can be adjusted at any time so back there we lowered the tearing quite a bit quite a bit and we were adding an ID on here so once we're happy with that we just have to refresh the affected procedural tools in this case I'm just remaking the the cliffs and the and the biomes and we get our updated result all the rest is still working properly so now let's take a look at how if this is working under the hood how does that work we we have a annuity engine implemented in our in-house engine and it's dunia and what is really opening doors and possibilities with this pipeline really is the available inputs and outputs between woods neener or engine basically the data exchanged between the two so well this is you guys probably know know what Whitney is but it was a quick page just to describe what kind of goods nears so so some of the inputs that are sent from dunya to Disney that's done through a Python script so we have like the world information like the world name the size of it because we didn't have only one world during production we also had a bunch of gems for testing purposes and we add the pipeline running on those those world as well we also send the file tabs at that story because we can't expect all pcs to have their file necessarily installed at the same place or on the same Drive so the the instr would provide the path to Whitney engine we also send a Terran sector which is kind of an area of the terrain that we want to generate and then we'll see more detail on this in a moment we'll send the splines and shapes along with the metadata on the geometry attribute for instance the defense spline would have the fence type as a primitive attribute once it's imported inside and other inputs that we have in the pipeline is or simply extracted on disk and available to read from mutiny with with the the file pad provided by jr. so all the right maps filed by um painter files PNG to determine mask and also with neat geometry that might have been generated from a previous tool but then really the main input for the procedural tool is actually the Terran itself because the the generation is always linked to a specific area of the terrain and so this is just to show how the the terrain is kind of subdivided in the instr or smallest granularity is a sector what we see in pink so that's 64 by 64 meter and this is the kind of smallest area a user can decide you to bike when he's using the procedural tools what happens when someone wants to rebec the procedural data you will select the generation area so it's there all everything that is loaded in the instr and it's worth clarifying that in dunya the old world is not loaded at all time when we opened it stir we well the world is divided into several map and then the the user will select which portion of the world he wants to to load when he is opening up the editor and then the other options are the local map section or sectors the local being the the one that is located directly under the camera when you're moving around indeed stir and then the last option it's the frustum option so all sector that are visible from from the camera so now let's take a look at the data that would sneak and send back to the editor we have the empty point cloud tearing textures there are a night maps to the Terran data either RGB or grayscale geometry that would be procedurally generated and then terrain logic zones which are basically just IDs on the terrain that we use to assign different preset of past process and fog settings and stuff like that so all of these are safe as a buffer in a special format on disk and this this gif time today it's due to hope that the data that's on its own space that avoid sending one big buffer of that that takes a lot of memory so it's a easier way of transferring the data between nodes nyan in our editor some quick specification concerning the entity point cloud it could really be anything that as a position in the instr so a vegetation asset rocks collectibles decals VFX prefabs could even be animals in their favorite type of environment and then the points are exported with the object ID of the asset to spawn indeed stir so the the X the exported data is also Canada the key to the tools interconnectivity the procedural generation is sequential so the the bill machines will always bake them in this order so each tool can export that with the the Goldwyn influence the following ones so some tools will only write new masks others will read masks generated by previous tool as well so as an easy example the the fresh water will generate a water mask that is then used later on by the the biome tool for instance to drive the spawning behavior of some specific species so that's our first big section the cliff to well the purpose of this tool is to generate Cliff geometry on large tarrant surfaces and it kind of acts as the detail skin on top of the terrain so bear with me here this is kind of large section and just to give an overview of the the content we'll see in there we'll take a look at the previous deck that we had and farcry brand and then we'll look at the two inputs stratification geometry shapes shading method deterring that erosion vegetation growing surface and then the exported data from the tool a bein so or previous tack on frying well there was none on Far Cry 4 and primal decide the the end place rock the cliff were just actually bare terrain I was not there back then on those project but I was told that the world was kind of designed to avoid having too much like large cliff surfaces like this because it didn't really look good and it was expensive to fill up those large cliff by placing a bunch of rocks would also kind of look really repetitive as well but now on for cry 5 I don't know what happened but we still in the other world with the crazy amount of cliff and they were much bigger than before much taller and visible from much further as well so that's their the reason we decided to develop attack to improve the situation a little bit so this is the cliff without just like straight terrain and then with the the procedural cliff on top how does it how does it work exactly we use the terrain slope as a starting point and we delete all surfaces below a certain slope threshold and this becomes our cliff input geometry on the right here as an additional note having the cliff generated and all steep surfaces like this also serves as a visual cue for for the player to know that ok if there's cliff it's like you know actually at the exact treshold where the player is not able to walk on the terrain so this serves as the visual cue to know okay if there's rocking cliff actually I can't go up anyway so it's interesting for that as well and then since we start from the terrain mesh we get stretched quads on the slope so to get rid of those we do a remission pass on the geometry just to get uniform triangles and then there's an interesting phenomenon that we we want to reproduce with the tool and it is the geological stratification the visible horizontal lines that were formed by the accumulation of a sedimentary rock and soil over time so to create this effect we we have a tool that sliced the input geometry into strata chance and each strata as a random thickness and it assigned a strata ID to each with which we can use to randomize the strata color as a debug view as we see here then indeed stir we have a few presets to control the the strata angle just to find like the the angle of the slicing that we want to occur the user will actually just control that in the stir by painting this RGB input on the terrine and then you Whitney will use that to drive the stratification angle parameters so as a result we get in this example strata slice in three different angles the angles that we chose for a preset while we didn't add an infinite number of a variation we can add but we chose actually four different ones that the user can use and it was just they're the ones that would best fit the the terraforming shaped for world so however just like this the strata lines are a bit too perfect and it feels unnatural to break them up and bring a bit more chaos into this we do something else we first generate the noise that will be used to split the input mesh into two groups and actually the noise is generated on a lower resolution mesh and then transferred to the I res mesh and we do that to get more well larger and luckier patterns we found out that if we had a really small piece of of rocks or cleft it wouldn't give a good result so we had to make sure that it was always kind of chunky then using that noise we split the cliff surface into two groups like this and then that's when we run the stratification tool on both groups with a different seed value just to break up our strata lines and then after this the geometry is ready to get some volume so each strata is extruded at a various thickness and also displaced using a combination of displacement map and at this point the the geometry still fairly IRL so for sure we need to reduce the triangle triangle count so we do a pass for this and before the export the geometry split into individual mesh to be more precise as one mesh per sector if you guys remember sector is a chunk of terrain at 64 by 64 meter so each color represents a different sector here and we do that for better loading and streaming in game so that that covers it for the cliff mesh part but the cliff tool there's other things as well and but before going further I kinda need to explain all the cliffs are shaded in game we use what we called the terrain shader what it does is that it will it will render the object in the same path as the terrain and so the the cliff will use the same texture as the terrain directly underneath them so if we have a grass underneath the cliff the cliff will also be textured partially with wet grass as well so to avoid to avoid this issue we need to make sure that we have a cliff texture transferred to the terrain under underneath the extruded cliff mesh so for that reason we use the final extruded cliff mesh and we rake ass straight down on the terrain some of the cliff attribute so we transfer well a cliff mask and then also the the strata attribute then using the the strata attribute we just transferred we first generate a color layer that will create a macro tint variation in the world as an additional note here the this this color could have been on the cliff mesh vertex color but we didn't do that for two reason first because we also want to maintain the tent on the terrain and for distance even when the actual procedure all colors mesh is unloaded because of distance and also because we wanted to save as much disk size as possible and a well candidate the memory that the the personal cliff is taking wanted to make sure it's as low as possible so no vertex color and the cliff measure also they didn't need any movies because of the the tearing shader we were using and then from the cliff mask we transfer to that terrain we further extend the cliff by running a flow simulation so we have points scattered on the cliff surfaces that will flow down the slope to create cannon erosion effect and it's worth noting here that the origin strata color is retained on the erosion area and then using that erosion data we we scatter crumble rocks entities on the terrain and the those will be exported as a point cloud to did stir later on then from our mask we generate the tarrant texture IDs on the terrain we also use a noise to mix two different cliff texture and that's just we used to it could be more but based on memory budget we add for tearing texture we only add two and also helps breaking out the the tiling another feature of the tools that we can also scatter vegetation on the viable cliff surface and how we detect the viable cliff surfaces that we isolate polygons facing upwards and our generated cliffs and we simply check if it's clear above or not using a recast and then we can use that afterwards you to spawn trees and other vegetation on the on the cliff ledge like we see here and at the end this is the data that is exported to be disturbed by the cliff too we have the cliff geometry along with the collisions hence the point cloud for rocks and some of the trees are growing under on the ledge tear in texture IDs also a cliff color for the terrain and a cliff mask and there's some screenshot of the cliff deck in the game so for the biome tool now the goal of this guy is to populate the world with biological content and bear with me here there's a lot of feature to cover in this section mainly because there's like so much subtlety in nature and various phenomena we we want to reproduce so there's a lot of stuff that the tool can do so the first step is to generate the terrain from the from the right map and then from the topology we we generate what we call the abiotic data which are basically like the physical features of the land we generate an occlusion flow map calculate the slope the curvature also a illumination and then other deuteron that like altitude latitude longitude and also a wind vector map something important to note here is that those all those terrain attributes will become the pillars to most of our by own recipe so after this is done and that the terrain data is stored and the terrain terrain attributes we we import other 2d data that dunya extracted for us on disk so the biome painting done by the users and also procedural data generated by previous tools such as fresh water Road fence powerlines and cliff mask and then once all this data is ready on the terrain were ready to work and ready to roll with with the fun stuff so first off something really cool that the the biome tool does is that it doesn't simply spawn forests where the user has painted for us we have this concept where we added the main biomes and the sub biomes so the main biomes in the 45 world is covering most part of the world probably like 75 to 85% and so what it does is the main biome will automatically process where the sub biome should be based on the latarian abiotic data that we just saw earlier so this will like kind of split where we have 4s and where we we have grasp automatically and it is like this part of the tool that it gives us this like natural looking macro detail in the biome distribution and since it's based on the Terran topology were were sure that an artistic way this is always a rule that is enforced and applied in the world then the main biome also process other fancy things like replacing forests with what grassland where the user placed powerlines so we see here that we have power lines this is the power line mask being imported and in the biome tool and then were replacing where we had for rest with grassland then after this process we have our sub biome recipes there are processing chain and each of them contains all the ingredients that define this recipe so all the trees saplings Bush and grass then at the core of the biome recipe all of these nodes actually the same digital asset it's the generate Terran entities HDA and this guy among other things do the vegetation scattering but it can also modify and create terrine attributes but but a key part of it is that it it defines a viability for species so the viability each each species is actually fighting for his ground to grow and drive on and viability is defined by setting up favored Terran attributes for each species and the species that accumulates the most viability at allocation will win over the other other species so as an example here we have a species a that likes to grow on this range of occlusion tearing data with a power of one and then we we have a species B that likes to grow and this range the bottom left a flow map with the power of two so the species B will win over species a where the flow map value is high enough and then to determine the winner there's also a radius that is involved here we have the species a that have higher viability than the species B and we see the radius and a debug view here on the terrain so if species B ends up inside the species a radius it will be removed like the one in red here actually is would be discarded so this is nice we're able to keep like a desirable spacing between those trees like this however what if we would like to allow you know bushes or grass to spawn underneath the tree for sure we wouldn't want those to be removed so to do that we have the priority with a priority rages as well so the priority will be evaluated first and if two entities priority are equal then we will evaluate the viability that we just are instead so previous example has been extended ear however now or green tree or green tea party rages is smaller than its viability radius and all our trees are set with a priority of 10 and we added the bush in yellow with a priority of zero so the yellow bush will be allowed to grow closer to the green tree because it has a small priority radius of two but we can still prevent them to grow to close from the blue trees for instance if we want because on this one we left the the priority ridges to 2 to 10 so in this in this case the two red well the four red bush here would be that are too close to the blue tree will be this garden so we we saw that viability as a big role in the vegetation distribution but now let's let's look at some natural phenomena here on the Left we don't have any vegetation growing on the you know on the flow lines but only on the steep slopes and on the right here we we have almost no vegetation on the South face of those mountains so to mimic similar phenomena we kind of need we need to be able to combine different biotic tearing data together so it is by mixing various terrain attributes that we can create really specific patterns for VGT the vegetation species distribution and actually accumulate a fluctuating viability so we're multiplying by a range of altitude and then we can go further in parallel we can also mix another step multiplying the flow map with a specific range of altitude again and then we can combine the result of those two together and additionally we can create extra chaos by come because you can combine noise with with the tearing data as well so on the right ear this is a standard Perlin noise but with control action for scale and a set and it can also be be warped by the deterring normal so that's the slide for normal influence and this creates a bit more interesting patterns than just a standard Perlin noise and then we would like to we would also like actually bring in various exclusion masks generated by previous tools such as the the freshwater cliffs and Road so we can do that and apply that on top of our our current masks and for this is a example this is what we would actually use for the species viability so as we see combining terrain that is really at the core of the biome generation workflow and this is what gives us like those interesting patterns so however the viability also drives order effects like the species sides in previous production on Far Cry the asset size was just kind of randomly selected it had know that no currents with the the terrain or the likeliness of a species to grow in a specific area so now our tool can and all multiple sides for the same species and well if we take a step back here there's actually various thing that that can affect the tree size and so we have the the small and young trees will tend to spawn at the edge of forests and the old and tall trees will be more present at the core of a large forest patch and then there's other factors as well like the the altitude that can kind of affect the size the scaling of our species so how do we manage our tree sighs well we link the asset size selection to our viability here we have a gradient Val viability rent and the terrain and if we start with one conifer of 50 metres and then we can add a second one forty metres 30 and so on and we see that each size will actually be positioned on the proper proper viability range on the terrain so the gives us a nice tapering effect at the border of our forest and well however we have a one more problem with that is it can also create a staircase effect so to fix that we can allow each size to scale up and down by a certain percentage just to bridge the gap between the different sizes that we have we can also play with a random scale if we don't want to mess our viability too much to create extra chaos and the scale of our trees and then two trees of the same size are not necessarily alike so the tools allows you to for well for each size you can have several variation so for in this example here so each each tree also has a variation which is a dead tree so it will randomly select between one and elderly and then you can kind of control the weight of each of each one each variation let's take a step back once more here and look at another phenomenon the the forest canopy and the ecological succession as I mentioned earlier like young trees will tend to be growing at the edge of forest and then all trees will be deeper inside but there's also like a young regrowth that is possible inside the forest so once you enter the forest you will see that there's a small trees that that start to spawn again and grow to a certain height so how can we achieve that we we saw that we saw all the viability can affect the tree size selection however depending on the the tearing data that we use we don't always end up with a like a smooth gradient on our viability which can result of having or tallest tree while ending up right at the edge of the forest and so for this reason reason sorry we added like the age parameter which is basically just a sign sign distance field generated from the viability data and while we have a various option to control how it will affect the size distribution we can either add multiply or interpolate with the the viability so you can see here we can easily tweak the level of influence that it has and then by adjusting the age maximum distance we can control actually I'll deep the the border over for us will be like the tapering effect at the border for us and as a bunch side effect by using a ramp on the edge we can also kind of profile the shape of our forest so there there's another important thing that we need to control as well and it is the scattering density for density is uniform we might end up with you know might have a good spacing actually between our small trees for the species but a really bad overlap and on our large trees and the number of asset that we found is also a matter of performance of the game for sure so the small trees they don't have the same GPU cast as the large one so it is really important to keep a tight control on that so as your a simple ramp will give us that control by default or Rendon's or density ramp is is based on the size but we also have the option to base it on the the age or viability then we can also mix in teheran attributes like illumination slope aspect to affect the density of a species so this is a nice example of that here in the game where is just the I think it's the elimination which dragged this face of the mountain was receiving less light so we use that to affect the density of our vegetation well in the that case also that the scale the size of the trees but then steaming and jumping to another feature now some biomes that we wanted to recreate on farcry add a lot of color variation and so here we have we can see that the grass and bush color is varying a lot in this reference picture so to do that without actually like duplicating our asset and texture and material in the in the game we added the option to tint the the scattered instance individually so the input for that that drives the gradient color ramp it can be either the viability the age or a combination of any terrain that again so in this example were simply using the the water sighing distance field to drive the the color ramp that we see here and actually tenth each of our instance with a different color and the result in game your this is like the color variation that we see on the grass is actually because each instance of grass add a specific color link generated from whittany and this variation the scary density also needs to have their their own specific rotation and by default they're the forward axis of the acid is it's always oriented toward the terrain slope and what's interesting about that is that it allows us to do things like having this grass acid that we see here on the bottom left always leaning toward the water and that does that because the the there will always going to be like a little slope on the on the shore of the water so that's interesting and and another example is we could do like free banded tree trunks that grows in slope this is a like a natural phenomena that you can press you already observed in nature or if not you you can for sure observe that we didn't do that in the game unfortunately but I wish we did because it's kind nice but well the system would allow it we did other cool things however and not sure if any players will actually notice that in the game but this wheatgrass that we see here it's actually oriented on the wind vector map so this is another orientation options that we have the wind map is based on overall wind direction but it's actually fluctuating a bit depending on the shape of the Terina so when the when blowing against al it will tend to kind of try to flow around it a little bit so we use those vectors to orient our asset then just finish with the rotation options in all cases the asset can be like flat horizontal or actually aligned with the deterrence lobe and that's controllable by a percentage and we also have like a rotation jitter and offset on all axis and like that we use that a lot on most of our vegetation asset it's completely random except for the grass I showed you on the on the shore of the of the water which were kind of fixed rotation but then otherwise it's all most of the time random just to break the patterns now that we have covered most of the the parameters control the entity generation itself well however the biomes are not limited to like the the asset placement only because the position of asset can also have an effect on the some of the tearing properties as well it can it can also have an effect on the surrounding asset too so here in this picture I see like four different things that the present of those big trees influence visually in their surroundings well first the the terrain is covered and kind of pine needles so the tearing texture is affected by the presence of those trees we also have a slight tear in around the around the trunk so that area night map is affected too we have pine cones and that branch on on the ground so what the present of the presence of one asset can also like trigger the position of the racet around it and then the shadow provided by a dose tree might encourage our prevent the growth of other species as well so to do that in our system after the the entity distribution is done we have the options of transferring some data back to the terrain from the scattered assets and we use this process for four different things tearing the formation tear in textures tearing that output a mask actually it is just a mask that can be then reusing the following species and then a tearing color attend that yet mixed with the tearing textures and all four of these masks are actually independent from one another so you can preset your sign distance field generated from each set differently based on those four settings so let's start with the tearing deformation an example here well we can generate a mask from the the scatter densities position and then optionally we can combine it with the once again available tearing data as we saw earlier so for example we might out I might want to mask out any deformation close to the roads by using the the road the road mask that we have available and once we have our mask we set the displacement ID for the terrain and here it's actually raising the terrain by a 1 meter and this will deform the terrain accordingly in the game so I think this is a real interesting feature to have because most of the time in games the trees are just taking the ground we don't feel that they have any effect on the terrain itself but in nature like the tree roots they are lifting the ground a little bit because of the roots and it's also kind of Olding the soil together and prevents prevents the soil erosion so that's why it creates those kind of shapes so now let's take a look close closer look at those tree roots for sure we will want them to blend seamlessly with with the terrain and we can do that by generating a match matching tearing texture right underneath so once again we generate a mask from our scabbard entities and we set the number of texture we want to generate from this mask then we select the desired texture from the road on menus this will actually fetch the available torrent texture from the installed via Peters Python script and and make it available automatically in the HDA menu and our mask well our masquerade scale value will then determine which texture is applied where and so we set the second text tearing texture to appear where the mask value is actually 0.5 and above then the tearing texture ID will be sent to the editor and that way we have our roots that are blending well with the terrain underneath so next perhaps we want to add extra ingredients around those trees so we can do that we can do what we can do is generate a new Terran that attribute from our trees but this time this mask will be stored on the Terran and be available to reused to be reused as viability by a following species so we set up the parameters as we like to have the the range that we want and then we go over to our next node the forest rocks and then we reuse that mask that we just created so we're using a panda who's a viable tea on our forest rock species and then this will trigger the spawning behavior of this asset and it's always gonna be tied to this other specific asset if we want then if we go back to our panda who's a tree we can also output the age data of the species and which will allow us to spawn like a new ingredient at the edge of the forest for instance so this is interesting yet if you because that's something you cannot serve in nature you will have like a specific type of vegetation always growing at the edge of a forest but not inside because it's - there's too much shadow or stuff like that and then as we observed earlier we can also use that to create a young regrowth in the forest for the ecological succession effect then when building our sippie's we we would keep iterating and adding further ingredients until we reach a full recipe like this and then on one map of one kilo meter square that's like over 600,000 and tea is generated by the biome - and for for try five actually we had about 70 maps like this to compose the the whole world so the matter that was a lot of assets generated two minutes oh my god one last feature this is a Google Alert picture and phenomenon were interested in here is the Terran humidity the color variation between like the dry brown and the lush green and as we saw earlier for the cliff strata color we also generate a at our instant ear that is mixed with our organic turn texture distribution and this gives us like further variation in the colors on the terrain and help us limit the amount of tear in texture that we need to use in game so with the tent and with without the tent and with that and below and this is just the de color here the the neutral color is an average grey and we do that to allows us to either darken or lighten the tearing texture with this color color layer and then a zoom out view of the part of the world just to see the texture and color variation that comes from the the biome and it's worth noting that all the tearing texture and procedural tint can transpire to the grass as well and that's because the the grass shader will actually like be able to pick up the tearing color and the amount of color it's allowed to pick up is its control with a mask on the grass asset itself so we can either allow it to pick up 50% of the tearing color or if we won't just Pacific part of the of the plant itself and then at the end this is the data exported from the frame mutiny by the biome tool to the editor we have the against point clouds the turn texture IDs Fahrenheit map they're in color and also a forest mask that will be used later on by the the fog tool and also the wall map tool well this section I think I'll skip because we're running out of time but it was just stuff that we changed along the way because things don't always go as planned but I'll jump to the conclusion so first some lesson lines with great power comes great responsibility that's such a cool thing to say so procedural tools can generate a lot of data and this gives us like a great control over performance but also actually over gameplay and art and well on far cry 5 like the art direction they wanted like a crazy dance for us however from a gameplay like gameplay wise it was not that much interesting because the AI is and large animals they couldn't really navigate in the forest but so on our side would control over the procedural vegetation distribution we had to make the right call and it was to shape the game with the the most density but without impacting gameplay then another thing is to make sure you design elegant tools that opens up possibilities or biome tool for example it's a system that allows so much possibilities I think we can barely scratch the surface of what we can do with it and that's good then keep things simple and this is all simple any new systems actually are often like over-engineered and that's probably because at first we figure out each element of that system at first but once everything is in place and we have a clearer view of the whole beast we can most certainly take the time to do a cleanup pass and simplify things and most of the time a simpler and more elegant design will emerge from that then make sure to listen to your users they might prefer to have manual control instead of automated process in some case an example for that is that our River well of freshwater tool the most specifically the river part it could carve its own riverbed automatically you would basically just lay down the the spline and then the terrain would be carved but the user day they prefer to man we do the terraforming so that's something that we developed but was not really so it's kind of good to make sure to work closely with with the the users and then make sure to be flexible because initial plans are not always the best and well make sure to keep a good balance between control and automation I think I mentioned it earlier this morning that it's not always worth it to have something automated if you do if it takes more time to do the automate automated tool than it takes to do it manually then for sure it's not worth it and also too much automation and things can get out of control too much manual control for sure and things can become really time-consuming and difficult to manage and after all this is why we're building procedural tools and just finish I want to thank those people that were either small or big a contribution to the pipeline and thank you I don't know best to skip question for the next speaker yeah well yes so the the number species was really kind of limited by the memory budget that we had in the game so for Far Cry we had like three major biomes it's a good question more specifically adult we had above like 20 species for one particular biome and we also had to be careful out this was next from crossing one biome to added another because then it does area you actually load asset in memory from from those budget so it was all like calculated to allow like this type of transition as well yes yeah yeah and and it was like awesome to have Whitney at our fingertips to to actually tackle that managing the performance for the game was was a breeze because we just had to go in every city and actually move a slider save the HD ace I mean it and then the next morning everything would be update updated and then yay we gained one frame per second or something so yeah one and a half person to develop the tools we were two developers but not route the whole project so it was I was there the whole time but I had a helper like half of the project maybe and how much time what we did so we first things we tackled was the biome tool but then once that was in we had some free time and then we developed the other tools so we kept iterating I guess that's 50 years maybe but yeah but we had some free time to add the extra stuff so because like all the like freshwater clear that that was not really planned and but we had the time to do that yeah yeah it's really and this was designed the while we have our my kind of style asset library which is split into like we made sure that we had like project specific digital asset split from the like the brain or the pipeline asset so that we can reuse the the pipeline stall asset to build recipes for another project and and so on so it's all customizable like for project does the beauty I guess I think I'll and this well this state to come to me and if you have further questions but I'll leave the place for the the next thanks [Applause]
Info
Channel: Houdini
Views: 92,462
Rating: undefined out of 5
Keywords: gamedev, procedural, game development, game art, procedural environments
Id: NfizT369g60
Channel Id: undefined
Length: 66min 4sec (3964 seconds)
Published: Tue Jun 19 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.