Euclidean Manifold Topology Engine, or EMTE, is the focus of my dissertation. It's a prototype toolset and lightweight renderer for authoring non-Euclidean scenes. These spaces are implemented through portals, transitions between two points in space.
The renderer was created using DirectX 12. DirectX 12 was chosen thanks to its:
I've used DirectX 11 for many projects, so it seemed natural to expand my graphical knowledge with a low-level graphics API. Learning DirectX 12 should provide me the skills to make use of other low-level graphics APIs, which I can apply to any of my graphical projects.
Rendering portals is a typically recursive business, so it's vital for these portals to render as efficiently as possible. DirectX 12's explicit control allows me to fine tune these portals to render efficiently, which is vital for portal self-recursion.
While this project does not make use of real-time raytracing, it has been considered for further development. Raytraced non-Euclidean spaces are a fascinating area of research. I highly recommend reading Pixar's short paper, Into the Voyd. It's fascinating. Being able to make use of DXR in a further stage of this project's development could have a profound impact on the toolset.
I implemented portals through the (somewhat old-fashioned) render texture technique. This was primarily in the interests of time - the timeframe for this project was short and the goal was only to produce an initial prototype. Render to texture is simple, but far from the most effective way of rendering portals. Rendering directly to the back buffer, as opposed to a seperate render target, using a stencil pass is a far more efficient way of rendering rasterizer portals. That's a Wrap, The Manifold Garden rendering retrospective, talks about the subject excellently.
EMTE was a difficult project. It was my first time using a low-level graphics API. Overcoming the unfamiliarities and complexities of DirectX 12 took up the bulk of my time at the start of the project. I found that DirectX Tool Kit's tutorial helped massively in grasping the basics of a high-level API. I then used the DirectX Graphics Samples to help me understand the intricacies of the system.
The portals did not come out the way I would've liked. Once I've had ample time to reflect and recharge, I'd be interested in implementing a stencil pass approach in the same vein as Portal's or Manifold Garden's. Additionally, there are some inconsistencies with the portals' angles: I fail to reposition the portals' virtual cameras according to player displacement. To do this, I need to also implement some way of accurately culling geometry in front of a portal's other side.
Also, the GUI left a lot to be desired. I used the fantastic Dear ImGui for the GUI, but I took on board some criticism following the user study that was a part of this project. The GUI is going to be overhauled in the future with some quality of life changes, taking on what I learned in DirectX 11 Advanced Graphics.