Skip to content

Spatial Clustering 3.0 - #10

Merged
phevosccp merged 27 commits into
mainfrom
plugin-overhaul
Oct 16, 2026
Merged

phevosccp merged 27 commits into
mainfrom
plugin-overhaul

Conversation

@phevosccp

@phevosccp phevosccp commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Changelist

Rewrites the plug-in around a new clustering engine and renames it from ObjectCluster to Spatial Clustering 3.0.0 for Wwise 2025.1.

The old engine re-clustered positions every frame against a distance threshold. The new one groups inputs by direction from the listener into clusters that persist across frames, and crossfades inputs that change cluster.

  • Engine: new ClusterEngine in core/, plain C++17 using the Wwise plug-in allocator. It clusters mono and stereo 3D inputs, passes everything else through, and can exclude high-priority and near-field inputs. An optional output budget merges the closest clusters.
  • Parameters: Distance Threshold is replaced by Join Angle, Max Outputs, Exclude Priority Above, Near-Field Radius, Dwell Time, Crossfade Time, Distance Weight and Spread From Cluster Size. Each one has a help page in the property editor.
  • Build: engine in core/, Wwise project in wwise/. A single version file, a release script that packages a Wwise Launcher bundle, and a CMake build for the runtime and authoring plug-ins.
  • Testing: standalone tests, scenarios and a benchmark in core/tests that don't need the Wwise SDK, plus a browser viewer that compares scenarios with and without clustering. CI runs the tests on Windows, Linux and macOS.
  • Docs: rewritten README, plus a contributing guide and issue and PR templates.

Testing
Tested for EVE Frontier

Clustering bypassed

before

Clustering enabled

after

Upgrading from 2.0.0 or earlier

  • The plug-in IDs are unchanged, so uninstall the old version first. Parameters are new, so check every effect's settings.
  • Games link SpatialClusteringFX.lib and include SpatialClusteringFXFactory.h, or ship SpatialClustering.dll. Then regenerate SoundBanks.

phevosccp and others added 27 commits October 10, 2026 11:39
…direction from the listener

- inputs join a cluster within the join angle and leave it beyond the leave angle after the dwell time
- moves between clusters are crossfaded through per-input gain ramps
- nearby clusters merge after the dwell time, and the cheapest pairs merge when outputs exceed the budget
- cluster positions are loudness weighted, inputs near the listener or above a priority are never merged
- all memory comes from one block through a ClusterAllocator, nothing is allocated per frame
…terEngine

- cluster_harness test runs the assertion suite and is registered with CTest
- cluster_harness bench times Update for 64 to 1024 inputs
- cluster_harness scenario prints or writes per-frame results for seeded scenes
- builds with CMake and needs no Wwise SDK
- mono 3D inputs are clustered, multichannel and partly 2D inputs pass through untouched
- cluster outputs are mono and mixed with the engine's gain ramps, outputs are created in one batch and fetched once per frame
- clusters carry the highest member priority, a spread from their angular size and the loudest member's custom metadata
- new parameters: join angle, leave ratio, dwell time, crossfade time, max outputs, near-field radius, distance weight, exclude priority above, spread from size and loudness weighting
- the parameter block is validated, and the plugin posts Capture Log messages for a missing object bus, failed output creation, memory and the output budget
- the authoring plugin writes every parameter and uses the Wwise 2025 macro names
- remove SpatialClusterer, Utilities and KMeansTest
- how the clustering works, the parameters with their ranges and defaults, and bus setup
- profiling tips, the Capture Log messages and building for Wwise 2025
- how to run the harness without a game
…bject limit, priority threshold, proximity radius, hold time, distance sensitivity and cluster spread
@phevosccp
phevosccp marked this pull request as ready for review October 16, 2026 15:08

@ccp-zoetrope ccp-zoetrope left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@phevosccp
phevosccp merged commit 89566b6 into main Oct 16, 2026
@phevosccp
phevosccp deleted the plugin-overhaul branch October 16, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants