godotengine / godot

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

GPUParticles3D inherit velocity is broken #97160

Open huwpascoe opened 2 months ago

huwpascoe commented 2 months ago

Tested versions

4.3

System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 960 (NVIDIA; 32.0.15.6081) - Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz (4 Threads)

Issue description

inherit_velocity_ratio doesn't work as expected. Particles seem to emit ahead of where they're supposed to and this gap increases the higher the velocity.

The particle effect is placed at the back of the rocket, yet at this velocity they're being emitted near the front! image

Steps to reproduce

Set inherit_velocity_ratio to greater than zero.

Minimal reproduction project (MRP)

particles_velocity_ratio.zip image

KingTheFifth commented 2 months ago

Hiya! I am planning to look into this, just to give people a heads up

Calinou commented 2 months ago

Can you reproduce this in master? https://github.com/godotengine/godot/pull/93837 was merged there but hasn't been cherry-picked to 4.3.x yet.

huwpascoe commented 2 months ago

Improved! It works provided:

So question is, does this resolve the issue?

huwpascoe commented 2 months ago

Confirmed in rendering meeting that no, the issue is not technically resolved. It should work for all the settings. Please go ahead @KingTheFifth

KingTheFifth commented 2 months ago

Ok, thanks for confirming! I will begin working on it now

JackErb commented 1 month ago

Any update on this? :)

KingTheFifth commented 3 weeks ago

Hi! Sorry for the late reply. I have not managed to make any significant progress. If anything, it seems that inherit velocity does not even work as expected with fixed_fps=60, interpolate=false and fract_delta=false. Running the MPR with inherit velocity ratio set to 1.0 on commit 33e1f570ff4c437ad336085a1f605e0d2705ef54 produces the following:

https://github.com/user-attachments/assets/057ac579-1962-448a-9f5d-85688ed96be7

With inherit velocity ratio 1.0, I expected the particles to remain static relative to the rocket as if the rocket was not moving. From the video it should be apparent that the particles gain velocity such that their 'spawn point' move from the left end of the rocket toward the right end. For reference, this is what it looks like if the rocket does not move i.e. accel = 0.0 in rocket.gd.

https://github.com/user-attachments/assets/3791d0a0-1593-4f06-88d3-ca1c6174e58f

I think this issue may be too advanced for me, so anyone with more experience of the physics part of Godot than me is more than welcome to take a look.

huwpascoe commented 3 weeks ago

It is a difficult one to solve, thanks for trying.