We decided to make a terrain generation program. Our idea was to give an AI a prompt about the type of generation we wanted, and the AI would be able to translate this into parameters for creating terrain. The inspiration for this project was a combination of a video series by Sebastian Lague and a video about Minecraft terrain generation. This seemed like it would be a difficult project, but also a fun one! Nobody on our team has programmed in Unity before, and we don't know anything about game development.
We're a team of four, and split into two groups of two: one to create a nice looking website to advertise and showcase our project, and one team to actually create a project. The workload might seem unbalanced, but none of us have done any web development either, and creating a website from scratch in 24 hours is intimidating.
The terrain generation team started off by watching a YouTube video about terrain generation (https://www.youtube.com/watch?v=ob3VwY4JyzE&list=PLJqN8nVDE8v3oxND0Hfcr3mbHmLdLxtzn&index=10). Minecraft has some pretty cool terrain, especially with the new Caves and Cliffs update, and we thought it would be really cool to be able to simulate it ourselves. Once we understood the basics of Perlin noise and layering, we needed to learn how to use Unity.
Luckily, while we were searching for resources, we found a Sebastian Lague video about simple terrain generation. We still needed to learn how to do things like creating Perlin noise, and his videos were a nice introduction for our purposes. After creating a simple heightmap texture, we again split: one person was going to try to make these heights 3D, and another person was going to layer the textures and make them more interesting, like they are in Minecraft.
Perlin noise is just noise that has a smooth gradient, meaning that we can create natural looking terrain instead of jarring terrain. One layer of Perlin noise is basically just two sine waves together to form a 2D texture. However, one layer of Perlin noise still looks boring: we don't have many details. Instead, we add more layers (called octaves) of Perlin noise to add smaller details. Then we get things like mountains, while retaining small details like boulders and rocks. The more octaves we add, the smaller details we get.
Minecraft uses multiple layers (not octaves!) of Perlin noise. This means that we can change landscape over an entire world: it's like different octaves, but over a much larger area. This means we can get different biomes, rather than different details in the landscape. For example, oceans, deserts, mountain ranges, and so on.
Minecraft has a few basic textures that it layers to create the final world: continentalness, erosion, and peaks and valleys. Erosion simulates large swaths of erosion, peaks and valleys create mountain ranges, rivers, and lakes, and continentalness creates continents. We roughly copied mimicked their design and tuned specific parts of the textures (attached in our submission) to emphasize certain aspects. For example, the peaks and valleys texture is biased to emphasize lower and higher values, to create more obvious valleys.
To create a 3D model of our terrain, we transformed each tile in our textuure into a mesh. Each vertex of the triangle is raised proportionally to the heightmap we generated with our noise. To simulate a bit more erosion, we put the heights to a power.
While our teammates concentrated on developing the core AI algorithms for terrain generation, we (Chirag and Cole) took on the challenge of the front end, focusing on user interaction and design aesthetics. After looking through some inspiration, we settled on the name 'Endless Altitude' for our project. We took inspiration from various open-source projects like OpenCV, and we decided that we wanted to blend functionality with visual appeal in our website design. Along with that, we looked at some personal resources to take inspiration from. Our own district's robotics team, VorTX, has a stunning website, and we took many design aspects from them. We then decided to use ReactJS to build our website as we were somewhat familiar with the library. Throughout the process, we learned that sitting down beforehand to create an approach to the design was extremely beneficial and helped both of us collaborate seamlessly and maximize our time. This approach ensured that 'Endless Altitude' would offer a seamless and enriching user experience, from casual browsers to serious developers looking to generate complex terrains for their projects.
Log in or sign up for Devpost to join the conversation.