godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.56k stars 21.27k forks source link

GPU Particles 2D/3D spawn subemitters "At End" earlier than expected #83641

Open WagnerGFX opened 1 year ago

WagnerGFX commented 1 year ago

Godot version

v4.1.2; v4.2-beta2

System information

Godot v4.2.beta2 - Windows 10.0.19045 - Vulkan (Forward+, Mobile) - dedicated NVIDIA GeForce GTX 1650 (NVIDIA; 31.0.15.3742) - Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (8 Threads)

Issue description

Setting sub-emission "At End" fires before the particle dies. This bug is stretched together with the main particle's lifetime.

The expected behavior would be for the main particle to die and for the subemitter's particle to spawn, both at the same frame.

A workaround I've found is setting an Alpha Curve to hide the particle just before it dies. But, if you use random lifetime, it doesn't work well on versions prior to 4.2-beta2. (maybe it was fixed in PR #83488 ?)

Steps to reproduce

The reproduction project has "main_2d" and "main_3d" scenes that show the issue, even in the editor.

Minimal reproduction project

GPUParticles Subemitter.zip

WagnerGFX commented 1 year ago

Updated the description and reproduction project with 3D examples of the same issue.

warriormaster12 commented 1 week ago

Seems to still happen in godot 4.3-stable. Although it can only be triggered once after opening the scene containing particles after which it doesn't seem to trigger at all.