Hi there
I've got a simulation where we create Obi Cloth balloons which move around the screen. However, whenever we spawn a new bubble and use GeneratePhysicRepresentationForMesh we're getting significant slow down.
For reference we call:
Code:
yield return balloon.GetComponent<ObiCloth>().GeneratePhysicRepresentationForMesh();
inside the spawn coroutine.
I've tried threading the code, but GeneratePhysicRepresentationForMesh needs to be on the main thread. Is there a way it is meant to be used which means it has a minimal performance hit?
- BetaJester
(09-09-2019, 07:45 AM)BetaJester Wrote: [ -> ]Hi there
I've got a simulation where we create Obi Cloth balloons which move around the screen. However, whenever we spawn a new bubble and use GeneratePhysicRepresentationForMesh we're getting significant slow down.
For reference we call:
Code:
yield return balloon.GetComponent<ObiCloth>().GeneratePhysicRepresentationForMesh();
inside the spawn coroutine.
I've tried threading the code, but GeneratePhysicRepresentationForMesh needs to be on the main thread. Is there a way it is meant to be used which means it has a minimal performance hit?
- BetaJester
Hi!
GeneratePhysicRepresentationForMesh is a coroutine that returns a completion percentage. As such, at runtime it is supposed to be used together with some sort of "loading bar" or UI feedback. It is a
very resource intensive process that can take quite a while to get done.
If you want to create balloons at runtime, best approach is to either have them pre-generated as prefabs, or if you need to use procedural generation, generate one (or several variations) at the beginning of your scene, then instantiate copies of them.
(09-09-2019, 07:52 AM)josemendez Wrote: [ -> ]Hi!
GeneratePhysicRepresentationForMesh is a coroutine that returns a completion percentage. As such, at runtime it is supposed to be used together with some sort of "loading bar" or UI feedback. It is a very resource intensive process that can take quite a while to get done.
If you want to create balloons at runtime, best approach is to either have them pre-generated as prefabs, or if you need to use procedural generation, generate one (or several variations) at the beginning of your scene, then instantiate copies of them.
Right okay
If I create an object in the Scene view, initialise the Obi Cloth, and then create it as a prefab, if I instantiate the prefab at runtime, will the physics work if I don't call GeneratePhysicRepresentationForMesh?
(09-09-2019, 10:52 AM)BetaJester Wrote: [ -> ]Right okay
If I create an object in the Scene view, initialise the Obi Cloth, and then create it as a prefab, if I instantiate the prefab at runtime, will the physics work if I don't call GeneratePhysicRepresentationForMesh?
Of course, that's what prefabs are meant to be used for. What GeneratePhysicRepresentationForMesh() does is re-create the entire particle-and-constraint representation of a mesh from scratch. This is very expensive and generally not supposed to be done at runtime unless you're generating entirely procedural actors.
A prefab already contains all this information in serialized form. So you simply instantiate it, assign it to a solver, and you're done. Excerpt from the manual:
Quote:Most of the time actors can be created in the editor, turned into a prefab and instantiated at runtime. However there are situations where creating actors entirely trough code is needed (e.g. procedural level generation). [...goes on to explain how this is done...]
http://obi.virtualmethodstudio.com/tutor...ctors.html
(09-09-2019, 11:41 AM)josemendez Wrote: [ -> ]Of course, that's what prefabs are meant to be used for. What GeneratePhysicRepresentationForMesh() does is re-create the entire particle-and-constraint representation of a mesh from scratch. This is very expensive and generally not supposed to be done at runtime unless you're generating entirely procedural actors.
A prefab already contains all this information in serialized form. So you simply instantiate it, assign it to a solver, and you're done. Excerpt from the manual:
http://obi.virtualmethodstudio.com/tutor...ctors.html
Great stuff, I was trying to do this with in-scene prototypes, but that was causing an issue where the physics wouldn't work. I will try this and report back