Luxon Engine

LuxonEngine-Icon

Project Info

Developed For: University (My MSc final Project)

Platforms: Windows

Responsibilities: Programming, Design, asset preparation

Tools: C++, Win32 API, DirectX 12, Vulkan 

Team size: 1

Time Frame: from May 2025 to present

Introduction

‘Luxon Engine’ is a rendering engine for Windows capable of using both rasterization and ray tracing to render 3D objects. This project was created as part of my final master’s project, titled ‘Real-time Ray Tracing Render Engine.’ It is built with C++ and uses the Win32 API for window management. The engine leverages either DirectX 12 or Vulkan as its graphics API and DXR/Vulkan’s Ray tracing ententions for the ray tracing pipeline. For my master’s project, this engine was developed to compare rasterization and ray tracing rendering as part of the task. In the future, I hope to evolve this rendering engine into a game engine if time allows.

A playable demo is currently available for download. In this demo, users can render several scenes from a simple Windows application built with WPF. Depending on the scene, they can choose the graphics API—DirectX 12 or Vulkan—and select whether the engine uses full ray tracing or a hybrid renderer.

Main Features

Here are some of the main features of this render engine:

  1. It features two main renderers: a full ray tracing renderer and a hybrid renderer that can utilize rasterization or a combination of rasterization and ray tracing.

  2. The engine can use either DirectX 12 or Vulkan API

  3. It includes a feature for importing and rendering 3D model files using the ‘Assimp’ package (link). Currently, it only supports static meshes.

  4. It offers the capability to import and utilize textures for rendering via the ‘Windows Image Component’ SDK.

  5. It is capable of compiling and using rasterization, compute and ray tracing HLSL shaders with the ‘DXC Compiler’.

  6. For every rasterization and ray tracing shader, we can generate material instances with unique parameters and textures for customization.

  7. Each material’s properties can be modified at runtime.

  8. The application can render at a fixed frame rate or with unlimited FPS, depending on the settings.

  9. Each object has a ‘transform’ component for its position and orientation, a ‘Renderer component’ for the Hybrid Renderer, and a ‘Ray Tracing component’ for the Ray Tracing Renderer.

  10. By holding the right mouse button, the user can navigate through the scene using mouse movement and the WASD keys.

  11. Applications can include ‘Behaviour’ objects that allow for custom control over scene like object movement, data logging, and more.

Future Plans

This software currently functions as a render engine, but it has the potential to evolve into a game engine in the future, which is my goal for this project in my free time. There are countless tasks ahead to transform it into a game engine. At present, there are several tasks that need to be completed to make the software more polished. Below are some of these tasks, listed in order of priority: 

  1. Make the scenes and materials data-oriented, as building scenes with code can be tedious.

  2. Design an asset management system for importing resources such as materials, textures, shaders, and more.

  3. Currently, the project supports vertex/pixel/geometry shaders, compute shaders and two ray tracing shader stages. The plan is to add additional shaders, tessellation, mesh shaders and other ray tracing shader stages.

  4. During the project timeline, I didn’t have the opportunity to implement UI rendering. However, I plan to integrate a UI system to render image and text overlays in the future. I will probably use ImGUI for this.

  5. Include an Editor in the project to enhance its software-like feel. Potential frameworks for this are ImGUI, Qt and WPF, but I haven’t made a decision yet.