Please note I have only been testing Linux Vulkan RADV in my repo, not sure if any of this runs on other platforms/renderers/drivers.
Added a large set of features focused on large-world support, procedural terrain, and streaming.
Titan Editor can now import and edit blended worlds that combine procedural terrain with hand-authored tiled areas. A 250 km x 250 km procedural world is under 100 MB on disk, compared to over 3 TB for an equivalent fully tiled world at the same resolution.
The engine now supports 64-bit large worlds through rebasing and tile-relative storage. Object rendering and PhysX simulation remain accurate and stable at world coordinates like 250,000,250,000 , just as they are near 0,0.
Azgaar (
https://azgaar.github.io/Fantasy-Map-Generator/) procedural map import now supports biome data, lake generation, river carving, and water mesh generation. Runtime procedural terrain also supports ring-LOD generation so distant terrain can stream and render efficiently.
Titan Editor fully supports 64-bit worlds by rebasing the editor view and storing all relevant world data relative to tiles.
Portal support was also added. Portals are placed through waypoints in Titan Editor and allow real-time movement to disconnected areas of the large world without a loading screen. As the player approaches a portal, the engine pre-streams tiled areas and generates procedural areas on the destination side so the transition is ready before crossing.
AI Generated repo review of engine changes:
1. Linux-native shader toolchain + EERegen
- Vendored DXC v1.9.2602 on Linux, with SPIRV-Cross built from source. Vulkan and GL shader paks can now be regenerated natively on Linux without a Windows machine.
- EERegen: a single headless tool that performs shader compilation and Engine.pak / Editor.pak rebundling in one process. This replaces the old two-tool chain of shader-compile build + Engine Builder GUI.
- Added a content-hash shader variant cache. Warm regen time dropped from roughly 40 minutes to about 30 seconds. Editing one HLSL file now rebuilds only its affected variants.
- Fixed a DXC RelaxedPrecision / OpPhi issue that was causing 544 compile failures in Motion Blur and Temporal shaders.
2. Compiler bug fixed: -fshort-wchar removed
Clang's loop-idiom recognizer was rewriting the engine's string-length loop into a glibc wcslen call built for 32-bit wchar_t. This caused path truncation and memory over-reads at -O2.
The -fshort-wchar flag was removed, which fixed the issue.
3. Vulkan backend fixes and improvements
Fixed
15 tracked Vulkan issues, including:
- Device loss from cube-texture views bound to 2D descriptor slots.
- Crashes from in-flight buffer/image destruction, fixed with a new deferred-destruction system.
- Scene corruption under heavy draw load caused by per-draw UBO ring wrapping. This was replaced with a byte-budget ring.
- Eye-adaptation black frame caused by cross-stage image slot collisions.
- Per-draw descriptor allocation was O(draws). Switched to dynamic UBO offsets.
- Terrain “sparkle” caused by the BRDF LUT being deleted on every render-target reset.
- Added per-pipeline descriptor sets.
- Added a disk-persistent pipeline cache.
- Reduced sync-validation errors from 10 to 0.
- Added env-gated abort-on-error debugging tools.
4. Upstream Esenthel sync
Merged upstream main back in, regenerated affected shader paks, and fixed a .gitattributes issue that was causing bogus whole-file merge conflicts.
5. Large World: 64-bit floating origin
- Added runtime floating-origin support in Game::World.
- Added camera rebase support.
- Added tile-relative area storage.
- Added water, decal, and navmesh support for large worlds.
- Added local-frame pathfinding wrappers.
- Added editor support for large worlds, including jitter-free terrain editing and object placement far from origin.
- Updated undo/redo so it survives rebasing.
- Added world-coordinate display panels.
- Added tile-relative game export.
- Added an area relocate/convert tool for existing worlds.
6. Procedural terrain + Azgaar world import
- Titan Editor supports Import of Azgaar Maps and seamless blending of Procedural+Tiled areas
- Added runtime streamed procedural terrain generation.
- Generation is multithreaded and prioritizes areas nearest the camera.
- Added a far-LOD geo-clipmap backdrop ring so terrain reaches the horizon.
- Added climate-driven biomes with per-biome terrain shapes: flat, rolling, rugged, and dunes.
- Added three blended ground materials to reduce visible tiling.
- Added terrain multi-texturing by slope and altitude.
- Added object scatter for trees and rocks, including static collision.
- Added sea level and ocean support.
- Added rivers carved from Azgaar map data with mitred winding channels.
- Added above-sea-level lake basins.
- Water and terrain now render at full detail to the horizon.
- Added Azgaar Fantasy Map Generator import. Heightmap and biome control maps drive the generated world.
- Added an in-game minimap using M, with player position, facing arrow, and click-to-teleport.
- Added editor tools: Procedural Terrain dialog, Biome Editor, and Rivers & Lakes dialog.
- Procedural config is included with the exported world.
- Added per-area navmesh tiles for generated terrain.
- Added a tutorial: “Procedural World”. 250 km x 250 km Azgaar Map Demo.
7. Portals
- Added portal authoring in the editor.
- Added runtime portal crossing.
- Added a secondary-streaming-foci API so the destination side can pre-stream before the player crosses.
- Added tutorial “21 - Portals” with a sample world.
- Portal crossing is seamless, with no flash.
- The streaming ring on the departed side is preserved during crossing.
- Added a streaming-status HUD.
Honorable mentions
- RmlUi improvements: icon: texture loading from the engine image cache, plus same-texture draw batching.
- Fixed stale input-action state on popped or masked input maps.
- Added memory hardening from ASAN runs, including out-of-bounds guards and completion of the global new/delete family.
- Made sizeof(Image) renderer-independent.
Source is in this fork:
https://github.com/DrewGilpin/EsenthelEngine