Releases: francesctr4/Nous-Engine
Nous Engine v0.5.1
Hotfix 0.5.1
Changelog
-
Refactored the shader compilation pipeline to use "shaderc" at runtime, enabling proper on-the-fly shader compilation. The previous approach only supported build-time compilation and prevented shaders from being generated during runtime.
-
Fixed an issue in the previous release that prevented script recompilation when running the engine in standalone mode, caused by missing CMake build files required to rebuild Scripts.dll. Now, RebuildScripts.bat uses cl.exe directly.
-
Uploaded the correct Release configuration.
Nous Engine v0.5
A multithreaded, Vulkan-based game engine developed in C++
Enhancing Software Performance through Multithreading and Parallel Programming Techniques
This repository contains source code developed as part of my Bachelor's Thesis (TFG):
-
Bachelor's Thesis URL: https://hdl.handle.net/2117/439429
-
Video Showcase: https://youtu.be/A4NfI6ALey8
-
Nous Engine Repository: https://github.com/francesctr4/Nous-Engine
-
Multithreading Library: https://github.com/francesctr4/NOUS_Multithreading.h
Author: Francesc Teruel Rodriguez (francesctr4 on GitHub)
Created: 11/07/2025
Published Version: v0.3
License: CC-BY-NC-SA License
Attribution-NonCommercial-ShareAlike 4.0 International
Copyright (©) 2025 Francesc Teruel Rodríguez
Contributing
Pull requests are welcome! If you'd like to suggest improvements, add features, or report issues, feel free to open a GitHub issue or PR.
📚 Table of Contents
- Home
- Changelog
- Dependencies
- Context
- Features
- Third Party Libraries
- Third Party Assets
- Installation
- Controls
- Known Bugs
- Future Roadmap
Changelog
Version 0.5 - Scripting System and Major Improvements (Current)
The v0.5 release introduces major architectural improvements, new Scripting System, and powerful tooling upgrades across the entire engine:
Scripting System
- Dynamic scripting using DLLs with an exposed EngineAPI (create, edit and recompile scripts on engine runtime).
- Hot reload support for instant iteration.
- Jobified script dynamic library recompilation.
- Engine bindings for function usage on scripting.
Project Structure & Build System
- Project files and folders reorganization.
- Modularized into multiple CMakeLists.txt using a clean recursive structure.
- Engine executable split into, editor executable and game executable with DLL + LIB layers (EditorApp.exe / GameApp.exe).
- Clear separation between Editor, Game, and Engine Core.
- Updated internal structure documented with a Lucidchart diagram.
Editor & Tools
- Expanded Logger system with channel-based filtering.
- Complete refactor and improvements to the Event System.
- New console window with new log channels and multiple ways to filter logs.
- Scene serialization supporting Save/Load (jobified).
- New hierarchy and inspector windows for ECS (Scene, GameObjects and Components).
Custom Memory Manager Improvements
- Upgraded Memory Manager and DynamicAllocator to fully support polymorphic types.
- New Memory Window to monitor tagged allocations in real time.
- New STL allocator integrated inside STL containters (e.g. NOUS_Vector).
- MemoryTag refactor using magic_enum library for reflective memory tagging.
Testing & Documentation
- Added unit testing support with GoogleTest.
- Integrated CTest target for automated test execution.
- Doxygen script for automated documentation generation.
Version 0.4 - After Bachelor's Thesis Delivery
- Development Environment: Migrated project to CLion for improved cross-platform IDE support.
- Build System: Rebuilt the project using CMake with support for vcpkg (manifest mode) and CMake presets.
- Dependency Management: All third-party libraries are now handled through vcpkg, simplifying setup and updates.
- Cross-Platform Foundations: Refactored the codebase to begin supporting Linux and macOS, in addition to Windows.
- Library Updates:
- Upgraded from SDL2 → SDL3
- Replaced MathGeoLib → glmath for math utilities
- CMake Minimum Version: Now requires CMake 3.21 or higher
Version 0.3
- Bachelor's Thesis: Final Delivery.
Version 0.2
- Bachelor's Thesis: Delivery 2.
Version 0.1
- Bachelor's Thesis: Delivery 1.
Dependencies
Important
For Windows Development and Execution
-
Visual Studio Community 2022: Download and install Visual Studio Community 2022 with the following workloads:
- Desktop development with C++
- Make sure to include the latest C++ toolset and Windows SDK.
-
Vulkan SDK 1.3.296.0: Download and install the Vulkan SDK 1.3.296.0. This provides the Vulkan runtime, headers, and tools (like
glslcfor shader compilation). -
CMake (≥ 3.21): Build system.
-
Ninja: Build generator (specified in CMakePresets).
-
C++23 Compiler: e.g., MSVC, GCC ≥ 11, Clang ≥ 14...
-
vcpkg: Clone the repository on the same parent directory as this project (e.g. Nous-Engine/../vcpkg).
Additional Dependencies (Managed by vcpkg)
The project uses vcpkg to manage the following dependencies. They will be automatically installed and built when configuring the project with CMake.
- SDL3 (with Vulkan support enabled)
- Vulkan (Headers and libraries)
- Assimp (Asset import library)
- Dear ImGui (with features: docking-experimental, SDL3-binding, SDL3-renderer-binding, Vulkan-binding)
- STB (Single-file image loading library)
- Parson (Lightweight JSON library)
- Tracy (Profiling tool)
- GLM (Mathematics library for graphics)
- gtest (Unit testing framework)
- magic-enum (Header-only enum reflection library)
To install all required dependencies in classic mode:
vcpkg install vulkan sdl3[vulkan] assimp imgui[docking-experimental,sdl3-binding,sdl3-renderer-binding,vulkan-binding] stb parson tracy glm gtest magic-enum
Nous Engine v0.3
Context
Multithreading is a powerful yet complex area of software development, especially when applied to game engines. While professional ones include advanced multithreading systems, their internal implementations are rarely shared publicly. Moreover, existing tutorials often lack depth, leaving many developers unprepared for production level usage.
This project aims to bridge that gap by providing a beginner-friendly and practical introduction to multithreading, answering essential questions around performance, architecture, challenges, and limitations. The goal is to create a custom solution built from scratch, offering a solid starting point for developers interested in concurrent programming and game engine architecture on how to use multithreading effectively.
The practical part of the bachelor's thesis consists on developing a multithreaded game engine written in C++, featuring a Vulkan-based renderer to take advantage of its multithreading affinity. The chosen approach for the multithreading implementation is a thread-based job system built on top of a thread pool.
Features
Nous Engine is a modular C++ game engine with a focus on multithreaded performance and low-level rendering control. Below is an overview of its key features:
Core Engine Architecture
- Modular engine structure (Renderer, Resource Manager, Input, etc.)
- Thread-based Job System built on top of a Thread Pool
- Memory management system with custom allocators and tagging
- Event system for module communication
- Logging and assertion utilities
Rendering & Graphics
- Vulkan renderer backend
- Camera controls
- Offscreen rendering support (Scene and Game viewports)
- 3D Geometry, Material and Texture loading
File & Resource Management
- Resource manager with support for meshes, textures, and materials
- Custom file system and serialization for accessing engine assets
Editor & Debugging Tools
- ImGui editor UI
- Asset browser for visual resource management
- Debugging tools for multithreading and resources
Build & Development
- Custom script to build the engine
Third Party Libraries
SDL2 - Download
Vulkan - Download
Assimp - Download
ImGui - Download
stb_image - Download
MathGeoLib - Download
Tracy - Download
Parson - Download
Third Party Assets
Lagiacrus by 09williamsad
Wolf ...
Nous Engine v0.4
A multithreaded, Vulkan-based game engine developed in C++
Enhancing Software Performance through Multithreading and Parallel Programming Techniques
This repository contains source code developed as part of my Bachelor's Thesis (TFG):
-
Bachelor's Thesis URL: https://hdl.handle.net/2117/439429
-
Video Showcase: https://youtu.be/A4NfI6ALey8
-
Nous Engine Repository: https://github.com/francesctr4/Nous-Engine
-
Multithreading Library: https://github.com/francesctr4/NOUS_Multithreading.h
Author: Francesc Teruel Rodriguez (francesctr4 on GitHub)
Created: 11/07/2025
Published Version: v0.3
License: CC-BY-NC-SA License
Attribution-NonCommercial-ShareAlike 4.0 International
Copyright (©) 2025 Francesc Teruel Rodríguez
Contributing
Pull requests are welcome! If you'd like to suggest improvements, add features, or report issues, feel free to open a GitHub issue or PR.
📚 Table of Contents
- Home
- Changelog
- Dependencies
- Context
- Features
- Third Party Libraries
- Third Party Assets
- Installation
- Controls
- Known Bugs
- Future Roadmap
Changelog
Version 0.4 - After Bachelor's Thesis Delivery (Current)
- Development Environment: Migrated project to CLion for improved cross-platform IDE support.
- Build System: Rebuilt the project using CMake with support for vcpkg (manifest mode) and CMake presets.
- Dependency Management: All third-party libraries are now handled through vcpkg, simplifying setup and updates.
- Cross-Platform Foundations: Refactored the codebase to begin supporting Linux and macOS, in addition to Windows.
- Library Updates:
- Upgraded from SDL2 → SDL3
- Replaced MathGeoLib → glmath for math utilities
- CMake Minimum Version: Now requires CMake 3.21 or higher
Version 0.3
- Bachelor's Thesis: Final Delivery.
Version 0.2
- Bachelor's Thesis: Delivery 2.
Version 0.1
- Bachelor's Thesis: Delivery 1.
Dependencies
Important
For Windows Development and Execution
-
Visual Studio Community 2022: Download and install Visual Studio Community 2022 with the following workloads:
- Desktop development with C++
- Make sure to include the latest C++ toolset and Windows SDK.
-
Vulkan SDK 1.3.296.0: Download and install the Vulkan SDK 1.3.296.0. This provides the Vulkan runtime, headers, and tools (like
glslcfor shader compilation). -
CMake (≥ 3.21): Build system.
-
Ninja: Build generator (specified in CMakePresets).
-
C++23 Compiler: e.g., MSVC, GCC ≥ 11, Clang ≥ 14...
-
vcpkg: Clone the repository on the same parent directory as this project (e.g. Nous-Engine/../vcpkg).
Additional Dependencies (Managed by vcpkg)
The project uses vcpkg to manage the following dependencies. They will be automatically installed and built when configuring the project with CMake.
- SDL3 (with Vulkan support enabled)
- Vulkan (Headers and libraries)
- Assimp (Asset import library)
- Dear ImGui (with features: docking-experimental, SDL3-binding, SDL3-renderer-binding, Vulkan-binding)
- STB (Single-file image loading library)
- Parson (Lightweight JSON library)
- Tracy (Profiling tool)
- GLM (Mathematics library for graphics)
To install all required dependencies in classic mode:
vcpkg install vulkan sdl3[vulkan] assimp imgui[docking-experimental,sdl3-binding,sdl3-renderer-binding,vulkan-binding] stb parson tracy glm
Nous Engine v0.3
Context
Multithreading is a powerful yet complex area of software development, especially when applied to game engines. While professional ones include advanced multithreading systems, their internal implementations are rarely shared publicly. Moreover, existing tutorials often lack depth, leaving many developers unprepared for production level usage.
This project aims to bridge that gap by providing a beginner-friendly and practical introduction to multithreading, answering essential questions around performance, architecture, challenges, and limitations. The goal is to create a custom solution built from scratch, offering a solid starting point for developers interested in concurrent programming and game engine architecture on how to use multithreading effectively.
The practical part of the bachelor's thesis consists on developing a multithreaded game engine written in C++, featuring a Vulkan-based renderer to take advantage of its multithreading affinity. The chosen approach for the multithreading implementation is a thread-based job system built on top of a thread pool.
Features
Nous Engine is a modular C++ game engine with a focus on multithreaded performance and low-level rendering control. Below is an overview of its key features:
Core Engine Architecture
- Modular engine structure (Renderer, Resource Manager, Input, etc.)
- Thread-based Job System built on top of a Thread Pool
- Memory management system with custom allocators and tagging
- Event system for module communication
- Logging and assertion utilities
Rendering & Graphics
- Vulkan renderer backend
- Camera controls
- Offscreen rendering support (Scene and Game viewports)
- 3D Geometry, Material and Texture loading
File & Resource Management
- Resource manager with support for meshes, textures, and materials
- Custom file system and serialization for accessing engine assets
Editor & Debugging Tools
- ImGui editor UI
- Asset browser for visual resource management
- Debugging tools for multithreading and resources
Build & Development
- Custom script to build the engine
Third Party Libraries
SDL2 - Download
Vulkan - Download
Assimp - Download
ImGui - Download
stb_image - Download
MathGeoLib - Download
Tracy - Download
Parson - Download
Third Party Assets
Lagiacrus by 09williamsad
Wolf by Juan_Puerta
Cypher by vintnes6
Viking room by nigelgoh
Queen Xenomorph by xdavido
Installation
Important
In order to download and execute the engine you have to Download the Latest Release and extract the zip.
It is recommended that you extract the zip on the parent folder of the disk, so that the path doesn't get too long.
(e.g. D:\Nous-Engine-v0.3)
In this case, the executable path will be as follows:
D:\Nous-Engine-v0.3\Nous-Engine\Nous-Engine.exe
Controls
Camera
The 3D editor camera supports smooth navigation using a combination of mouse and keyboard inputs. Controls are only active when the scene viewport is hovered.
| Input | Action |
|---|---|
Right Mouse Button (RMB) + W |
Move Forward |
Right Mouse Button (RMB) + S |
Move Backward |
Right Mouse Button (RMB) + A |
Move Left |
Right Mouse Button (RMB) + D |
Move Right |
Right Mouse Button (RMB) + E |
Move Up |
Right Mouse Button (RMB) + Q |
Move Down |
Shift (Hold while moving) |
Speed Boost |
| `Ri... |
Nous Engine v0.3
A multithreaded, Vulkan-based game engine developed in C++
Enhancing Software Performance through Multithreading and Parallel Programming Techniques
This repository contains source code developed as part of my Bachelor's Thesis (TFG):
-
Nous Engine Repository: https://github.com/francesctr4/Nous-Engine
-
Multithreading Library: https://github.com/francesctr4/NOUS_Multithreading.h
Author: Francesc Teruel Rodriguez (francesctr4 on GitHub)
Updated: 30/06/2025
Version: 0.3
License: MIT License
© 2025 Francesc Teruel Rodriguez
Contributing
Pull requests are welcome! If you'd like to suggest improvements, add features, or report issues, feel free to open a GitHub issue or PR.
📚 Table of Contents
- Home
- Context
- Features
- Dependencies
- Third Party Libraries
- Third Party Assets
- Installation
- Controls
- Known Bugs
- Future Roadmap
Context
Multithreading is a powerful yet complex area of software development, especially when applied to game engines. While professional ones include advanced multithreading systems, their internal implementations are rarely shared publicly. Moreover, existing tutorials often lack depth, leaving many developers unprepared for production level usage.
This project aims to bridge that gap by providing a beginner-friendly and practical introduction to multithreading, answering essential questions around performance, architecture, challenges, and limitations. The goal is to create a custom solution built from scratch, offering a solid starting point for developers interested in concurrent programming and game engine architecture on how to use multithreading effectively.
The practical part of the bachelor's thesis consists on developing a multithreaded game engine written in C++, featuring a Vulkan-based renderer to take advantage of its multithreading affinity. The chosen approach for the multithreading implementation is a thread-based job system built on top of a thread pool.
Features
Nous Engine is a modular C++ game engine with a focus on multithreaded performance and low-level rendering control. Below is an overview of its key features:
Core Engine Architecture
- Modular engine structure (Renderer, Resource Manager, Input, etc.)
- Thread-based Job System built on top of a Thread Pool
- Memory management system with custom allocators and tagging
- Event system for module communication
- Logging and assertion utilities
Rendering & Graphics
- Vulkan renderer backend
- Camera controls
- Offscreen rendering support (Scene and Game viewports)
- 3D Geometry, Material and Texture loading
File & Resource Management
- Resource manager with support for meshes, textures, and materials
- Custom file system and serialization for accessing engine assets
Editor & Debugging Tools
- ImGui editor UI
- Asset browser for visual resource management
- Debugging tools for multithreading and resources
Build & Development
- Custom script to build the engine
Dependencies
Important
It is required to download Visual Studio Community 2022 with the following extension to execute the engine.
|
It is also required to download the Vulkan SDK 1.3.296.0 to execute the engine.
Nous Engine uses ISO C++20 Standard (compile with /std:c++20 or -std=c++20) or newer.
Third Party Libraries
SDL2 - Download
Vulkan - Download
Assimp - Download
ImGui - Download
stb_image - Download
MathGeoLib - Download
Tracy - Download
Parson - Download
Third Party Assets
Lagiacrus by 09williamsad
Wolf by Juan_Puerta
Cypher by vintnes6
Viking room by nigelgoh
Queen Xenomorph by xdavido
Installation
Important
In order to download and execute the engine you have to Download the Latest Release and extract the zip.
It is recommended that you extract the zip on the parent folder of the disk, so that the path doesn't get too long.
(e.g. D:\Nous-Engine-v0.3)
In this case, the executable path will be as follows:
D:\Nous-Engine-v0.3\Nous-Engine\Nous-Engine.exe
Controls
Camera
The 3D editor camera supports smooth navigation using a combination of mouse and keyboard inputs. Controls are only active when the scene viewport is hovered.
| Input | Action |
|---|---|
Right Mouse Button (RMB) + W |
Move Forward |
Right Mouse Button (RMB) + S |
Move Backward |
Right Mouse Button (RMB) + A |
Move Left |
Right Mouse Button (RMB) + D |
Move Right |
Right Mouse Button (RMB) + E |
Move Up |
Right Mouse Button (RMB) + Q |
Move Down |
Shift (Hold while moving) |
Speed Boost |
Right Mouse Button (RMB) + Mouse Drag |
Rotate Camera |
Alt + Right Mouse Button (RMB) + Mouse Drag |
Orbit around target (origin) |
Middle Mouse Button (MMB) + Mouse Drag |
Pan camera (move on X/Y axes) |
Mouse Wheel Scroll |
Zoom In / Out |
Multithreading
This tool provides real-time visibility into the Job System and thread pool usage in the engine. It is divided into two main sections:
- Job System Overview
- Job Queue
Job System Overview
This section displays the current state of the thread pool and job processing.
| Label | Description |
|---|---|
| Max Hardware Threads | Number of hardware threads detected on the system (std::thread::hardware_concurrency() - 1). |
| Total Worker Threads | Number of active worker threads in the pool (excluding the main thread). |
| Total Jobs | Total number of jobs currently being handled or queued. |
| Active Threads | Visual indicator showing how many threads are actively running jobs (green bar). |
| Thread Count Spinner | Lets you configure the number of worker threads. Setting it to 0 disables multithreading. |
| Resize Pool Button | Applies the new thread count, resizing the thread pool at runtime. |
| Multithreaded Mode | Indicates if the job system is currently in multithreaded mode. |
Thread Table
Displays the current state of each thread (including the main thread).
| Column | Description |
|---|---|
| ID | Unique identifier for each thread. |
| Name | Friendly label for the thread (e.g., Main Thread, Worker Thread 1, etc.). |
| State | Thread status — either RUNNING (executing a job) or READY (idle). |
| Current Job | The name of the job currently being executed. None if the thread is idle. |
| Time (s) | Duration (in seconds) the current job has been running / has taken to complete. |
Job Queue
This section lists all pending jobs that are waiting to be assigned to threads.
| Column | Description |
|---|---|
| Job Name | The label of the pending job, useful for tracking or debugging. |
| (count) | Displays the number of currently queued jobs. |
Dynamic Thread Scaling
You can dynamically resize the thread pool using the spinner and Resize Pool button.
- Setting the worker count to
0switches the system to single-threaded mode. - The thread count can be adjusted in the range:
[0, (std::thread::hardware_concurrency() - 1) * 2]
Debug Keys
These shortcuts...
Nous Engine v0.2
Nous Engine current state for TFG Delivery 2.
Nous Engine v0.1
Nous Engine current state for TFG Delivery 1.


