Skip to content
No description, website, or topics provided.
C++ GLSL Lua
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
FlyAway
screenshots
vendor
.gitignore
FlyAway.sln
premake5.lua
readme.md

readme.md

Flyaway

The goal of this project was to develop a framework to generate an infinite world with different biomes and without visible pattern repetition.

Screenshot

Building

This project uses Premake to build project files.

Implementation

The biome concept has been abstracted into a Biome class that defines all the terrain properties, given the 3D-space coordinates. The BiomeInterpolator class extends Biome, and basically implements a smooth transition between 2 biomes.

Each particual biome extends the Biome base class, therefore is rather easy to add new biomes to the world. Of course this also involves tweaking a few numbers (like the perlin noise parameters, the colors, etc) to make it look nice, but all the transitions are handled gracefully by the BiomeInterpolator class.

Each biome can have objects (like trees, rocks, water). The space is subdivided into a uniform grid, and in each cell can have an object in it. The placement is randomized but kept whitin the bounds of the cell, so that objects do not overlap, but also the viewer can't notice the grid division. The object to place is selected by a probability tree where each node branches based on a random value. These values are injected for each cell, and they're calculated with different noise functions.

I also implemented a simple day/night cycle with dawn and sunset. Nothing too special here, the sky and the light changes over time.

I wasn't sure about the graphics style to use. I wanted to make a PBR scene with realitisc objects, but also I wanted to make the 3d models myself. So in the end, I developed my own cell shading, and since the models would be low poly, I was able to do them myself.

You can’t perform that action at this time.