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

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.