Procedural Generation
Lauri Kongas
What is procedural generation?
Procedural Generation
It is the algorithmic creation of data
Procedural Generation
It is the algorithmic creation of data
Almost anything can be created procedurally
Procedural generation vs manual creation
Depends on the objectives
Procedural generation vs manual creation
Depends on the objectives
When used in the right circumstances it can save
Procedural generation vs manual creation
Depends on the objectives
When used in the right circumstances it can save
Procedural generation vs manual creation
Depends on the objectives
When used in the right circumstances it can save
Apparent randomness is a key ingredient in procedural generation
Noise
What is noise?
Noise
What is noise?
Pseudorandom vs truly random
The issue with white noise
Nature is smooth
The issue with white noise
Nature is smooth
Two points close to each other on the surface of an object will usually look similar. Points on the surface far from each other may look different.
The issue with white noise
Nature is smooth
Two points close to each other on the surface of an object will usually look similar. Points on the surface far from each other may look different.
What we want is gradual local changes, but large global changes
The issue with white noise
Nature is smooth
Two points close to each other on the surface of an object will usually look similar. Points on the surface far from each other may look different.
What we want is gradual local changes, but large global changes
That’s not how random number generators usually work
The issue with white noise
This is better
Value Noise
A simple type of noise which can be useful for a variety of applications, e.g. creating textures
Value noise 2D example
Value noise 2D example
2. Generate random values in the other dimension as well
Value noise 2D example
3. Define a grid to use for interpolation
Value noise 2D example
4. Zoom in and interpolate (smoothstep function can give nice results)
Value noise 2D example
5. Stack multiple layers on top of each other with varying zoom levels and weights
Use case study: Generating the Milky Way galaxy in Elite Dangerous
History of Elite
4 Elite games have been released over the years
History of Elite
4 Elite games have been released over the years
Pretty old for a video game franchise - first game released in 1984
History of Elite
4 Elite games have been released over the years
Pretty old for a video game franchise - first game released in 1984
The games are set in space, the player will engage in combat, exploration, trading, etc
History of Elite
4 Elite games have been released over the years
Pretty old for a video game franchise - first game released in 1984
The games are set in space, the player will engage in combat, exploration, trading, etc
Both the older and the newer games feature a significant amount of procedural generation, especially in terms of game world generation
Elite (1984)
Wireframe graphics with hidden line removal
Elite (1984)
Wireframe graphics with hidden line removal
8 procedurally generated galaxies (developers
wanted to go for 248 galaxies, but publisher refused)
Elite (1984)
Wireframe graphics with hidden line removal
8 procedurally generated galaxies (developers
wanted to go for 248 galaxies, but publisher refused)
256 star systems per galaxy
Elite (1984)
Wireframe graphics with hidden line removal
8 procedurally generated galaxies (developers
wanted to go for 248 galaxies, but publisher refused)
256 star systems per galaxy
One planet and space station per system
Elite (1984)
Wireframe graphics with hidden line removal
8 procedurally generated galaxies (developers
wanted to go for 248 galaxies, but publisher refused)
256 star systems per galaxy
One planet and space station per system
Some issues with procedural star system and planet generation
Frontier: Elite II (1993)
Procedurally generated and varied star systems
Newtonian physics
Frontier: Elite II (1993)
Procedurally generated and varied star systems
Newtonian physics
Seamless landing on planets
Frontier: First Encounters (1995)
Procedural texturing (snow, plants, planet surfaces, etc.)
Frontier: First Encounters (1995)
Procedural texturing (snow, plants, planet surfaces, etc.)
Gouraud shading
Elite: Dangerous (2014)
Released 30 years after the original
Elite: Dangerous (2014)
Set in the 34th century when humanity has colonized other star systems in the galaxy
Setting of Elite: Dangerous
The entire 1:1 scale Milky Way galaxy
Setting of Elite: Dangerous
The entire 1:1 scale Milky Way galaxy
400 billion star systems spread across different structures in the galaxy
Setting of Elite: Dangerous
The entire 1:1 scale Milky Way galaxy
400 billion star systems spread across different structures in the galaxy
Nebulae, dust, all kinds of other objects
Mass distribution in the galaxy
Astronomers have constructed a top-down view of the galaxy’s luminosity
Mass distribution in the galaxy
Astronomers have constructed a top-down view of the galaxy’s luminosity
Mass distribution is based on luminosity distribution
Mass distribution in the galaxy
Astronomers have constructed a top-down (2D) view of the galaxy’s luminosity
Mass distribution is derived from luminosity distribution
That distribution is given a third dimension
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Child sectors inherit information from parent sectors
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Child sectors inherit information from parent sectors
Bigger sectors are used to generate more rare systems (e.g primary neutron star)
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Child sectors inherit information from parent sectors
Bigger sectors are used to generate more rare systems (e.g primary neutron star)
Smaller are used to generate more common systems (e.g. primary red dwarf)
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Child sectors inherit information from parent sectors
Bigger sectors are used to generate more rare systems (e.g primary neutron star)
Smaller are used to generate more common systems (e.g. primary red dwarf)
Generation happens until sector has run out of allocated mass or number space
Sectors
Galaxy is divided into sectors (cubes) based on octrees (8 children per parent)
8 layers of these cubes - linear dimensions from 10ly to 1280ly
Child sectors inherit information from parent sectors
Bigger sectors are used to generate more rare systems (e.g primary neutron star)
Smaller are used to generate more common systems (e.g. primary red dwarf)
Generation happens until sector has run out of allocated mass or number space
Sectors have attributes like mass, metallicity, type and age
Generating the primary star of a system
Lots of different attributes - e.g. metallicity, magnitude, position in the sector, radius, initial and final mass, existence of a planetary nebula, surface temperature, classification
Star color
Black body radiation
Evolution of a star
Different stages of a star’s life are simulated - proto-star, main sequence, giant, death (stellar remnants)
Star evolution depends on the initial mass of the star
Star system generation
Creating the rest of the star system
Generate the main bodies (stars) by simulating collapse of gas
Creating the rest of the star system
Generate the main bodies (stars) by simulating collapse of gas
Generate a protoplanetary disk from the remaining mass (elemental distribution)
Creating the rest of the star system
Generate the main bodies (stars) by simulating collapse of gas
Generate a protoplanetary disk from the remaining mass (elemental distribution)
Simulate clumping in stable orbits around the star
Creating the rest of the star system
Generate the main bodies (stars) by simulating collapse of gas
Generate a protoplanetary disk from the remaining mass (elemental distribution)
Simulate clumping in stable orbits around the star
Step through time
Stepping through time
A lot of physics simulation going on:
Stepping through time
A lot of physics simulation going on:
Stepping through time
A lot of physics simulation going on:
Stepping through time
A lot of physics simulation going on:
Stepping through time
A lot of physics simulation going on:
Stepping through time
Identifying the resulting clumps of mass:
Stepping through time
Identifying the resulting clumps of mass:
Stepping through time
Identifying the resulting clumps of mass:
Stepping through time
Identifying the resulting clumps of mass:
Unique ID of an astronomical object
Nebulae
Based on 3D volume textures for density
Nebulae
Based on 3D volume textures for density
1D RGB texture to define density to light absorption relationship
Nebulae
Based on 3D volume textures for density
1D RGB texture to define density to light absorption relationship
Step through while subtracting colors
Planet surfaces
Non-landable planets - perfect spheres with normal-mapped surfaces
Planet surfaces
Landable planets - start out as cubes, subdivision is used to enhance resolution the closer the player gets, terrain is based on layered noise
Planet surfaces
Combining procedurally generated with real
The galaxy in Elite: Dangerous also contains thousands of real stars, nebulae and other objects from stellar catalogs
Galaxy map
When moving around in the in-game galaxy map, star system information is generated and displayed on the fly around the focused area
Galaxy map
When moving around in the in-game galaxy map, star system information is generated and displayed on the fly around the focused area
The radius of generation in the galaxy map is dependent on the star density of the focused area
Thank you!