The name of this repository is MiniRTS, because when I started out I wanted to make an RTS game, inspired by games like Total Annihilation, Supreme Commander: Forged Alliance, or Age of Empires (1, 2). But I got stuck in making a game engine! Which is what this repository is now focussed on.
MiniEngine is a work-in-progress rendering engine that I'm using as a personal research project. Using MiniEngine I explore common rendering techniques. My main interest here is how those techniques are combined, as many papers, examples, and tutorials showcase techniques in isolation, and it is not always obvious how multiple techniques should work together.
This contents of this repository is constantly subject to change, and I would not recommend using MiniEngine as an engine for your own projects. However, I do think my work here can be useful of you're trying to figure out how a technique works. MiniEngine currently includes the following effects.
MiniEngine is built around a rendering technique called deferred shading, also called deferred rendering. See
GBuffer.cs for a description of the buffers in use. Transparency is support and is achieved by rendering multiple passes. One pass for all opaque objects and then one pass for each group of non-overlapping transparent objects. This means that even multiple overlapping semi-transparent objects are supported. Using deferred shading means that all effects mentioned below are only computed in screen space, and are, at most, computed for every pixel on screen
MiniEngine also uses a pipelined approach, where every type of effect is a step in the pipeline towards the final image. This pipeline is combined with an Entity-Component System. Any object in the game is an entity, which has no properties. Factories are used to assign components to an entity. And system are used to process all components of a single type, being completely ignorant about what entity they belong to. This keeps every system, and component, extremely simple. And avoids large and complicated hierarchies.
All lights use a slightly modified version of the Phong reflection model. Models are contain a diffuse, normal, and specular texture, which is taken into account in the Phong shading model.
Light coming from one direction infinitely far away.
Point light source with attenuation.
Shadow casting light
A directional light source infinitely far away that uses Cascaded Shadow Mapping to cast shadows. The CSMs are filtered using PCF.
Both additive and transparent particles are supported. All transparent particles are rendered in one pass (with two steps) using Weighted, Blended Order-Independent Transparency.
Projects support projecting textures onto the environment. You can even use a texture that is generated everyframe using a separate render pipeline, to create portal like effects.
- Windows 10 64 bit*
- Visual Studio 2017 or higher
- MonoGame 3.7.1 (download here)
*Might also work on earlier versions of Windows, and since MiniEngine uses MonoGame it should, in theory, also work on Mac and Linux but I haven't tested it
Simply open the
.sln file, compile and run the
Editor project and you should be able to play around. Note that there are some pre-populated scenes that you can view, they are available via the