A homebrew 3D game engine, written in C++. Scalable multithreading, modular, data-driven, Lua scripting, deferred rendering, multithreaded observer messaging, PBR, CSM, SSAO, HBAO, FXAA, POM, ECS, and many more features.

www.pauldev.org/project-praxis3d.html

#engine #gamedev #cpp #c++ #game-engine #opengl #3d

Paul A. b990a3ad4e Removed /permissive flag 9 months ago
.vs eeec9a5627 Added SpatialData and SpatialTransformData containers 4 years ago
Builds b990a3ad4e Removed /permissive flag 9 months ago
Dependencies b990a3ad4e Removed /permissive flag 9 months ago
Praxis3D b990a3ad4e Removed /permissive flag 9 months ago
.gitignore b990a3ad4e Removed /permissive flag 9 months ago
LICENSE.md b1cbdf3ec9 Added "About" window, font loading, sound event playback 1 year ago
Praxis3D.sln cb033df5ab Implemented component system for all objects and scenes; 4 years ago
Praxis3D_icon.ico b990a3ad4e Removed /permissive flag 9 months ago
README.md c196a0e5b4 Update README.md 1 year ago

README.md

Praxis3D-logo

A work-in-progress 3D game engine. Its purpose is to serve as a testbed for new ideas and implementations. My aim is to improve my skills and learn everything I can by exposing myself to every part of a game engine. I have been working on it during my free time for quite a while, motivated only by my passion for programming and problem-solving.

Written in C++/20, using OpenGL graphics API. Shaders are coded in GLSL and gameplay scripts in LUA. Scene files are saved in a modified JSON format.

More information and media can be found at the project page.

In-game demo video (YouTube link):

Praxis3D-demo

Map editor demo video (YouTube link):

Praxis3D-editor-demo

Main features:

  • Atmospheric light scattering
  • Automatic light exposure
  • Cascaded shadow mapping
  • Communication via observer-listener
  • Data-driven and modular engine design
  • Deferred renderer
  • Entity Component System
  • FXAA screen-space anti-aliasing
  • GUI system using ImGui
  • HBAO and SSAO ambient occlusion
  • HDR and tone-mapping
  • In-game scene editor
  • LUA scripting
  • Parallax occlusion mapping
  • Physically based bloom
  • Physically based rendering
  • Physics system using Bullet3
  • Sound system using FMOD
  • Stochastic texture sampling
  • Task-based multi-threading
  • Text editor
  • Texture inspector

Building:

Project is self-contained - all dependencies are included (with the exception of FMOD, as its license prohibits redistribution) and all settings within the Visual Studio project files are configured for an out of the box compilation in Visual Studio 2022. Windows OS and Visual Studio IDE only.

Releases:

If you want to try out running the engine, but don't want to build it yourself, the compiled binaries of some of the versions are going to be uploaded as releases. They will contain all the required DLLs and minimal assets to run a demo map.

Screenshots:

Praxis3D-1 Praxis3D-2 Praxis3D-3 Praxis3D-4 Praxis3D-5 Praxis3D-6 Praxis3D-7 Praxis3D-8 Praxis3D-9 Praxis3D-10

Dependencies:

Libraries used in this project:

Fonts:

Their individual licenses can be found in LICENSE.md file.

License:

The software is licensed under the MIT License:

Copyright © 2023 Paulius Akulavicius

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Contacts:

Ways to reach me can be found at my website.