This project has the goal of developing a modular, fast, and realistic multi-domain system simulation and renderer. It is the culmination of graphics, rendering, and physics research that I've done over the past 6-7 years as either hobby or class projects.
We are developing a GPU-accelerated muti-domain physics simulation and realistic rendering system. It will support the simulation of multiple physical domains simultaneously, e.g. fluid dynamics, gravity, elastic and inelastic collision. Additionally, it will support realistic rendering of the simulation as feedback and interaction with the user. We are integrating support for procedural data generation as well as the data stored by NASA in its Planetary Data System. By working with existing high-fidelity physics simulation engines and integrating the latest in GPU acceleration and rendering techniques, we will provide real-time simulation and feedback to the user.
Much of the research for this engine has not been documented (sadly), as it has been ongoing since around 2008. Some of that resarch culminated in a class project which was a networked first person shooter built on top of a custom software rendering engine. However, Since this project has started, all resarch has been (as much as possible) catalogued by topic as book references, web references, or the relevant research papers have been committed into the repository under the Docs folder. Additionally, any ongoing or past implementation notes are committed as their own files, listed under Relevant Documentation in this file.
A full design can be found in our Design Document; this section is a shorter version of it.
The simulator is composed as a collection of subsystems which each export at least this basic interface:
interface ISubsystem
{
virtual bool Initialize() = 0;
virtual void Update() = 0;
virtual bool UnInitialize() = 0;
virtual void OnSuspending() = 0;
virtual void OnResuming() = 0;
};
The main subsystems of the simulator are
- Base
- Contains the basic data structures, math, memory, time, and interface used across subsystems
- Engine
- Controls the main execution of the simulator and its subsystems
- Input
- Controls the user input to the simulator
- Physics
- Manages the physical simulation for all entities being simulated
- Renderer
- Manages the rendering of all entities for feedback to the user
Each of these subsystems may extend the base subsystem interface to add relevant methods required for their purpose.
Currently there are two versions of the simulator implemented:
- The Renderer Project in the Rendering folder is the outdated code which utilizes hardware tesselation and programmable shaders to render the NASA Earth SRTM dataset with a cloud layer and atmosphere.
- The Simulator Project in the Simulator folder contains the main implementation. It is currently being transitioned from a ROAM-based rendering implementation to a PGM-based implementation. The user input subsystem is functional, as are the Renderer and the Engine subsystems, but the Physics subsystem has no integration with 3rd party physics simulators and contains no physics simulation code itself.
- The current Design Document
- A list of book chapters relevant to each subject
- A list of websites relevant to each subject
- A development document full of notes for implementing and extending PGM
- A development document with notes for the possible integration of GDAL
- A development document with notes for the possible integration of FLEX
- A development document with notes for the possible integration of Assimp