Pixel Planet

Summary

A solo project in which I made a voxel based terrain engine with my custom engine.

Details

  • Solo Project
  • Ongoing (2018 - Present)
  • Custom Engine
  • DirectX 11
  • C++/C#
  • Single Player


Project Brief

During School
In my last school year I got the opportunity to work on a personal project, so I decided to finally make the game I've always dreamed about. A voxel based RPG.

Over the past four years I've been developing a custom engine. Re-doing it several times as I learned something new or felt like it needed a better API. In the beginning it's main purpose was to create a voxel based game. Something I wanted to make for a long time now. Though, through iterations it became more of a general purpose engine.

I had 18 weeks to make the game, which I decided to build the game from scratch using my personal custom engine. I knew this would cause a lot of setbacks, as this was the first time I would be using the custom engine for an official project. So, for the coming half a year my goal was to create the terrain engine and most of the systems I would need to create the game I had envisioned. I also needed to keep in mind that I'm doing everything solo, so everything was going to take a lot longer then it would in a team project.


After School
After school I continued working on this project. My main focus currently is improving the custom engine. Making it ready for the development of my game. Honestly I'm just enjoying the process of building the custom engine too much. I love challenges and figuring out by my self how I would implement a certain engine feature.

Progress is not going as quick as before, since I'm working 32 hours a day, but I still work on it sometimes during the weekends.


My Contribution

Generating voxel terrain
I started with generating some simple terrain meshes using simplex noise. Made the data structure for storing the voxels and the algorithm to generate faces from the blocks, only showing outer faces.


After the initial phase was completed I continued making the terrain. I added infinite terrain loading using threads, improving loading performance in the process. Made an editor for creating models and features (like trees) and added terrain features like water, trees and biomes.


Unfortunately a lot more time was spend on the custom engine then I originally expected. I already expected a slowdown from it, but this was way more time. A lot of time was spend on adding missing features that I didn't think of before. For example getting transparency to function properly with distance sorting and pipeline modifications. The most time was spend on implementing the physics engine. I spend a lot of time wrapping the features and trying to understand and debug Bullet, which I had never used before. Luckily I had some help, as in Project Sulphur some of my team mates did use Bullet and I was able to read through the source code.


The custom engine
After I graduated, I continued development on the custom engine. I just enjoy the process of developing complex systems, so my focus was on the engine rather then the game. I mostly just experimented with improving the custom engine, improving the design to make it easier to work with. Trying to make it cross platform and adding new features that I didn't have implemented yet. But also liked to use my custom engine to experiment with other features.

One example was when I was trying to implement a rope system in Unreal and I was wondering if I was able to make it in my own engine. See the result below.


Another example of this was when I wanted to gain more experience in working with multi-threaded systems. I ended up making the resource manager asynchronous. To do this I created a basic job system. I could create a new task and let the job system execute it on another thread.

I'm still working on it quite often. My latest addition to the project is a completely rewritten editor base that I converted from C++ QT to C# WPF. I also still work on the terrain engine from time to time. My latest addition is an occlusion system that hides chunks that are behind a mountain. In the next video you will see how I paused the occlusion algorithm when I was standing behind a mountain and started recording on top of the mountain. After that I enabled the algorithm again to have it update my visibility.


Still lots left to add an improve and I would love to keep working on it.



Media