Merge pull request #90095 from QbieShay/qbe/fix-cpuparticle-instancew

Fix `INSTANCE_CUSTOM.w` not being assigned correctly in CPUParticles 2D and 3D
This commit is contained in:
Rémi Verschelde 2024-04-04 14:37:15 +02:00
commit 7c6892662d
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 5 additions and 4 deletions

View file

@ -753,10 +753,10 @@ void CPUParticles2D::_particles_process(double p_delta) {
p.custom[0] = 0.0; // unused p.custom[0] = 0.0; // unused
p.custom[1] = 0.0; // phase [0..1] p.custom[1] = 0.0; // phase [0..1]
p.custom[2] = tex_anim_offset * Math::lerp(parameters_min[PARAM_ANIM_OFFSET], parameters_max[PARAM_ANIM_OFFSET], p.anim_offset_rand); p.custom[2] = tex_anim_offset * Math::lerp(parameters_min[PARAM_ANIM_OFFSET], parameters_max[PARAM_ANIM_OFFSET], p.anim_offset_rand);
p.custom[3] = 0.0; p.custom[3] = (1.0 - Math::randf() * lifetime_randomness);
p.transform = Transform2D(); p.transform = Transform2D();
p.time = 0; p.time = 0;
p.lifetime = lifetime * (1.0 - Math::randf() * lifetime_randomness); p.lifetime = lifetime * p.custom[3];
p.base_color = Color(1, 1, 1, 1); p.base_color = Color(1, 1, 1, 1);
switch (emission_shape) { switch (emission_shape) {

View file

@ -69,7 +69,7 @@ void CPUParticles3D::set_amount(int p_amount) {
for (int i = 0; i < p_amount; i++) { for (int i = 0; i < p_amount; i++) {
w[i].active = false; w[i].active = false;
w[i].custom[3] = 0.0; // Make sure w component isn't garbage data w[i].custom[3] = 1.0; // Make sure w component isn't garbage data and doesn't break shaders with CUSTOM.y/Custom.w
} }
} }
@ -813,9 +813,10 @@ void CPUParticles3D::_particles_process(double p_delta) {
p.custom[0] = Math::deg_to_rad(base_angle); //angle p.custom[0] = Math::deg_to_rad(base_angle); //angle
p.custom[1] = 0.0; //phase p.custom[1] = 0.0; //phase
p.custom[2] = tex_anim_offset * Math::lerp(parameters_min[PARAM_ANIM_OFFSET], parameters_max[PARAM_ANIM_OFFSET], p.anim_offset_rand); //animation offset (0-1) p.custom[2] = tex_anim_offset * Math::lerp(parameters_min[PARAM_ANIM_OFFSET], parameters_max[PARAM_ANIM_OFFSET], p.anim_offset_rand); //animation offset (0-1)
p.custom[3] = (1.0 - Math::randf() * lifetime_randomness);
p.transform = Transform3D(); p.transform = Transform3D();
p.time = 0; p.time = 0;
p.lifetime = lifetime * (1.0 - Math::randf() * lifetime_randomness); p.lifetime = lifetime * p.custom[3];
p.base_color = Color(1, 1, 1, 1); p.base_color = Color(1, 1, 1, 1);
switch (emission_shape) { switch (emission_shape) {