You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+22-7Lines changed: 22 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ _Godot 4.4 is currently used Version_
6
6
7
7
## Overview
8
8
9
-
We introduce a comprehensive, user-driven pipeline for generating rich, organic terrains. We employ FastNoiseLite to produce a base height map, which is then refined by a cascade of cellular automata filters that expand flat regions, patch & eliminate outliers, and selectively shrink water bodies. Optional directional bias simulates tectonic tilt, while blocky posterization adapts terrains to isometric grids. Graph-based flow accumulation yields road networks, and a two-tier Poisson disk sampler places large structures and smaller objects. We demonstrate the ability to influence random noise into terrain morphology.
9
+
We introduce a comprehensive, user-driven pipeline for generating rich, organic terrains. We employ FastNoiseLite to produce a base height map, which is then refined by a cascade of cellular automata filters that expand flat regions, patch & eliminate outliers, and selectively shrink water bodies. Blocky posterization adapts terrains to isometric grids & flow accumulation yields road networks. And a Poisson disk sampler places small objects, such as plant life. We demonstrate the ability to influence random noise into terrain morphology.
10
10
11
11
## Setup
12
12
@@ -26,6 +26,7 @@ gdb --version
26
26
## Implementation
27
27
28
28
1. User Control Inputs
29
+
29
30
1. Seeding : `int32_t seed`
30
31
2. Frequency : `float noiseFrequency`
31
32
1. Allow user to define frequency: Lower-frequency noise gives broad zones; higher-frequency adds detail.
@@ -36,19 +37,26 @@ gdb --version
36
37
5. Water Reduction Value : `waterRemoval`
37
38
1. Water reduction percentage of 0 to 100
38
39
2. Ignore values of 10 or lower
40
+
39
41
2. Produce Random Noise
42
+
40
43
1. Using FastNoiseLite
41
44
2. Allow user to define frequency: Lower-frequency noise gives broad zones; higher-frequency adds detail.
45
+
42
46
3. Generate Height Map
47
+
43
48
1. Take the Filtered Noise, Normalize and Scale to (0, `elevationMax`)
44
49
2. Assume 0 values are base elevation of Water
50
+
45
51
4. Noise Processing
52
+
46
53
1. Noise Conversion (into square patterns)
47
54
1. Send through filters to create blocky patterns useable for isometric 3d grids
48
55
1. Use Elevation Threshold to determine values between 0 to Elevation Threshold
49
56
1. Reduce Resolution by sampling one pixel per block
50
57
1. Posterize
51
58
1. Upscale back to Original Size
59
+
52
60
5. Cellular Automata (CA) Filter on Noise
53
61
54
62
1. CA Filter A : Expanding Zones
@@ -68,6 +76,7 @@ gdb --version
68
76
5. Bias reduction on edges to simulate evaporation
69
77
70
78
6. Hydrology Path Generation
79
+
71
80
1. Each grid cell in the elevation map is a node in a graph
72
81
2. Downhill Flow
73
82
1. Assign movement cost to each path, using the raw noise for the height map to determine costs by slope descent
@@ -76,21 +85,27 @@ gdb --version
76
85
3. Flow Accumulation : Count the neighbors that flow into our tile as a flow value
77
86
1. Use the high flow values to create major roads && the small values to create minor roads
78
87
1. Done by marking walkable cells that can’t be placed with objects
79
-
7. Open Area Finder / Large Structure Locations
88
+
89
+
7. Tile Placement
90
+
91
+
1. Using a Dual-Grid System
92
+
1. Determine the correct tile type for each cell in the grid
93
+
2. Set the Grid map cells using Godot's Grid map system
94
+
95
+
8. Open Area Finder / Large Structure Locations
96
+
80
97
1. Find areas that have flat ground tiles of 3x3 cells
81
98
2. Elevation buffer, ensure structures aren’t placed against cliffs and ramps
82
99
3. Store the center cell into a list of available locations
83
-
8. Poisson Object Placement
100
+
101
+
9. Poisson Object Placement
102
+
84
103
1. Create a copy of the finalized grid and increase its size by splitting cells into 4 pieces
85
104
2. Finalized grid contains data about each cell's place-ability
86
105
1. Use the data from the previous steps to know cells that can’t have objects placed on them
87
106
2. River Pathing determines non-placeable cells
88
107
3. Elevation changes are non-placeable cell's
89
108
3. Use poisson disk sampling to place non-large objects using the higher density grid
90
-
9. Tile Placement
91
-
1. Using a Dual-Grid System
92
-
1. Determine the correct tile type for each cell in the grid
93
-
2. Set the Grid map cells using Godot's Grid map system
0 commit comments