Skip to content

Limitations & Roadmap

An honest list of what the renderer does not do yet, why, and what substitutes for it today - so you can plan scenes around the real capabilities rather than assumed ones.

What the renderer does not do

No occlusion culling

Awaken culls by frustum (the octree) and, optionally, by size-aware distance - but not by occlusion. There is no depth pre-pass, no hierarchical-Z buffer, and no from-region visibility set, so an object fully hidden behind a wall is still submitted if it is inside the frustum and within its draw distance.

For dense interiors this means overdraw the GPU has to reject via the depth test rather than skip up front. In practice, static batching (fewer, larger draws) and distance culling keep this manageable, but a large hidden crowd behind a facade is not free.

No runtime LOD / decimation / HLOD

There is no automatic level-of-detail: a mesh is drawn at full triangle count regardless of screen size, and there is no runtime decimation or hierarchical LOD (HLOD) that would merge distant clusters into cheaper proxy meshes.

The substitute is size-aware distance culling: instead of swapping a distant object for a cheaper mesh, Awaken simply stops drawing it once it is too small to matter (distance > radius × drawDistanceScale). This removes the cost of distant clutter - but it removes the object rather than degrading it, so at aggressive scales modular buildings can pop apart as their parts cross the threshold at slightly different distances.

Other current gaps

  • Directional shadows only - the sun casts shadows; point and spot lights do not. There are no point-light shadow cubemaps. See Shadows.
  • Up to 8 lights, no clustering - only the first 8 lights are shaded, with no per-object light culling or clustered/tiled light assignment. Keep simultaneously-visible lights modest. See PBR & Lighting.
  • Forward shading - no deferred/G-buffer path, so many overlapping lights are relatively costly and there is no screen-space reflection or deferred decal system.
  • Screen-space only AO - SSAO is the only ambient-occlusion source; there are no baked AO maps or GI. See Post-Processing.
  • No baked global illumination / lightmaps - indirect light is a single flat ambient term, not a GI solution.
  • Texture compression is BC only - desktop BC1/3/4/5 at upload; KTX2/Basis (BC7 quality, ASTC/ETC2 for mobile) is planned, not shipped. Devices without BC fall back to RGBA8. See Performance Systems.
  • Alpha ordering is per-object - transparents are sorted by the CPU octree order, not per-fragment; heavily overlapping transparents can still order imperfectly.

What is planned

The roadmap direction (see the engine's ship roadmap) includes closing these gaps over time:

  • Occlusion culling - precomputed from-region visibility / a GPU hierarchical-Z path to skip hidden geometry up front.
  • HLOD / runtime LOD - proper distant proxies so far geometry degrades in quality instead of vanishing, fixing the modular-building pop.
  • KTX2 / Basis textures - higher-quality and mobile-friendly compressed formats (ASTC/ETC2) beyond desktop BC.

These are aspirational - treat anything above marked "planned" as not present in the current build.

Designing around the gaps today

  • Lean on static batching and distance culling for open worlds rather than expecting occlusion culling.
  • Keep triangle counts reasonable at authoring time, since there is no runtime LOD to rescue a heavy mesh.
  • Use one sun plus a few point lights, not dozens of dynamic lights.
  • Author shadow-casting geometry as static where possible so it benefits from cached shadows.

See also

Awaken — browser-native WebGPU game engine.