With ever mouse click I call Apply Radial Damage at the Destructible Mesh Component. First it works fractures get created and fall down, then all fractures disappear and not more new fractures get created, and then after some time it again works.
In the video you 6 of these meshes next to each other to form a nice wall, and the bug seems in some way to be related to the meshes touching each other.
And this is not related to the bug, but is there any way to achieve that after a big part of the wall is separated from the wall (as you see on the end of the video) that it does not just fall unrealistically but more like real stone, so that it breaks through the fall damage?
And additionally, is there any way to make the fractures which are lying on the ground are less intensive to compute, at the moment they still always simulate physics even if they just lie around and do nothing, I would like to disable physics on them completely and turn them into something like instances so that I can have hundred thousands of them with still having nice performance.
There is a hard coded limit of 2000 fractures per scene. This is not a bug, it’s just a hard coded limitation to help keep performance reasonable since Destructibles are handled on the CPU and not the GPU.
I have not exceeded 2000 fractures. The fractures already disappear after only 50 or 100 are falling down. Then some time no new fractures spawn and then they spawn again and I can have a lot more than at the beginning where they despawned. Please watch the video again.
So while I don’t like the 2000 fractures limit, this bug is not related to the limit.
So please don’t move this issue away from bug reports…
In my DM here the cell site count is set to 500 per DM. This means that there are a potential total of 4500 fractures which is 2500 over the hard coded limit of 2000.
In my DM I’ve set the support depth to 1 so that chunks stick together. So in this image you can see that I’ve hit three of the meshes to cause some damage. This changes the initial collision of 1 box to 500 for each fracture chunk. Even though they’ve not broken free, they have been damaged and now represent their own chunk collision. This way when they receive enough damage they will break free.
There are two depths that can be created in UE4. Depth 0 is the base mesh undamaged. As soon as a chunk breaks free the fractured mesh of Depth 1 replaced the original.
So in your case, since you have 6 DMs that are 500 fractures, you have a potential total of 3000 fractures which explains why chunks are disappearing.
Its very unfortunate that you have set the limit to 2000. I’ve tried the console commands from the link you posted but they don’t seem to change anything…
My game is a RTS where each player has a castle, a castle out of stone. And of course it looks awesome to destroy the castle, but I would need a lot of fractures.
Is there anything I can do so that a slightly hit DM with 500 fractures does not turn into 500 fractures? This really wastes a lot of fractures… I know someone in the forums made a new destructible mesh editor which enables to use much more support depths or something like this, would this help me?
You said you have hardcoded the limit of 2000 because destructibles are handled by the CPU. If I open my Task Manager while the game runs I don’t see any difference between doing nothing or destroying destructibles, so it does not seem to be a big problem. My CPU is quite old (AMD Phenom II) and I think it could handle a lot more fractures.
Stat unit says my game needs 9ms cpu time while doing nothing and 10ms cpu time while having 4 slightly hit DM with 2000 fractures. So I think I could safely have something like 50.000 fractures for high Graphic settings.
If it’s hard coded this means I can go into the source, change it and compile the source myself. Could you tell me where (in which source file) I would have to change the number?
I noticed that the chunks itself don’t really take any performance once they stopped moving. So I do nothing, my CPU time is something like 6ms. Then I shoot at many walls and many chunks/fractures fall down, during this time my CPU time goes up to something like 30ms. Then after ~30 seconds all the chunks fall down and there is a nice hill of ~1000 chunks and in the exact second the last chunk of the whole hill stopped moving the cpu time goes back to 6 or 7 ms. But if I again shoot at the wall and new chunks fall at the hill with the 1000 chunks from before, the new chunks are bumping into the old chunks so that all chunks move again and the cpu time is back up to something like 35ms.
If I could somehow say that a chunk which has stopped moving stops simulating physics there would not be any problem with having tens of thousands of chunks lying around in the world, because only moving chunks are affecting performance.
From my experience and setup this is not possible in the engine at the moment or ever.
The fractures waking back up is part of the physics body of the DM and it’s sleep family. By default this is set to normal which would allow the chunks to go to sleep more quickly and the other option is for sleep sensitive which would not allow them to sleep as easily.
Destructibles, while in a decent state in the engine, still have a lot of progress to make in some areas. As much as I use destructibles myself and know the system I do not recommend using them solely in this type of situation since there will be a hit to performance when 100s or 1000s of chunks are simulating when woken.
Using some of the other settings in the editor and using assets created with PhysXLab for more than a single depth layer can probably get some better results. You could setup the DM to use essential LOD depth that would define the depth that is essential for gameplay. Other layers could be timed that aren’t essential. Also using particle effects with GPU meshes that spawn on destruction is a good way to keep the fracture count down while still providing the illusion of a lot of destruction.
In the video the buildings being destroyed do not have thousands of fracture chunks left that are in the scene. There are only a pieces, maybe 15-20, if that. The rest of the effect is using particles with debris meshes and smoke.
What exactly do you mean with “particle effects with GPU meshes”? As far as I know GPU Particles can only be sprites, not meshes.
At the moment I have disabled the fractures completely, so they don’t fall down when the mesh gets damaged, the chunks just despawn. Instead I manually spawn 50 physics actors which are simulating physics:
And each of these physics actors checks his velocity every frame and once it’s below 10 and the location Z is below a certain value, it destroys itself and adds the mesh with it’s transform to an instanced static mesh component. So every “chunk” on the ground is all the same instanced static mesh component. I have not yet created a mesh for these actors, so I just used a cube.
It’s performance wise definitely better than having 100s of fracture chunks. Having 500 physics actors falling down is not a lot better than having 500 chunks falling down (maybe 30% better fps), but the important thing is that all the cubes on the ground will never again simulate physics. So I can have hundreds of thousands of them lying around, since it’s only one big instanced static mesh it’s no problem.
I have noticed a problem with my setup which seems to be a limitation by the engine…
At the moment I have disabled all the physics actors, so the only thing happening is that the destructible meshes are receiving damage and chunks are disappearing. This is what I want. My problem is the performance.
It all runs smooth, until I have between 42 and 46 DM in my level. Then suddenly every new DM I add is causing a severe framedrop. I have created a video to show it to you:
The wall I build is first only created with instances in an ISMC, and only after clicking (applying damage) they get converted to DMs. In the top left you see me printing out the amount of DM I have in the scene.
You see before I have like 40 DM every new one I add does not really affect performance, the cpu time stays at something between 9ms and 15ms. But after I exceed 42 DMs, every new DM I add causes the CPU time to increase to something like 70ms and the GPU time so something like 100ms for one or 2 frames.
Every DM has 200 fractures, so between 42 DM (8400 fractures) and 46 DM (9200 fractures) seems to be like an invisible border between “performance absolutely fine” and “unplayable”.