Hello,
I’m trying to create simple fps shooter with destruction system.
I’m trying to replicate chaos destruction. I created GeometryCollection and GeometryCollectionActor (Wall on screens below.), then marked “Enable replication” option in Wall instance.
Then, to debug this, I created breakpoint on method UpdateRepData in GeometryCollectionComponent.cpp. Then I saw, that this function is never called, even if enable replication is set to true. (I assume that this method is responsible for replicate changes to other clients)
The solution to this is to set Component Replicate of “GeometryCollectionComponent” to true and uncheck “Enable abandon after level”, and all elements of partial chaos destruction will be replicated and solved.
I spent a while on this before concluding it’s the wrong layer to fix.
The thing that made it click: ask what the minimum amount of state both sides actually have to agree on. For most destruction it turns out to be tiny - which parts of the surface are gone. That replicates cheaply and deterministically, and both the visual mesh and the collision can be regenerated from it on every client, so they structurally can’t disagree.
Physics then only ever drives things nobody’s gameplay depends on. Chunks landing differently on two machines stops being a bug and becomes acceptable.
Worth saying the tradeoff is real, you give up arbitrary fracture shapes and take on the cost of rebuilding geometry at runtime. But those are ordinary engineering problems with solutions, unlike solver divergence.