Planet Renderer (Custom Engine)

Banner

About

Description

This project is currently a work in progress, aiming to develop a planet renderer. The implementation incorporates various rendering techniques, including the use of hull shaders/domain shaders (Tessellation shaders) to add extra detail to the environment as the viewer gets closer. The environment. This project is uses the Curium engine, a custom engine that I developed as a foundational renderer for any new projects I plan to create. You can follow the process via github find the Link


Skills used

  • C++
  • DirectX 12
  • ImGui
  • Quad-tree
  • Tessellation

Challenges

Creating a realistic planet rendering system is a big task, with elements like LOD, Atmosphere, Gravity, and Height differences to consider. To start, I set up the base renderer for rendering meshes. Then, I worked on creating a terrain mesh and implemented Quad-tree subdivision to make it into a cube sphere. Breaking it into smaller tasks helped manage the workload.

Understanding and implementing the atmosphere was another major challenge, requiring a deep dive into math. Despite its complexity, I tackled it by breaking it down and seeking guidance as needed. With each step, I'm getting closer to my goal of creating a realistic planet rendering system.


Result

Important Features

Quad-tree

For this project, I implemented a system to dynamically create and delete tiles in order to increase the number of vertices visible. The aim was to increase the detail in the parts of the planet that are close to the camera. To achieve this, I employed a quadtree structure to efficiently subdivide the area into four smaller pieces.

Noise Heightmap

Atmosphere

I wanted to create a realistic-looking planet, which required an atmosphere. I found a paper detailing optimized atmospheric light scattering from NVIDIA, and I've implemented it. Click here for article