15-04-2020, 05:54 PM
(This post was last modified: 16-04-2020, 10:37 PM by facaelectrica.)
@Jose Thank you for the quick reply which actually raises a few more questions!
Here is an overview of my setup, to make sure I'm using the plugin correctly.
Every time a character gets shot or stabbed, I'm creating a blood emitter that fires once.
The particles interact with the environment and NOT the characters.
Once the blood has finished pooling, it will no longer interact with the surface and stays on the scene until the level is reloaded.
Example of what I have currently:
https://www.dropbox.com/s/m6w9ve2t3eorkc...6.mp4?dl=0
In terms of setup, I'm using a single ObiSolver and I parent each ObiEmitter that I instance (no matter what character is using it).
I also instance a transform parented to the character (from where I want the blood to spurt from) that updates the ObiEmitter transform position and rotation so I don't need to have the emitter or solver parented to the character.
Each emitter fires 1000 particles, and unless I disable the ObiEmitter component after they have stopped moving, I see a big impact in the framerate once I have two emitters. But if I disable the ObjEmitter the framerate stays super stable.
1. Is this a good setup overall? I like the idea of a single solver managing all the Emitters but you seem to suggest I should have one Solver per Emitter?
2. I couldn't figure out a way to have the emitter parented to the actually skinned character. If I parent the ObjSolver to a character the simulation is all messed up. It looks like the solver has to be static? That is why I'm manually updating the ObjEmitter position and rotation based on a gameObject parented to the skinned character in Update(), is there a better way?
As for my initial issue:
3. You're suggesting that I disable the solver, but this would mean that I have to create one solver per emitter, right? But it all seems to work when I just disable the ObjEmitter component. Could I have the solver give me information on a single Emitter?
If moving forward with your proposal, could you guide me on how I would go about "iterate over all particles, checking if half of the squared magnitude of their velocity is below the sleep threshold."? Is there a specific method I should be calling?
And like you mentioned, once stopped, I never re-enable the particles, only once the scene has reset and we do it all over again.
Thanks for your time. Also if you have other thoughts on how to deal with the scenario I have please let me know. I just set it up so I'm happy to make it more friendly for your system.
P.S. For the fluid rendering I'm using the ObiSimpleFluidRender in the MainCam, with the simple fluid material, is that ok? The manual only mentions the other more complex component (ObiFuidRenderer) for rendering and I prefer the look of this one (also wondering if it's better performance wise).
Here is an overview of my setup, to make sure I'm using the plugin correctly.
Every time a character gets shot or stabbed, I'm creating a blood emitter that fires once.
The particles interact with the environment and NOT the characters.
Once the blood has finished pooling, it will no longer interact with the surface and stays on the scene until the level is reloaded.
Example of what I have currently:
https://www.dropbox.com/s/m6w9ve2t3eorkc...6.mp4?dl=0
In terms of setup, I'm using a single ObiSolver and I parent each ObiEmitter that I instance (no matter what character is using it).
I also instance a transform parented to the character (from where I want the blood to spurt from) that updates the ObiEmitter transform position and rotation so I don't need to have the emitter or solver parented to the character.
Each emitter fires 1000 particles, and unless I disable the ObiEmitter component after they have stopped moving, I see a big impact in the framerate once I have two emitters. But if I disable the ObjEmitter the framerate stays super stable.
1. Is this a good setup overall? I like the idea of a single solver managing all the Emitters but you seem to suggest I should have one Solver per Emitter?
2. I couldn't figure out a way to have the emitter parented to the actually skinned character. If I parent the ObjSolver to a character the simulation is all messed up. It looks like the solver has to be static? That is why I'm manually updating the ObjEmitter position and rotation based on a gameObject parented to the skinned character in Update(), is there a better way?
As for my initial issue:
3. You're suggesting that I disable the solver, but this would mean that I have to create one solver per emitter, right? But it all seems to work when I just disable the ObjEmitter component. Could I have the solver give me information on a single Emitter?
If moving forward with your proposal, could you guide me on how I would go about "iterate over all particles, checking if half of the squared magnitude of their velocity is below the sleep threshold."? Is there a specific method I should be calling?
And like you mentioned, once stopped, I never re-enable the particles, only once the scene has reset and we do it all over again.
Thanks for your time. Also if you have other thoughts on how to deal with the scenario I have please let me know. I just set it up so I'm happy to make it more friendly for your system.
P.S. For the fluid rendering I'm using the ObiSimpleFluidRender in the MainCam, with the simple fluid material, is that ok? The manual only mentions the other more complex component (ObiFuidRenderer) for rendering and I prefer the look of this one (also wondering if it's better performance wise).