FarCry 5

Project Name: FarCry 5

Platform: PS4-XBoxOne-PC

Release date: 2018

Game Engine: Dunia Engine

 

Introduction:

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.

 

Challenges:

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.

Pipeline Objectives:

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:

Freshwater

Fences & Powerlines

Cliffs

Biomes

Fog

Worldmap

Using the tools from the users point of view:

WIP

Pipeline overview:

WIP

Cliffs tool in detail:

WIP

Biomes tool in detail:

WIP