Stork Engine

About

This engine is an extension/remaster of my master's thesis engine. The main purpose of this project is to challenge myself to learn in my spare time and discover new and interesting algorithms.

During the creation of my master's thesis, I was trying to push out features as quickly as possible and the resulting code structure is a little disjointed, especially considering the usage of CUDA, which does not lend itself well to object-oriented approach. I was additionally a culprit with regards to using raw pointers and manually allocating/deallocating memory using new/delete. For this purpose, the new engine uses smart pointers for owning pointers and raw pointers only for non-owning ones. Another change is embracing the auto keyword as suggested by Scott Meyers in Effective Modern C++. Last but not least, I have decided to switch from the Nuklear GUI library to Dear ImGui which I feel like is a better fit for my purposes.

Features

Here I'd like to list some of the already implemented features. Majority of these were already present in my master's thesis, but weren't in the spotlight due to its nature.

  • PBR shaders (no IBL yet)
  • Random terrain generation using Perlin noise
  • Multi-textured terrain shader/material
  • Assimp model loading (material loading not supported yet)
  • Manual multisampling (necessary due to the nature of cloud rendering)
  • EVSM
  • Hosek-Wilkie sky model
  • Normal skyboxes
  • Reflective surfaces (skybox & Hosek-Wilkie both supported)
  • Scene saving/loading to/from JSON file
  • Material and shader system - each material is also a JSON file
  • Bloom

TODO

  • Deferred rendering
  • IBL
  • SSAO
  • Assimp material loading
  • Generalized particle systems
    • GPU particles
  • Physics engine (Bullet integration)
  • Audio capabilities (probably using OpenAL)
  • DirectX 11 and 12, Vulkan backends (pipe dream)