@@ -117,6 +117,21 @@ void ObjectClusterFX::Execute(
117117 UpdateClusterPositions (inObjects);
118118}
119119
120+ void ObjectClusterFX::ForceReclustering ()
121+ {
122+ m_clusters.clear ();
123+
124+ auto it = m_mapInObjsToOutObjs.Begin ();
125+ while (it != m_mapInObjsToOutObjs.End ()) {
126+ if ((*it).pUserData && (*it).pUserData ->isClustered ) {
127+ (*it).pUserData ->isClustered = false ;
128+ }
129+ ++it;
130+ }
131+
132+ m_kmeans->reset ();
133+ }
134+
120135void ObjectClusterFX::PrepareAudioObjects (const AkAudioObjects& inObjects)
121136{
122137 FeedPositionsToKMeans (inObjects);
@@ -369,28 +384,29 @@ void ObjectClusterFX::MixToCluster(const AkAudioObject* inObject, AkAudioBuffer*
369384 AKPLATFORM::AkMemCpy (pGeneratedObject->volumeMatrix , currentVolumes, uTransmixSize);
370385}
371386
372- void ObjectClusterFX::FeedPositionsToKMeans (const AkAudioObjects& inObjects)
373- {
374-
387+ void ObjectClusterFX::FeedPositionsToKMeans (const AkAudioObjects& inObjects) {
388+ // Check for threshold change before normal processing
375389 if (m_lastDistanceThreshold != m_pParams->RTPC .distanceThreshold ) {
376390 m_kmeans->setDistanceThreshold (m_pParams->RTPC .distanceThreshold );
377391 m_lastDistanceThreshold = m_pParams->RTPC .distanceThreshold ;
392+ ForceReclustering ();
378393 }
379394
380395 std::vector<ObjectPosition> objectPositions;
381396 objectPositions.reserve (inObjects.uNumObjects );
382397
398+ // Check if objects should be clustered based on spatialization mode
383399 for (AkUInt32 i = 0 ; i < inObjects.uNumObjects ; ++i) {
384400 AkAudioObject* inobj = inObjects.ppObjects [i];
385401
386- // Check if this is either position-only or position+orientation
387402 bool shouldCluster = (inobj->positioning .behavioral .spatMode == AK_SpatializationMode_PositionOnly ||
388403 inobj->positioning .behavioral .spatMode == AK_SpatializationMode_PositionAndOrientation);
389404
390405 if (shouldCluster) {
391406 objectPositions.push_back ({ inobj->positioning .threeD .xform .Position (), inobj->key });
392407 }
393408 }
409+
394410 // Perform clustering only if there are objects
395411 m_clusters.clear ();
396412 if (!objectPositions.empty ()) {
0 commit comments