Getting Started | Features | Dependencies | RoadMap
For more examples, please see Samples.
List is W.I.P (There are lots of features not written here)
Engine
- Custom Entity Component System (using entt as back-bone while providing systems that manages components)
- Multi-Threaded tasks execution (Job-system)
Assets
- All assets are loaded/imported asynchronously.
- Uses Assimp to import 40+ 3D model formats.
- Uses Freeimage to import 30+ image formats.
- Uses libsndfile to import 20+ sound files formats.
- All imported assets are exported into a unified formats for faster loading.
- All imported assets have a meta file that describes further loading.
- Every asset is identified with a unique UUID given on its creation.
- Section W.I.P
Graphics
- Dynamic light Component (Directional & Point & Spot)
- Flexable Material System (using different pipelines/shaders/textures for every material)
- Shadow Mapping for all light sources.
- PBR With Image Based Lighting shaders.
- Section W.I.P
Audio
- Uses OpenAL or XAudio2 as a low-level backends
- Section W.I.P
Physics
- PhysX 4.1 integration
- Section W.I.P
Scripting
- C# Scripting through Mono
- Section W.I.P
Follow the instructions below to compile and run the engine from source. If you wish to build with another compiler/platform, please note that:
- The engine requires a C++20 compiler and currently only supports x64 platforms (support for x32 is planned)
- The engine doesn't contain platform-specific code and is written with cross-platform portability in mind, so porting to other platforms should be easy.
- Visual Studio 2022 or newer is required if you wish to build the solution directly
- Clone repo & submodules
- Run RunCmakeForDependencies.bat
- Compile Assimp & Diligent & OpenAL-soft found in External/CmakeProjects
- Download and compile the remaining dependencies (PhysX & FreeImage & Freetype & msdf-atlas-gen 'as static lib')
- Run CopyDependenciesBinaries.bat
- Open
Nuclear Engine.sln
and set your solution configuration and platform - Compile
- Planned platforms:
- Desktop: Linux - MacOS
- Mobile: Android - IOS
Consoles are planned but not a priority now...
Dependencies | Type | Buildling |
---|---|---|
Assimp | Submodule | built with cmake |
DiligentCore | Submodule | built with cmake |
OpenAL-soft | Submodule | built with cmake |
PhysX 4.1 | submodule | Built with their provided build-tools |
Freeimage | submodule | Built with their provided build-tools |
Freetype | submodule | Built with their provided build-tools |
msdf-atlas-gen | submodule | Built with their provided build-tools |
Mono | External | Put headers in External/mono |
SDL2 | External | Put headers in External/SDL/include |
libsndfile | External | Put the .lib in your Build Output directory |
spdlog | included | Built with the engine |
IMGUI | included | Built with the engine |
stb_truetype | included | Built with the engine |
entt | included | Built with the engine |
zpp::bits | included | Built with the engine |
Download external dependencies through their sites. Put all their .lib in the bin folder.
- V0.01 Alpha:
- Complete RenderSystem (50%)
- Complete AudioSystem Implementation. (75%)
- Fix AudioSource/Listener Velocity change callbacks
- Add Support for streaming AudioClips
- Add AudioCapture support (Microphones)
- Basic Implementaion of PhysX.
- Complete Samples & their documentation.
-
W.I.P:
- CPU & GPU Queries & Memory/Performance Profilers
- Use CMake instead of Visual Studio / Port to linux.
- New Rendering Effects (Fog - SSAO - SSR - Motion Blur)
- PostProcessing effects should be processed per camera not only in the main camera.
- Start implementing 2D sprite rendering (+ start implementing GUI/Text Rendering)
-
On-Hold:
- Text rendering (text tile-set creation finished)
- Basic Editor support (Nuclear Editor).
- Finish reflecting the C++ api to the C# scripting assembly (prob provide a build-time solution that builds a binding lib?)
- Serializing the scene & assets.
-
TODO:
- CSM
- FIX BRDF generation in IBL Pipeline
- Clean and document Samples.
- GUI (basic widgets)
- Contributions are welcome, just open a pull request or an issue. You can also join us in GitHub Discussions.