top of page

Roads & Villages

Generator System

The Project

The Project

For my Technical Artist graduation project I worked on a Roads & Villages Generator System with Houdini.

Inspired by the work of Benoit MARTINEZ and his team for Tom Clancy's Ghost Recon Wildlands, I used their workflow as a guideline and the scientific publications of two teams from de CNRS as methodology.

Procedural Generation of Roads - N. Maréchal, E. Galin, A. Peytavie, E. Guérin

Procedural Generation of Villages on Arbitrary Terrains - A. Emilien, A. Bernhardt, A. Peytavie, M-P. Cani, E. Galin

My plan was to establish a procedural system able to generate a big terrain with roads and settlements more like a big sketch than a finished and optimized system due to the time constraint. This system works independently but the final idea is to divide the different steps into powerful tools for the artists and by offering a lot of control over them.

Terrain Generation

Terrain Generation

The idea was to create de hilly terrain with plateaus based on reliefs we can find in Languedoc-Roussillon.

I started by creating the terrain generator with PDG.

I randomly picked a percentage of primitives of a grid, scatter points on them,

copy to point geometries and project the result on the heightfield plane to get the reliefs.

Seeding Path

primseedGIF.gif

Massing Path

massingSeedGIF.gif

Project Path

projectGIF.gif

Details Path

Once the details path done, I had to prepare the terrain for the path finding. I just converted the regular grid

into a anisotropic one to have the diagonals.

REGULAR GRID

ANISOTROPIC GRID

DETAIL

RESAMPLE

REGULAR

ANISO

Roads Generation

Road Generation

For the pathfinding, my work is based on the first scientific publication I shared earlier. After defining the bordering points of the roads, I made an A* algorithm in VEX running over each point of the grid avoiding steep slopes or at least compensating them according to different parameters such as the height, the curvature, the normal orientation or the distance from the target.

pathfinding_v01.PNG

First Path

roadFirstPath.gif

Second Path

roadSecondPath.gif

Village Generation

Village Generation

 Once the roads done, I could start working on the village generation. This step is based on

the second scientific publication I shared earlier.

Village Skeleton

I had to find a good place for the village so I made an algorithm running over each roads points and according to the perimeter

of the village that we want, find the one with the flattest area.

Curvature Map

Research Path

Once the algorithm find the position I could growth the village skeleton.  I started by defining aged areas able to affect the

buildings placement depending of the architecture, the population density or the building function for exemple.

I seeded the different buildings and connect them to the roads. 

HF_agedAreas_v01.jpeg

Aged Areas

I seeded the different buildings and connect them to the roads. 

HF_seeding_v02.gif

Land Parcel Generation

Once the village skeleton done, I made an algorithm for the land parcels generation. This algorithm will works in three steps : 
 

- First, the seeds will conquer their road territory
 

- Then, they expand from the road using anisotropic conquest
 

-Lastly, the resulting parcels are simplified

Road Conquest

HF_roadConquest_v01.gif

Land Conquest

HF_landConquest_v01.gif

Buildings Generation

The tow last steps of the system in Houdini are the buildings generation, done procedurally and the terraformation.

I will not explain in detail how the buildings generator works but each zone is worked independently of the others as well

as each parcel within these zones. Depending on the size of these parcels, the system will generate one or more buildings.

terraformationGIF.gif

UE4 Integration

UE4 Integration

I could now integrate the terrain to Unreal Engine 4 and  procedurally generate the environment with the engine tools. 

ScreenShot00012.png
ScreenShot00011.png
ScreenShot00010.png
ScreenShot00013.png

Music by Beatjunkie Rato

bottom of page