Skip to main content

Brakeza3D 0.26.8 released!

· 6 min read
Eduardo
Lead Developer @ Brakeza3D

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 at outerRadius
  • 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 all Sound3D sources 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 innerRadius to 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 from ComponentRender), exposable to Lua
  • MultiSelectionDemo.lua updated 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
  • ColliderGUI refactored 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​

FeatureDetail
Solo window toggleFocus a single dockable panel, hiding the rest
Layout restoreLayouts are saved and restored across sessions
forceReloadLayoutForce-rebuild the dock layout from the current preset
`Ctrl + `` shortcutQuick toggle between CODING and DEFAULT layouts
Snap camera viewsInsert (front), Home (top), Page Up (side) — snaps camera to selected object

UIManager Improvements​

  • bgColor arrays: per-widget background color now accepts RGBA arrays in JSON
  • cacheable: false flag — 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 — writeTextAtlasCache now 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, and setAmbienceVolume
  • Components API — UIManager widget system documented (9 methods)
  • 3D Objects — Image3DAnimation360 section 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:

PanelWhat it shows
Frame TimePer-frame ms plot with 120-frame rolling history
ComponentsPer-component pre/update/post timing breakdown with sparklines
Script DetailPer-Lua-script timing, toggled independently
CachesLive entry counts and memory usage for Image, Model, Animation, Script, and Scene caches
Frame BuffersAll active FBOs with their color/depth attachments and dimensions
OpenGL StatusCurrent GL state: bound program, bound FBO, active texture units, FBO/program switch counters per frame
Post-Processing ChainEnabled/disabled status and execution order of every scene shader in the chain
Thread PoolsActive tasks, pending tasks, pending callbacks, total processed, and a 120-frame throughput sparkline per pool
CollidersRuntime list of active physics bodies with mode, group, and AABB
System MemoryTotal 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 Image2D size/position regression
  • Fixed bad dynamic_cast in 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 ❤️