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:
Cliffs tool in detail:
Biomes tool in detail: