Edit: wow I didn’t realize I typed that much. Sorry for the word wall in advance.
All three portions of CSG operations are replicated to the client for their own reasons. I’ll also go into depth as to what each of them are for those who aren’t knowledgeable about the three types.
ChildData - This contains the undo history of the union. The reason it is replicated to the client, according to Adamintygum, is because in the future we may be able to compute PartOperations from the client while the game is running. This is also used to determine the union’s AssetId when it is uploaded to the site.
PhysicsData - This contains the data necessary to calculate how players should walk over/collide with the union, how other parts should collide with the union, and info for raycasting. This obviously has to be replicated to the client since the client is what controls character/part collisions and sometimes does raycasting.
MeshData - The other two aren’t exactly necessary some of the time, but this is necessary all of the time. This stores what the union looks like. The client needs to be able to render the union, so this obviously has to be replicated as well.
I believe Khanovich is the only person working on CSG now because Adamintygum no longer has his OBC nor admin badge, leading me to believe that he isn’t with us any longer. So with only one person working on CSG now, I don’t think CSG will be progressing at a fast pace anymore. Action will likely never take place on your/our pleas.
Regardless of whether it will ever change though, CSG certainly isn’t perfect. ChildData isn’t really even something we need in most cases. I don’t know how they attempted to compress it that would cause it to give broken unions when you tried to take apart a union, but I highly agree that I would prefer full functionality over small file sizes. Functionality should not be broken in attempt to compress the file size. Had we all known that taking apart unions would be destroyed for anything greater than a complex-ish, tier-5 union, I’d imagine a lot less people would have been pushing for smaller file sizes. The only reason I, and I’m sure generally everyone else, pushed for lower file sizes was because I never imagined taking apart unions would be broken in the process.
One thing to note though is the reason why ChildData is replicated to the client in the first place. Not all unions need to be modified through the client. Instead of just replicating the ChildData of every single union in the game, I’d imagine an optimal solution would be to only replicate the ChildData when the client tried to modify a union. It would be streamed in and then the operation would be completed when the ChildData was done downloading to the client. If a developer wished to preload in that ChildData they would, optimally, be able to just call :Union(part) with no other parts (assuming that’s what it’s called). The two birds with one stone of that being that until client union modification is possible, ChildData will not be replicated, and the second being that ChildData will only be replicated if needed. Then we can all shut up about compiling unions finally because the clients don’t have do download all of that data.
MeshData and PhysicsData are a touchy point. The whole reason unions are so dodgy right now is because of the PhysicsData – not because of the PhysicsData itself but because everything else has to be compatible with the PhysicsData. I can’t find the thread, but when I was blabbering on about why ROBLOX should have used an existing file format for CSG instead of making their own so there wouldn’t be all of these errors, one of the admins told me something along the lines that the reason MeshData doesn’t use a tried and tested format that already exists is because it has to work with PhysicsData. The reason we don’t have physics for meshes is because it’s pretty much impossible to effectively calculate physics for .obj,.mesh,etc files – MeshData has to work with it, so they had to create their own file format that worked with it. Brain may have misremembered some of those details, but pretty sure that’s the gist of it.
Not all unions need PhysicsData, and it’d certainly cut back on file size without it for those types of unions, but despite quite a number of people wishing to have the ability to disable CSG physics for things that would never need physics, Khanovich, in his infinite wisdom, has decided that isn’t an important enough reason for CSG physics to be toggleable, despite promising that would be a thing before it was implemented.
But yeah – those are pretty much all of the reasons CSG is having issues.