ZEngine is a professional-grade 3D engine built from scratch in C++20 targeting Vulkan,
developed by a team of contributors. The goal is a data-oriented, high-performance engine
capable of shipping singleplayer and multiplayer games on Windows, Linux, and macOS.
Design documents for all systems live in ZEngine/docs/ and ZEngine/docs/future-plan/.
Implementation follows the phased plan in ZEngine/docs/migration-plan.md.
Symbol
Meaning
[x]
Complete and production-quality
[ ]
Designed — ready to implement
[-]
Planned — not yet designed
Status
Feature
[x]
Custom arena and pool allocators (ArenaAllocator, PoolAllocator)
[x]
Custom containers (Array, String, UnorderedHashMap, HashSet)
[x]
Custom math library (Vec2/3/4, Mat2/3/4, Quaternion, full math utils)
[x]
Arena-backed scratch memory (ZGetScratch / ZReleaseScratch)
[x]
Intrusive reference counting (Ref<T>, WeakRef<T>)
[x]
Thread pool (ThreadPoolHelper)
[x]
Logging system (ZENGINE_CORE_INFO/WARN/ERROR/CRITICAL)
[ ]
Memory budget system — per-subsystem watermarks and limits
[ ]
Profiling and instrumentation (ZENGINE_PROFILE_SCOPE, Tracy integration)
[ ]
Crash handler — minidump, stack trace, user dialog, optional telemetry upload
Status
Feature
[ ]
Entity-Component System — sparse-set + archetype mask hybrid
[ ]
Generational entity handles — stale handle detection
[ ]
ComponentStorage<T> — dense arrays, O(1) add/remove/get
[ ]
ECS::Scene — top-level context, ForEach template query
[ ]
Query<Ts...> — cached mask, zero virtual dispatch
[ ]
Actor layer — Tier 1 objects (player, camera, lights) over ECS
[ ]
ActorManager — lifetime management, OnTick dispatch
[ ]
WorldCommands — deferred structural mutations from systems
[ ]
ECS component reflection — type names, field metadata for editor
Status
Feature
[ ]
DAG-based parallel system scheduler
[ ]
Conflict detection via read/write component masks
[ ]
OrderBefore(SystemID, SystemID) — explicit ordering edges
[ ]
Wave-based parallel dispatch on ThreadPoolHelper
[ ]
Cycle detection — asserts on invalid dependency graphs
[ ]
Runtime system enable/disable
Status
Feature
[x]
Main thread + render thread split
[x]
Delta time, vsync toggle
[ ]
Fixed timestep accumulator — physics-correct, deterministic simulation
[ ]
Frame rate cap — deterministic sleep + spin-wait
[ ]
Frame packet double-buffering (main thread to render thread)
[ ]
Transform interpolation — alpha blending between fixed steps
Status
Feature
[x]
Vulkan device abstraction (VulkanDevice)
[x]
Render graph with node/resource/pass compilation
[x]
Multi-threaded command buffer recording
[x]
Swapchain management and frame synchronisation
[x]
Vertex/index/transform/material storage buffers
[x]
Gizmo rendering (ImGuizmo)
[x]
ImGui integration
[ ]
Render resource manager — GPU lifetime, deferred deletion, hot-reload swaps
[ ]
Cascaded shadow maps — 4 cascades, directional light
[ ]
Spot and point light shadow maps
[ ]
Post-processing pipeline — bloom, ACES tone mapping, SSAO, FXAA, LUT color grading, vignette
[ ]
PBR material pipeline — roughness/metallic/normal/emissive
[ ]
Shader hot-reload — SPIR-V recompile without frame stall
[-]
LOD system — distance-based mesh switching
[-]
GPU frustum and occlusion culling
[-]
GPU-driven indirect rendering
[-]
Async compute
[-]
Deferred rendering path
[-]
KTX2 / BCn / ASTC texture compression
[-]
Motion blur
[-]
Ray-traced global illumination (long-term)
[-]
DirectX 12 / Metal RHI backends (long-term)
Status
Feature
[x]
Directional, point, and spot lights
[x]
GPU-packed light structs
[ ]
Shadow mapping for all three light types
[ ]
IBL / environment lighting — cubemap, irradiance, specular probes
[-]
Tile or cluster-based light culling
[-]
Lightmap baking
Status
Feature
[ ]
Skeletal animation — SkeletonComponent, AnimatorComponent, SkinningComponent
[ ]
AnimationSampleSystem — uniform 30fps clip sampling, pose buffer
[ ]
SkinningUploadSystem — global pose to GPU bone matrix upload
[ ]
AssimpImporter skeleton and clip extraction
[-]
Animation blend trees — multi-clip blending with weights
[-]
Animation state machine — transition graph
[-]
Root motion extraction
[-]
Animation events — frame-triggered callbacks
Status
Feature
[ ]
Jolt Physics integration (MIT, C++17)
[ ]
Rigid body dynamics — static, kinematic, dynamic
[ ]
Collider shapes — box, sphere, capsule, convex hull, triangle mesh
[ ]
Character controller (JPH::CharacterVirtual)
[ ]
Raycasting and shape casts
[ ]
Trigger volumes and contact events
[ ]
Collision layer filtering
Status
Feature
[ ]
miniaudio integration (public domain, single-header)
[ ]
Spatial 3D audio — distance attenuation, listener positioning
[ ]
AudioSourceComponent / AudioListenerComponent
[ ]
Per-frame audio command buffer — no audio calls during WorldTick
[ ]
Music streaming — PlayMusic, FadeMusic
[ ]
Supported formats: OGG Vorbis, WAV, MP3
Status
Feature
[ ]
INetTransport — pluggable transport interface (GNS, ENet, raw UDP)
[ ]
GNSTransport — GameNetworkingSockets (Steam relay, NAT punch-through, encryption)
[ ]
ENetTransport — lightweight transport, no Steam dependency
[ ]
UDPTransport — raw UDP for studios that own the full stack
[ ]
NetworkSession — peer registry, broadcast, tick
[ ]
Network clock — NTP-style two-way sync, median drift filter
[ ]
NetBitWriter / NetBitReader — bit-packing, compressed float, smallest-3 quaternion
[ ]
NetReplicationRegistry — component descriptor table, serialize/deserialize dispatch
[ ]
ReplicationSystem — authority-side dirty-flag delta compression
[ ]
ReplicationReceiveSystem — client-side apply and interpolate
[ ]
RollbackModule — GGPO-style rollback (snapshot ring buffer, resimulate)
[ ]
PredictionModule — client prediction with server correction reconciliation
[ ]
NetRPC — flat dispatch table, reliable remote procedure calls
[ ]
LagCompensator — server-side history rewind for hit detection
[ ]
NetRelevanceSystem — spatial grid, per-peer relevance sets, newly in/out diff
[ ]
Lobby and matchmaking — Steam P2P via Steamworks
[-]
BVH-based relevance (v2) — replaces spatial grid for non-uniform entity distributions
[-]
Snapshot interpolation for remote entities (v2) — eliminates jitter at packet loss
[-]
Visual rollback — rollback cosmetics over server-authoritative game state (v2)
[-]
QUIC transport backend via msquic (v2) — encrypted, multiplexed, no Steam dependency
Status
Feature
[ ]
VFSPath — normalized, immutable, no-alloc path value type
[ ]
IVFSFile, IVFSBackend, IVFSContext — clean I/O interfaces
[ ]
VFSDiskContext — passthrough to std::filesystem
[ ]
Mount table — priority-ordered backend resolution
[ ]
VFSDiskBackend and VFSZipBackend
[ ]
Async directory scanner — replaces directory_iterator on render thread
[ ]
VFSMemoryBackend — scratch and test store
[ ]
File watcher — inotify / FSEvents / RDCW, debounced events
[ ]
.meta sidecar files — stable UUIDs, SHA256 reimport detection
[ ]
Asset registry — multi-index store, dependency graph, hot-reload cascade
Status
Feature
[x]
Assimp mesh, material, texture import
[x]
Asset manager — UUID-to-handle map, pending queue
[ ]
Priority-driven async import coordinator
[ ]
Shader asset pipeline — GLSL to SPIR-V at import, UUID-keyed cache
[ ]
Cook pipeline — SHA256-incremental, parallel, headless CI
[ ]
VFSPakBackend — runtime mounting of cooked .pak archives
[ ]
AssimpImporter skeletal animation extraction
[ ]
SDF font atlas generation (msdf-atlas-gen)
[-]
GLTF 2.0 import
[-]
Asset streaming — incremental load at runtime
Status
Feature
[ ]
YAMLSceneSerializer — human-readable, VCS-diffable (editor builds)
[ ]
BinarySceneSerializer — zero-parse, memcpy-speed load (shipping)
[ ]
Stable UUID asset references — never file paths
[ ]
Component serializer registry — auto-discovers all component types
[ ]
Scene migration — versioned binary format with upgrade paths
[ ]
Atomic write — temp + rename, no partial-write corruption
Status
Feature
[x]
Editor UI (ImGui + ImGuizmo)
[ ]
In-game UI — immediate-mode API over arena-allocated retained tree
[ ]
Widget types — Label, Button, Image, ProgressBar, Panel
[ ]
Layout — stack, anchor, split, inset helpers
[ ]
Screen stack — UIScreenStack for menu navigation
[ ]
UI render pass — orthographic, no depth test, alpha blend
[ ]
Input routing — UI consumes mouse before game
Status
Feature
[ ]
MSDF SDF font atlas (msdf-atlas-gen, offline)
[ ]
FontManager — atlas load, glyph metric pool
[ ]
UTF-8 text layout — word wrap, kerning, tab stops
[ ]
Localization — CSV string tables, hot-swap language
[-]
CJK / large atlas support
[-]
Right-to-left text
Status
Feature
[ ]
C++ DLL hot-reload — ZGame_* C ABI, Actor factory pattern
[ ]
Engine version check — rebuild detection at load time
[ ]
System re-registration on reload — BeginRebuild / Commit cycle
[-]
Lua 5.4 scripting — LuaScriptComponent, per-entity coroutine
[-]
Behavior tree — flat node array, no virtual dispatch
Status
Feature
[ ]
Binary slot-based save (ZSavFile, FNV-32 checksum)
[ ]
GameSaveData — typed key-value store (int/float/bool/string/blob)
[ ]
Atomic write — temp + rename, corruption-safe
[ ]
Platform save directories (Windows AppData, XDG, macOS Library)
[ ]
Steam Cloud sync
[ ]
Settings save — separate file, not slot-based
Platform and Distribution
Status
Feature
[x]
Windows (GLFW + Vulkan)
[x]
macOS (GLFW + MoltenVK)
[x]
Linux (GLFW + Vulkan)
[ ]
Steam SDK integration — init, overlay, achievements, cloud saves
[ ]
CPack packaging — NSIS/ZIP (Windows), AppImage (Linux), DMG (macOS)
[ ]
CI/CD pipeline — GitHub Actions, 3 OS x 3 build types
[ ]
Crash handler — minidump (Windows), signal + backtrace (Linux/macOS)
[-]
Console platforms (long-term)
Panzerfaust — Project Launcher
Panzerfaust is the .NET/Avalonia project manager. Users open it before the editor.
It scaffolds project structure, writes projectConfig.json, and launches Obelisk.
Status
Feature
[x]
Project creation — scaffolds directory structure + projectConfig.json
[x]
Project list with open / delete
[x]
Launches Obelisk with --projectConfigFile + --launchEditor flags
[x]
Cross-platform (.NET 8, Avalonia, Windows / macOS / Linux)
[ ]
Project templates — Blank, 2D, 3D, Multiplayer starter
[ ]
Engine version selector — pick which ZEngine version to open project with
[ ]
Recent projects list with last-opened timestamp
[ ]
Project import — point at existing projectConfig.json
[ ]
Plugin marketplace browser — browse / install plugins before opening editor
Status
Feature
[x]
Scene hierarchy view
[x]
Asset browser
[x]
Transform gizmos
[x]
Shader editor with hot-reload
[ ]
Asset thumbnail generation
[ ]
In-editor physics visualization
[ ]
Component inspector with reflection (component-reflection.md)
[ ]
Entity selection — hierarchy click + viewport raycast (editor-entity-selection.md)
[ ]
Play / Pause / Stop — scene snapshot, system registration switching (editor-play-mode.md)
[ ]
Undo / Redo — command pattern, 8 command types, merge window (editor-undo-redo.md)
[-]
Profiler overlay
[-]
Console / debug command panel