Editor and Engine Showoff

The code is on Github at https://github.com/AmirAzmi/DeferredGraphics ! Please clone and play around with it and recommend new features to add!

Watch the video on HD for better quality!

What and Why ImGui?

 ImGui is C++ GUI library primarily for the use of game development and it follow the practices of immediate mode user interface where all the UI is always drawn repeatedly where the benefit of this is rapid prototyping. I chose ImGui for the exact reason of it being that I could quickly develop tools for end users such as designers and artists to bring their ideas to life.

Editor Features I Implemented

Features Implemented Shown in Video:

  • Docking Windows for User Customization
  • Displaying the Scene Within a Window
  • Adding and Removing Entities
  • Adding and Removing Components
  • Translation, Rotation, and Scale of Objects
  • Changing of Color and Specular Intensity
  • Hot Swapping Meshes and/or Shaders Loaded From Folders
  • Changing of Light Color and Position
  • HDR, Exposure Tone Mapping, and Bloom
  • Uncharted 2 Tone Mapping
  • Viewing of Specific Deferred Textures and Bloom Textures
  • Axis Aligned Bounding Boxes and Sphere Bounding Volumes
  • AABB Top Down Dynamic Bounding Volume Hierarchy

Features Implemented not Shown in Video but in current build:

  • Octree implementation of a single object
  • Custom Linear Allocator and Profiler for tracking memory usage of the Octree and BVH nodes
  • Raycast – Intersection AABB test
  • Assimp Model Loading and Animations
  • Bezier Curves
  • Inverse Kinematics
  • Cloth Simulations

Editor Difficulties

One of my goals for this editor was the ability to select any object you want just by having it within a specific folder name/path. This was slightly difficult due to the fact that going through directories in C++ was slightly tedious. Fortunately C++17 came out with the feature of std::filesystems which allows you to search folders or assets within your working directory. After learning this, I spent a good amount of time learning about filesystems and was finally able to use it to load all object and shader files automatically. Another difficulty that I recently had trouble with was with the use of custom memory allocations. I wanted to use my own memory manager for my temporary trees so I decided on using a Linear Allocator. It is a simple allocator which tracks temporary objects, and in this case nodes for the trees.

Improvements That Can Be Made

Some improvements to the editor that can made are changing object names which requires serialization, selecting objects to show its properties which entails raycasting, and finally dragging of objects in game. These features are all essential and monumental tasks for an engine to have and my next goals are to accomplish these set of features.