Model optimisation: merging objects with shared surfaces into a single shell


I have 10,000 objects which never intersect, but do share surfaces. I would like to create an optimised version of this group of objects, a shell where the shared surfaces are removed.

The difficult thing about this is the unite boolean is unreliable in this situation, because the objects do not necessarily intersect because of rounding, meaning it is very inconsistent in Blender and Houdini, given my attempts.

Edit 1: Decided boolean in Houdini is the correct solution, just need to ensure all the objects are perfectly snapped in Blender before exporting. On a scale of tedium from 1 to 10, it’s 9.9999999.