Sector's Edge Game Engine
During the past year I've made exciting advancements with raytraced audio, rendering systems, unsynchronised multithreading and much more.
Over the next few months I will be writing articles on each of the topics below, which will feature fancy diagrams, GIFs and GitHub repositories. I look forward to sharing what I've learned!
- Experimentation with raytraced audio, which sends rays outwards from the player to determine reverb properties and muffles occluded sounds
- Moving to unmanaged memory using the new NativeMemory APIs available in .NET 6.0 for performance-critical areas like voxel storage and meshing, particle systems, texture loading and recolouring, minimap data and storage for skeletal animation systems.
- Changing to persistent-mapped buffers for triple-buffered particle instance data with OpenGL 4.4, which removes sync points between the CPU and GPU
- Changing to an unsynchronised threading system, where the main thread no longer waits for particle/UI/audio/meshing threads to complete before continuing. This allows particles to update at lower frame rates while the game continues to update and render at 144 FPS
- Double-buffering in-game HUD bitmaps and deferring UI rendering to another thread using SkiaSharp and RichTextKit
- Optimised floating voxel checks for smooth destruction
- Lag compensation systems and packet delay detection for accurate hit-registration when facing unstable network connections
- Removing all the loading screens - once the game starts up, you'll never be locked in to a loading screen again
- Memory-efficient in-place multithreaded map reloading
- Frosted/distorted glass effects combined with transparent smoke and glass. I had to use a few tricks with framebuffers in OpenGL to get this to work but it all works nicely
- Reliable sub-millisecond shooting timers for high-RPM weapons, to ensure that the correct amount of bullets are fired when playing at variable frame rates
- Simulating entities on the client and syncing them with the server later on, which gives high-ping players better feedback when throwing grenades or using projectile-based weapons
- Stabilised cascaded shadow maps (the bane of my existence)
- Voxel meshing, which will expand on my previous voxel meshing articles
- Multi-perspective rendering with a single postprocessing pass
That's all from me - some of these features were implemented in the Sector's Edge Beta a few months ago and since then I completely forgot about them, which goes to show that good design really is invisible.