Brakeza3D 0.26.8 released!
Brakeza3D 0.26.8 is here! This release is packed with major new features: a full positional audio system, multi-scene support, video playback, a new Swarm entity, multi-selection across editor and scripting, and a large batch of rendering, physics, and editor improvements.
Download for Linux and Windows:
✨ What's New
Sound3D — Positional Audio System
A brand-new Sound3D scene object brings distance-based volume attenuation to the engine. Place ambient sounds anywhere in the world and let the engine handle volume falloff automatically based on the camera's distance.
- Full inner/outer radius model: full volume inside
innerRadius, linear fade to silence atouterRadius - Can be placed in the editor, saved in scene files, or created from Lua with
ObjectFactory.Sound3D() - Global ambience volume —
Components:Sound():setAmbienceVolume(percent)scales allSound3Dsources simultaneously, perfect for ducking world sounds during menus or cutscenes - Zone music crossfade: overlapping outer radii produce natural transitions with zero scripting
- Background music mode: set
innerRadiusto a very large value for a non-positional track
local snd = ObjectFactory.Sound3D(
"../assets/sounds/forest_ambient.wav",
Vertex3D.new(0, 0, 0), 20, 80, 100
)
snd:setSoundLoop(true)
Brakeza:addObject3D(snd, "forest_ambient")
Multi-Scene System
Scenes can now be loaded, shown, and hidden independently at runtime. Multiple scenes can coexist and be toggled without losing their state.
Brakeza:loadScene(path)/Brakeza:showScene(name)/Brakeza:hideScene(name)- Scene shader chains are properly saved and restored when a scene is hidden and re-shown — shaders that were disabled before hiding stay disabled on restore
- Enables interior/exterior streaming: load interior scene, hide exterior, restore on exit
Video Player in Image2D
Image2D objects can now play back video files directly inside the engine. Use the editor or Lua to assign a video source and control playback.
Swarm Entity
A new Swarm object type for managing large groups of simple elements (particles, foliage, crowds) as a single scene node. Registered in the full serialization pipeline with editor inspector support.
Multi-Selection — Editor & Scripting
Select multiple objects simultaneously in the viewport and operate on them as a group.
- Ctrl + Left Click — toggle an object into/out of the current selection group
- Ctrl + Left Drag — rectangle-select all objects inside the drawn area
- Full scripting access via the new
SelectionManager(extracted fromComponentRender), exposable to Lua MultiSelectionDemo.luaupdated with working examples
Rendering — Blob Shadows & Ground Circles
Two new lightweight render primitives for real-time ground projection effects:
- Blob shadows — circular soft-shadow decals projected onto the ground beneath objects
- Ground circles — configurable radius/color rings for selection indicators, AoE zones, and UI feedback
Both are registered as GUI addons and fully scriptable from Lua.
Collider System Improvements
- Debug draw — visualize collision shapes in the viewport at runtime
- Contact points — query per-frame collision contact data from Lua
resetColliderRotation()— snap a body's orientation back to identity without repositioning- Ghost body fix — ghost objects no longer interfere with dynamic simulation incorrectly
ColliderGUIrefactored into its own standalone panel
Shadow Pass Optimization
The shadow pass now skips meshes and scene regions that cannot cast shadows into the current light frustum, reducing GPU draw calls significantly in larger scenes.
Editor Improvements
| Feature | Detail |
|---|---|
| Solo window toggle | Focus a single dockable panel, hiding the rest |
| Layout restore | Layouts are saved and restored across sessions |
forceReloadLayout | Force-rebuild the dock layout from the current preset |
| `Ctrl + `` shortcut | Quick toggle between CODING and DEFAULT layouts |
| Snap camera views | Insert (front), Home (top), Page Up (side) — snaps camera to selected object |
UIManager Improvements
bgColorarrays: per-widget background color now accepts RGBA arrays in JSONcacheable: falseflag — bypass FBO caching for widgets that update position or alpha every frame (e.g. world-space unit overlays)- New scripting methods exposed:
setWidgetAlpha,setWidgetPosition,showWidget,hideWidget, and more
TextWriter
- Tint color —
writeTextAtlasCachenow accepts a tint color parameter, enabling colored cached text without recreating the atlas flushTextBatch()flushes the colored glyph batch correctly
Sound System — Per-Channel Control
New Lua API for fine-grained channel control:
-- Pitch/frequency (engine RPM simulation, Doppler)
Components:Sound():setChannelFrequency(channel, freq)
-- Per-channel volume (independent of global setSoundsVolume)
Components:Sound():setChannelVolume(channel, vol)
-- 3D spatialization via angle + distance
Components:Sound():setChannelPosition(channel, angle, distance)
-- Query channel state
Components:Sound():isChannelPlaying(channel)
Components:Sound():isSoundPlaying("label")
Tools
fbx_bounds.py— Python tool to extract vertex bounds from FBX files, useful for computing exact mesh positions after Blender export
Documentation
Major documentation additions:
- Sound3D — new dedicated API page covering positional audio, zone crossfade, ambience volume, and Lua methods
- Sound System — expanded with per-channel control,
isSoundPlaying, andsetAmbienceVolume - Components API — UIManager widget system documented (9 methods)
- 3D Objects —
Image3DAnimation360section added - Shaders System — pipeline order and execution steps documented
- Keyboard Shortcuts — snap camera keys (Insert / Home / Page Up) added
Profiler — Expanded Diagnostics
The built-in ImGui profiler gained a large set of new panels, turning it into a full runtime diagnostics tool:
| Panel | What it shows |
|---|---|
| Frame Time | Per-frame ms plot with 120-frame rolling history |
| Components | Per-component pre/update/post timing breakdown with sparklines |
| Script Detail | Per-Lua-script timing, toggled independently |
| Caches | Live entry counts and memory usage for Image, Model, Animation, Script, and Scene caches |
| Frame Buffers | All active FBOs with their color/depth attachments and dimensions |
| OpenGL Status | Current GL state: bound program, bound FBO, active texture units, FBO/program switch counters per frame |
| Post-Processing Chain | Enabled/disabled status and execution order of every scene shader in the chain |
| Thread Pools | Active tasks, pending tasks, pending callbacks, total processed, and a 120-frame throughput sparkline per pool |
| Colliders | Runtime list of active physics bodies with mode, group, and AABB |
| System Memory | Total and free RAM on Windows, Linux, and macOS via native OS APIs |
FBO and GL program switch counters are incremented at the call site throughout the render pipeline, giving exact per-frame context switch counts with no estimation.
Bug Fixes & Maintenance
- Fixed GCC warnings in debug mode across multiple translation units
- Fixed X11 + NVIDIA OpenGL window creation on Linux
- Fixed
Image2Dsize/position regression - Fixed bad
dynamic_castin core components - Removed RTS-specific demo widgets from engine examples, keeping only generic ones
- Debian build setup scripts updated
This release marks a significant step forward in audio, scene management, and editor workflow. Thanks for testing Brakeza3D and sharing feedback ❤️
