Advanced, modular, coupled geomorpohology simulator for real-time procedural terrain generation.

Overview

SoilMachine

Advanced, modular, coupled geomorpohology simulator for real-time procedural terrain generation in C++.

Visualization with TinyEngine.

Article: Coming Soon(ish)

Description

SoilMachine is a unified geomorphology simulator for procedural terrain. It represents the culmination of a lot of work on particle-based transport and erosion systems (hydraulic and wind). Most importantly, a new layered terrain data structure allows for modeling surface and sub-surface phenomena based on particle transport with multiple soil types, which exceeds the functionality of voxels.

Banner

SoilMachine is written from scratch in very little code and visualized with TinyEngine using a technique called vertex pooling, which obviates the need to remesh the heightmap (ever). It is designed to be modular and expandable.

This repo is currently in development and will probably not be done soon but I am publishing it so updates can be followed live for anybody who is interested.

Features

Implemented

  • Vertexpool based heightmap visualization (OpenGL AZDO) to eliminate remesh cost
  • Layered terrain data structure using memory pooled, run-length encoded sediment sections as a linked list on a grid
  • Modular soil type description and "erosion chains"
  • Modular description of transport types using a particle base class

Planned

  • Parallelization of the particle base class terrain interaction

  • Sediment compaction / conversion

  • Water-logging using sediment porosity

  • Implementation of multiple water tables based on Particle-Based Hydrology

  • GUI Interface for Initial Terrain

  • GUI Interface for Defining Sediment Types

  • Data Export

Screenshots

Some example outputs:

Output 1

Output 2

Output 3

Utilization

Tested on Ubuntu20 LTS.

Building & Running

SoilMachine is visualized using TinyEngine. Install TinyEngine using the instructions at the repo:

https://github.com/weigert/TinyEngine

TinyEngine is the only dependency (besides sub-dependencies).

Once that works, build SoilMachine using the makefile and run in place (no install):

cd ~
git clone https://github.com/weigert/SoilMachine
cd SoilMachine
make all
./soilmachine

Controls

The GUI is currently being overhauled.

P: Toggle Pause (Paused by default!!!)

Scroll-Y: Zoom
Scroll-X: Camera Angle
Up / Down Arrow: Camera Tilt
C / V: Move Camera Up / Down
WASD: Move Camera in Plane

ESC: Toggle GUI

License

MIT License

You might also like...
DateTime Class to Express Time

Time is an eternal topic. How to express time is very important. The C + + class represents the date and time, which is very easy to use.

3D Procedural Terrain Generation Tool in OpenGL/C++
3D Procedural Terrain Generation Tool in OpenGL/C++

TerraGen3D 3D Procedural Terrain Generation Tool in OpenGL/C++ Give your valuable feedback : https://github.com/Jaysmito101/TerraGen3D/discussions/6 T

3D Procedural Terrain Generation and Texturing Tool in OpenGL/C++
3D Procedural Terrain Generation and Texturing Tool in OpenGL/C++

TerraForge3D 3D Procedural Terrain Generation Tool in OpenGL/C++ Give your valuable feedback : https://github.com/Jaysmito101/TerraForge3D/discussions

Terrain Analysis Using Digital Elevation Models (TauDEM) software for hydrologic terrain analysis and channel network extraction.

TauDEM (Terrain Analysis Using Digital Elevation Models) is a suite of Digital Elevation Model (DEM) tools for the extraction and analysis of hydrolog

Perimeter is a real-time strategy video game with unique gameplay elements such as terraforming deformable terrain, morphing units, energy network, protective shield and surreal worlds.
Perimeter is a real-time strategy video game with unique gameplay elements such as terraforming deformable terrain, morphing units, energy network, protective shield and surreal worlds.

Периметр | Perimeter About Perimeter is a real-time strategy video game with unique gameplay elements such as terraforming deformable terrain, morphin

Overlay Microsoft Flight Simulator (FS2020) aircraft data onto real airport charts in real-time
Overlay Microsoft Flight Simulator (FS2020) aircraft data onto real airport charts in real-time

FLIGHTSIM CHARTS Introduction Overlay Microsoft Flight Simulator (FS2020) aircraft data onto real airport charts in real-time. Instantly teleport to a

R2LIVE is a robust, real-time tightly-coupled multi-sensor fusion framework, which fuses the measurement from the LiDAR, inertial sensor, visual camera to achieve robust, accurate state estimation.
R2LIVE is a robust, real-time tightly-coupled multi-sensor fusion framework, which fuses the measurement from the LiDAR, inertial sensor, visual camera to achieve robust, accurate state estimation.

R2LIVE is a robust, real-time tightly-coupled multi-sensor fusion framework, which fuses the measurement from the LiDAR, inertial sensor, visual camera to achieve robust, accurate state estimation.

R3live - A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package
R3live - A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package

R3LIVE A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package News [Dec 31, 2021] Release of cod

A real-time, direct and tightly-coupled LiDAR-Inertial SLAM for high velocities with spinning LiDARs
A real-time, direct and tightly-coupled LiDAR-Inertial SLAM for high velocities with spinning LiDARs

