Horizon Engine is an open-source 3D rendering engine, focusing on modern rendering engine architecture and rendering techniques. Serving a different purpose than game engines, this project aims to build a highly scalable rendering framework to improve the productivity of prototype projects and academic research, but also to serve as an educational tool for teaching rendering engine design and implementation from scratch.
Horizon Engine is currently only supported on Windows and only target modern graphics APIs (Direct3D 12, Vulkan, Metal).
Goals:
- Efficent and Flexible Rendering
- Fast Rendering Techniques Experimentation, eg. Hybrid Rendering with DXR or Vulkan Ray Tracing KHR
Horizon Engine Architecture:
Daisy Renderer Architecture:
Inspired by Halcyon
Features:
- Modularization using C++20 modules
- Fiber-Based Job System
- Bindless
- Render Graph
- ECS (Entity-Component-System)
- Hybrid Render Pipeline
- Deferred Render Pipeline
- Path Tracing
- Physics Engine Integration (PhysX)
- Sound Engine Integration (miniaudio)
Roadmap:
- Super Resolution Algorithms (DLSS 2, FSR 2, etc)
- Visibility Buffer (Also Called Deferred Texturing or Deferred Material Shading)
- Surfle GI
- Native Graphics API Support (Direct3D 12, Metal 2)
- Multi-GPU Rendering
- Plugin System (Live-Reloadable Plugins)
- Machine Learning (TensorRT Integration)
- VR/AR Support
- Cross-Platform (MacOS and Linux Support)
See here for more examples.
- Windows 10 SDK (10.0.20348.0)
- NIVIDIA Graphics Cards (Geforce RTX 20-series or 30-series) and keep your graphics drivers up to date (https://www.nvidia.com/Download/index.aspx)
- Vulkan SDK 1.3.216.0, this repository tries to always be up to date with the latest Vulkan SDK (https://vulkan.lunarg.com/sdk/home)
- CUDA SDK (11.7)
- Visual Studio 2022, and make sure C++ Modules for v143 build tools (x64/x86 - experimental) is installed (Currently, I'm working with Preview Version 17.4.0, it may not compile successfully if you use another version)
- C++ 20
- Clone this repository
git clone https://github.com/harukumo/HorizonEngine
- Run "GenerateProjects.bat"
- assimp
- imgui
- ImGuizmo
- entt
- glfw
- stb
- spdlog
- glm
- Vulkan
- VulkanMemoryAllocator
- DirectX-Headers
- DirectXShaderCompiler
- D3D12MemoryAllocator
- OpenEXR
- yaml-cpp
- MPMCQueue
- PhysX
- OptiX
- CUDA
- premake
- optick
- miniaudio
API Specification
Programming Guide
Q&A:
See Q&A where common questions are answered.
Vulkan/D3D12 debugging:
- RenderDoc, but it dose not support Vulkan Ray Tracing KHR or DXR
- Use NVIDIA Nsight Graphics if ray tracing is enabled
Optix debugging:
CPU profiling:
Contributions are welcome.