Dagon
The goal of this project is to create a modern, easy to use, extensible 3D game engine for D language. Dagon is based on OpenGL 4.0 core profile. It works on Windows and Linux.
The engine is still under development and lacks many important features. It is currently not recommended to use Dagon in production due to API instability. Follow the development on Trello to see the priority tasks.
Dagon uses modern graphics techniques and so requires a fairly powerful graphics card to run. Turing-based NVIDIA cards are recommended (although ray tracing support is not required). The engine is only desktop, support for mobile and web platforms is not planned.
If you like Dagon, support its development on Patreon or Liberapay. You can also make a one-time donation via NOWPayments. I appreciate any support. Thanks in advance!
Screenshots
Features
- Static and animated meshes, glTF, OBJ and IQM formats support
- Textures in PNG, JPG, DDS, HDR, TGA, BMP, GIF, PSD formats
- Deferred pipeline for opaque materials, forward pipeline for transparent materials and materials with custom shaders
- Physically based rendering (PBR)
- HDR rendering with Reinhard, Hable/Uncharted, Unreal, ACES and Filmic tonemapping operators
- HDRI environment maps. Preconvolved DDS cubemaps
- Directional lights with cascaded shadow mapping and volumetric scattering
- Spherical and tube area lights, spot lights
- Normal/parallax mapping, parallax occlusion mapping
- Deferred decals with normal mapping and PBR material properties
- Dynamic skydome with sun and day/night cycle
- Particle system with force fields. Blended particles, soft particles, shaded particles with normal map support, particle shadows
- Terrain rendering. Procedural terrain using OpenSimplex noise or any custom height field
- Water rendering
- Post-processing (FXAA, SSAO, DoF, lens distortion, motion blur, glow, color grading)
- UTF-8 text rendering using TTF fonts via Freetype
- GUI and 2D graphics extension based on Nuklear. 2D canvas framework that renders vector shapes
- GUI extension based on Dear ImGui
- Keyboard, mouse and joystick input. Input manager with abstract bindings and file-based configuration
- Unicode text input
- Ownership memory model
- Entity-component model
- Built-in camera logics for easy navigation: freeview and first person views
- Box container support for assets
- Physics using Newton Dynamics.
Planned in future:
- Screen-space reflections.
Getting Started
The recommended way to start using Dagon is creating a game template with dub init
. Create an empty directory for the project, cd to it and run the following:
dub init --type=dagon
dub build
Do not delete data/__internal
folder! It is used to store engine's internal data such as shaders and textures.
Runtime Dependencies
- SDL 2.0.14
- Freetype 2.8.1 (optional)
- Newton Dynamics 3.14 (optional)
- Nuklear (optional)
- ImGui (optional)
Runtime dependencies are automatically deployed on Windows. On other platforms, you will have to install them manually.
Nuklear should be compiled as a dynamic library:
- Install CMake
- Go to
extensions/nuklear/thirdparty/bindbc-nuklear-0.4.3/c/build
- Run
cmake ..
- Under Linux, run
make
andsudo make install
.libnuklear.so
will be installed to/usr/local/lib
- Under Windows, open
nuklear.vcxproj
in Visual Studio and buildALL_BUILD
project. Look fornuklear.dll
in theRelease
directory.
Documentation
See tutorials and corresponding examples.
License
Copyright (c) 2016-2022 Timur Gafarov, Rafał Ziemniewski, Mateusz Muszyński, dayllenger, Konstantin Menshikov, Björn Roberg, Isaac S., ijet. Distributed under the Boost Software License, Version 1.0 (see accompanying file COPYING or at http://www.boost.org/LICENSE_1_0.txt).
Sponsors
Jan Jurzitza (WebFreak), Daniel Laburthe, Rafał Ziemniewski, Kumar Sookram, Aleksandr Kovalev, Robert Georges, Rais Safiullin (SARFEX), Benas Cernevicius, Koichi Takio, Konstantin Menshikov.
Made with Dagon
- Electronvolt - work-in-progress first person puzzle based on Dagon
- dagon-sandbox - a test application that demonstrates some of Dagon's features
- Dagoban - a Sokoban clone
- dagon-shooter - a shooter game