LIMO-Velo [Alpha] 🔴 [16 February 2022] 🔴 The project is on alpha stage, so be sure to open Issues and Discussions and give all the feedback you can!

A procedural geometry generation library for C++11
A procedural geometry generation library for C++11

Generator - A procedural geometry generation library. The purpose of this library is to easily generate procedural meshes of geometric primitives such

Procedural generation of organic 3D geometry

README Please see this post: Simplicial Developmental System. As part of my PhD I developed software for procedurally generating complex organic 3D fo

Procedural Generation Experiments
Procedural Generation Experiments

Procedural Generation Experiments What is this? This application is a tool to create and paint L-System in a fully interactive and dynamic way. “But,”

Real-time 2D fluid simulator with lots of visualization options.
Real-time 2D fluid simulator with lots of visualization options.

Fluid Simulator Building Start by cloning the program and all submodules using the following command: git clone --recursive https://github.com/linusmo

Time Series Quick Simulator - able to perform time series analysis and to setup validation experiments.

tsqsim Time Series Quick Simulator - able to perform time series analysis and to setup validation experiments. With its somewhat limited plotting capa

A Motorola 68K simulator based on Musashi-master 68K simulator.

cpmsim Originally referenced as http://home.earthlink.net/~schultdw/cpm68/simulator.html (now 404) This simple CP/M-68K simulator, is built around the

Terrain generator with 5 visually distinct biomes, spread them in regions and smooth their borders
Terrain generator with 5 visually distinct biomes, spread them in regions and smooth their borders

termProject This is the repository of my term project: a terrain generator. Abstract The larger the scenario of a game, more time a player will spend

Rendering isometric terrain in the C language on the TI-84+ CE.
Rendering isometric terrain in the C language on the TI-84+ CE.

Iso-Render Rendering beautiful isometric terrain, using sprites, in C on the TI-84+ CE. This program is currently in progress, its mostly an experimen

Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.
Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.

Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.

Updates the Wii's current system time with the real world time.

Fix Wii System Time This is a homebrew tool I made for the Wii a while ago. It updates the current system time with the real world time via worldtimea

Owner
Nick McDonald
Engineering Grad @ ETHZ / MIT - Hobbyist Graphics Programmer - Procgen Enthusiast
Nick McDonald
gem5 simulator to evaluate the design idea proposed in ASAP: A Speculative Approach to Persistence

About this repository This repository contains the gem5 simulator code for evaluating the design idea proposed in ASAP: A Speculative Approach to Pers

Multifacet 2 May 23, 2022
unlock the advanced menu of Lenovo Yoga Slim 7 BIOS

yoga-bios-unlock Based on FlyGoat's work to unlock the BIOS advanced menu documented here, I wrote that tool to unlock my yoga laptop without using a

crito 78 Dec 25, 2022
AlleyWind is an advanced Win32-based and open-sourced utility that helps you to manage system's windows

AlleyWind AlleyWind is an advanced Win32-based and open-sourced utility that helps you to manage system's windows. AlleyWind could: Displays a graphic

KNSoft 22 Oct 20, 2022
The libxo library allows an application to generate text, XML, JSON, and HTML output using a common set of function calls. The application decides at run time which output style should be produced.

libxo libxo - A Library for Generating Text, XML, JSON, and HTML Output The libxo library allows an application to generate text, XML, JSON, and HTML

Juniper Networks 253 Dec 10, 2022
Sqrt OS is a simulation of an OS scheduler and memory manager using different scheduling algorithms including Highest Priority First (non-preemptive), Shortest Remaining Time Next, and Round Robin.

A CPU scheduler determines an order for the execution of its scheduled processes; it decides which process will run according to a certain data structure that keeps track of the processes in the system and their status. A process, upon creation, has one of the three states: Running, Ready, Blocked (doing I/O, using other resources than CPU or waiting on unavailable resource).

Abdallah Hemdan 18 Apr 15, 2022
cavi is an open-source library that aims to provide performant utilities for closed hierarchies (i.e. all class types of the hierarchy are known at compile time).

cavi cavi is an open-source library that aims to provide performant utilities for closed hierarchies (i.e. all class types of the hierarchy are known

Baber Nawaz 5 Mar 9, 2022
a compile-time, header-only, dimensional analysis and unit conversion library built on c++14 with no dependencies.

UNITS A compile-time, header-only, dimensional analysis library built on c++14 with no dependencies. Get in touch If you are using units.h in producti

Nic Holthaus 809 Dec 29, 2022
This library support run-time type casting faster than dynamic_cast ( similar to unreal engine's CastTo )

Fast Runtime Type Casting This library give you C++ Fast Runtime Type Casting faster than dynamic_cast ( similar to Unreal Engine's CastTo, IsChildOf

SungJinKang 7 Jun 11, 2022
provide SFML Time utilities in pure C++20, no dependencies

SFML-Time-utilities-without-SFML provide SFML Time utilities in pure C++20, no dependencies Example int main() { Clock clock; Sleep(1000);

null 1 Apr 28, 2022