Dooms Engine ( Game Engine ) ( 2021.01 ~ )
Video
How to build?
1. git clone https://github.com/SungJJinKang/DoomsEngine.git
2. move to project directory
3. git submodule init
4. git submodule update --recursive
5. Build "Doom3" project with visual studio 2022
Features
Requirement
- C++17
- C# ( used for making engine tools )
- Windows, x64, VisualStudio 2022(vc17)
- Target Compiler : MSVC, Clang ( clang is used for generating reflection data )
Engine Core
- Homemade Math Library ( JINMATH )
- Support SIMD ( Currently AVX2 ) ( Math, Culling.... )
- Asset Import Pipeline ( Automatically import assets located in asset folder )
- Component based System
- Object Management System for preventing memory leak ( 개발 일지 )
- Fast Runtime Type Casting ( inspired by unreal engine4's runtime type casting ) ( time complexicity is always O(1), dynamic_cast isn't used ( RTTI option is disabled ), source code )
- Garbage Collector using reflection system ( stop-the-world, Mark ( multithread ) - Sweep algorithm, std::array, std::vector is also supported, nullify pointer referencing destroyed object ( to prvent referencing invalid address ), 개발 일지, video, soure code )
Rendering
- OpenGL, DIRECTX 11(Partially)
- Deferred Rendering ( video )
- Sort objects from front to back
- Multi Thread ViewFrustum Culling From FrostBite Engine of EA Dice ( source code, 개발 일지 )
- Masked SW ( CPU ) Occlusion Culling From Intel ( video1, video2, source code, 개발 일지, reference paper )
- Distance Culling from Unreal Engine ( reference, soure code )
- Shader Language Portable System ( Automatically convert glsl files to hlsl, glslcc is used )
- Static Batch Rendering ( video, Mesh data of static objects with same material is combined automatically at start of scene. They are drawed in 1 draw call )
Physics
- Collision, Raycasting, Picking ( implemented with BVH Tree ) ( Picking Test Video, Collision Test Video )
- BVH, KDTree ( bvh source code, kdtree source code )
Reflection
- Automatic Reflection Data Generation System. ( video ) ( clrefelct_automation )
- Customized Reflection Open Source Library ( video ) ( Customized clReflect )
- Integrate imgui with reflection system. ( DObjects, std::vector, std::array, std::unique_ptr... is supported, video )
Misc
To Do
Thirdparty Dependencies
- glfw : A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
- assimp : The official Open-Asset-Importer-Library Repository
- DirectTex : DirectXTex texture processing library
- imgui : Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
- Intel TBB ( malloc proxy )
- concurrentqueue : A fast multi-producer, multi-consumer lock-free concurrent queue for C++11
- json : JSON for Modern C++
- glslcc : GLSL cross-compiler tool (GLSL->HLSL, MSL, GLES2, GLES3, GLSLv3), using SPIRV-cross and glslang
- magic_enum : Static reflection for enums (to string, from string, iteration) for modern C++