Very much in the spirit of Halloween here, but ObiInstancedParticleRenderer appears to be haunted as it's rendering ghost particles.
Replication steps:
Expected Result: The ObiInstancedParticleRenderer particles stop rendering when the particles expire. When the ObiParticleRenderer particle disappears, its corresponding ObiInstancedParticleRenderer should also disappear.
Observed Result: When particles expire at the end of their lifespan, ObiInstancedParticleRenderer continues to render them at their last known position. In Burst backend they are drawn in their final orientation and in Compute backend they are drawn in their final position but with zero rotation. The particles remain there indefinitely or until their index is re-used by a new particle. ObiParticleRenderer and ObiInstancedParticleRenderer render perfectly in sync right up until the particle expires.
Replication steps:
- Create a new blank URP project
- Install Obi Fluid 7.03
- Change shader target in ProceduralInstanced.shadergraph from BuiltIn to Universal
- Launch Faucet And Bucket test scene and fix the scene materials
- Disable the emitter's ObiFluidSurfaceMesher, add ObiParticleRenderer and ObiInstancedParticleRenderer components
- Set the emitter's lifespan to 1 second and speed to 8, and launch the scene
- Once the scene is open, you'll see the error. Set the Speed to 0 while the scene is live to get a really clear example of the ghost particles, which will then stay around indefinitely.
Expected Result: The ObiInstancedParticleRenderer particles stop rendering when the particles expire. When the ObiParticleRenderer particle disappears, its corresponding ObiInstancedParticleRenderer should also disappear.
Observed Result: When particles expire at the end of their lifespan, ObiInstancedParticleRenderer continues to render them at their last known position. In Burst backend they are drawn in their final orientation and in Compute backend they are drawn in their final position but with zero rotation. The particles remain there indefinitely or until their index is re-used by a new particle. ObiParticleRenderer and ObiInstancedParticleRenderer render perfectly in sync right up until the particle expires.