Project Name: FarCry 5
Release date: 2018
Game Engine: Dunia Engine
Table of Contents
- Pipeline Objectives:
- Developped Procedural Tools:
- Using the tools from the users point of view:
- Pipeline overview:
- Cliffs tool in detail:
- Biomes tool in detail:
On Far Cry 5, I was responsible of developing a new procedural pipeline and set of tools to generate content in the world. The initial mandate was simply to develop a tool to generate the vegetation biomes but we ended up expanding way beyond that.
Here are the initial challenges we wanted to tackle with our pipeline.
Far Cry 5 terrain evolution over 2.5 years.
How do we manage our content with a terrain that is changing constantly?
Fixed Forest Position over 2.5 years
Same evolution on a smaller portion of the terrain with a forest applied manually. The forest distribution patterns is initially coherent with the terraforming. However, it becomes really incoherent over time as the terrain changes.
How do we solve that?
It would be tedious work to repaint the forest everytime the terrain change. Also, if manage by several different users. How consistent would the result be?
Should we lock terraforming early in the project to avoid this? That would not be realistic, because this iterative process is vital to the game quality.
It is with those challenges in mind that we built a procedural pipeline.
1st objective: Fill up the world with natural looking content
Macro management tools to fill up the world with natural looking content.
2nd objective: Consistent with terrain topology
The content generated needs to be consistent with the terrain topology. Here we have the same example as before 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 changes.
3rd objective: Automated
Then the whole pipeline needs to be automated.
We used Houdini and Houdini Engine.
And nightly generation on build machines to fully refresh the world every night.
Several build machines will process different part of the world one by one, until the full world is generated.
This process ensures us that the users will have updated world data every morning.
4th objective: Deterministic
Then all the data generated also needs to be deterministic. Which means that, the generation needs to yield the same result given the same inputs.
By using different build machine, whether we bake the left or right chunk of terrain the middle part will always give the same results.
This is important for the navmesh generation among other things because we have a nightly build that bakes the world map per map so the junctions between maps needs to be seamless.
5th objective: User friendly
- Shelf tools in the editor
- Easy to manage by the users
- Users can bake as they work
- Ability to override procedural results
Our last objective, we want the whole thing to be user friendly. Just the nightly build alone is not enough to ensure users have up to date data.They need to be able to bake the procedural generation as they work as well. So of course we have all the tools available in the editor.
Developped Procedural Tools:
Fences & Powerlines
Using the tools from the users point of view:
User generating freshwater
After the terraforming artist are ready to lay down freshwater networks. That is achieved by using curves and spline that will be used as inputs for the freshwater tool. For rivers we have controls directly on the spline for the width. When happy with the inputs the user will run procedural generation from the Freshwater shelf button. The tool will produce water surface meshes and terrain texturing
User generating cliffs
The cliffs tool is simply based on the terrain slope so the user just have to run the generation on the desired terrain area.
User generating biomes
To apply vegetation in the world the user can paint the desired biomes with the biome painter tool.
The main biomes naturally distribute grass and forest sub-biomes.
User generating roads and setting up a location
So far, our result is quite natural. To bring men’s influence on the environment and override mother nature the user can start by adding roads. This is done by using the road spline. After baking the road tool, the user can also refresh the biome tool to clear out the vegetation in the way of the road.
Then in order to customize a location, the user can override the main biomes by painting sub-biomes like grass and adding clumps of forest here and there. This will clear the way to hand place buildings and such.
User generating fences
The input for fence is once again a spline. The user will simply set the fence type he wants to generate on the spline parameters and run the generation.
User generating power lines
Electric poles will spawn on each control points of the spline. In this example we add 3 different types of power lines that will automatically connect with one another (Standard lines, Single line and 2 House connectors).Transformer boxes will be automatically added where required. If the user does not snap the splines correctly the system will do it within a certain distance. You can also notice that by refreshing the biomes afterwards the power lines are taken into account to avoid having trees in the way of the power lines.
User readjusting terraforming
At any point the user can adjust the terraforming. Affected procedural tools simply have to be regenerated afterwards. The workflow is non-destructive!
Cliffs tool in detail:
In previous Far Cry’s cliffs were only bare terrain or hand placed pre-modeled mesh that were not suited to cover large cliffs surfaces.
So I developer a tech to generate cliffs proceduraly:
The whole process starts from the terrain itself. Using slope terrain data, we isolate a specific threshold value and then delete all surface bellow that threshold. This becomes our cliffs input geometry.
Vegetation growing surfaces
Biomes tool in detail: