godotengine / godot

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

GPU Particles 2D/3D move in the opposite direction after being pushed #83646

Open WagnerGFX opened 10 months ago

WagnerGFX commented 10 months ago

Godot version

v4.1.2.stable; v4.2.beta2

System information

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

Issue description

GPU Particles sometimes move in the opposite direction after being pushed by the side of their velocity.

This seems to happen after they get dragged away by a moving collider, and only in a specific side, as other particles actually keep moving in the direction they were dragged.

The expected behavior would be for those particles to keep their momentum and continue moving in the same direction even after the collider moves away.

*Any references to a Collider means the LightOccluder2D or GPUParticlesCollisionBox3D

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 Collision Direction.zip

Calinou commented 10 months ago

Does this occur in 3D too, or only in 2D?

WagnerGFX commented 10 months ago

Does this occur in 3D too, or only in 2D?

Good thing you asked as I already tried testing in 3D once but couldn't get the collisions working. But now I tried again and discovered that the Drawing > Visibility AABB also controls the collision (might need more documentation?) and that being too close to the particle emitter makes them stop moving instead of sliding (I'll open another issue for that too)

Long story short: Yes, it does happen in 3D too. I've updated the details and the reproduction project to demonstrate that.

I'll also review the other 2D particles issues I opened, as I can now reproduce some of those issues too.