Hi Anthony,
Thanks for looking into it and getting back on this.
To give you more details, we actually found out about this issue when rebuilding point clouds containing some instances that were using negative scales. Rebuilding a point cloud is done with a scatterer that uses extract properties for the rotation and scale whose values are extracted from the points matrix, while the position is driven by the points position of the particle container that is connected to the geometry support of the scatterer.
This is how we noticed that some of the instances were not matching basically.
If the extracted scale vector has 2 negative values, you can swap the sign of both negative values and compensate by adding a rotation of 180° on the axis that was already positive.
I did read about this and it seems to be automatically handled from my testing actually. In fact, if one or three axes use a negative scale, the matrix returns a negative scale vector (-1, -1, -1) and a negative determinant, while if two axes use a negative scale, the matrix returns a positive scale vector (1, 1, 1) and a positive determinant, and just compensate with a 180 degree rotation, and it does match, so no fix is needed in that case.
If there are 3 negative values, you could swap 2 of them, but choosing which one remains negative is arbitrary.
While investigating the issue and doing some tests, we actually realized that even though the instances of the baked scatterer were not matching with the original instances that were using negative scales, recreating them with a combiner by extracting the transform from the scatterer instance matrix did match after all.
With that in mind, and while exploring this a bit further, my plan would be to check if the determinant of an instance is negative when rebuilding the point cloud, and if so, extract the transform of the corresponding instance in the baked scatterer to eventually re-inject it in the rotation and scale extract properties that are connected to the scatterer to fix the instance transform, which may work and match with the original instance in the end.
This is something I'll continue to experiment but maybe you have other solutions to suggest as well.
Thanks,
Jeremy