Alex Dixon

Gamedev, graphics, open source. Shuffling bytes and swizzling vectors since 2004...

pmtech

Lightweight, multi-platform, data-oriented game engine.

pmtech is a data-oriented game engine written in C++, it is open source and available on GitHub. The engine is cross platform and supports Windows, macOS, iOS, Linux and WebAssembly/WebGL with Android under development. It also has multiple rendering backends with Direct3D11, OpenGL, Metal and Vulkan.

I have been using it as a framework to experiment and try different rendering techniques. It has a data-oriented entity component system and features such as live reloading of C++ code, shaders and render pipeline configs to enable rapid prototyping and development in realtime. There is a live video demo of the hot reloading capabilities on YouTube.

Below are some of the more advanced and interesting graphics techniques I have implemented, there are over 40 examples and unit tests in the repository to aid testing and cross platform compatibility.

Realtime Global Illumination

Realtime voxel cone traced GI with colour shadow map voxel volumes.

Area Lights

Linearly transformed cosines, animated ray marched primitives, mip-mapped roughness.

Subsurface Scattering

Sepearable sss configured with pmfx and ecs.

Signed Distance Field Shadows

Precalculated 3D signed distance field generated in pmtech editor, ray marched in real time.

Data Driven Renderer

Config driven renderer using jsn config files, 100 lights, switch between deferred, fwd and zprepass.

Renderer

Data Driven Post Processing

Config driven post processing using jsn configs, ray marched menger sponges, bloom, dof, crt, colour correction.

Post Processing

Stencil Shadow Volumes

Multi-pass lighting with depth pass stencil shadow volumes, easily configured with ecs and pmfx.

Entities

64k entities into 4 shadow maps at 60hz, showing the strengths of data-oriented ecs.

Vertex Stream Out / PBR

Vertex stream out, transform feedback meshes rendered many times, cook-torrence + oren-nayar BRDF.

Vertex Stream Out