Skip to content

Commit ea47e03

Browse files
authored
Merge pull request #65714 from benbot/fix-double-particle-collision-calculation
2 parents af35b97 + f0ebfdb commit ea47e03

File tree

1 file changed

+7
-15
lines changed

1 file changed

+7
-15
lines changed

scene/resources/particle_process_material.cpp

+7-15
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,13 @@ void ParticleProcessMaterial::_update_shader() {
830830
code += " TRANSFORM[3].z = 0.0;\n";
831831
}
832832

833+
// scale by scale
834+
code += " float base_scale = mix(scale_min, scale_max, scale_rand);\n";
835+
code += " base_scale = sign(base_scale) * max(abs(base_scale), 0.001);\n";
836+
code += " TRANSFORM[0].xyz *= base_scale * sign(tex_scale.r) * max(abs(tex_scale.r), 0.001);\n";
837+
code += " TRANSFORM[1].xyz *= base_scale * sign(tex_scale.g) * max(abs(tex_scale.g), 0.001);\n";
838+
code += " TRANSFORM[2].xyz *= base_scale * sign(tex_scale.b) * max(abs(tex_scale.b), 0.001);\n";
839+
833840
if (collision_mode == COLLISION_RIGID) {
834841
code += " if (COLLIDED) {\n";
835842
code += " if (length(VELOCITY) > 3.0) {\n";
@@ -844,21 +851,6 @@ void ParticleProcessMaterial::_update_shader() {
844851
}
845852
code += " }\n";
846853
code += " }\n";
847-
}
848-
849-
// scale by scale
850-
code += " float base_scale = mix(scale_min, scale_max, scale_rand);\n";
851-
code += " base_scale = sign(base_scale) * max(abs(base_scale), 0.001);\n";
852-
code += " TRANSFORM[0].xyz *= base_scale * sign(tex_scale.r) * max(abs(tex_scale.r), 0.001);\n";
853-
code += " TRANSFORM[1].xyz *= base_scale * sign(tex_scale.g) * max(abs(tex_scale.g), 0.001);\n";
854-
code += " TRANSFORM[2].xyz *= base_scale * sign(tex_scale.b) * max(abs(tex_scale.b), 0.001);\n";
855-
856-
if (collision_mode == COLLISION_RIGID) {
857-
code += " if (COLLIDED) {\n";
858-
code += " TRANSFORM[3].xyz+=COLLISION_NORMAL * COLLISION_DEPTH;\n";
859-
code += " VELOCITY -= COLLISION_NORMAL * dot(COLLISION_NORMAL, VELOCITY) * (1.0 + collision_bounce);\n";
860-
code += " VELOCITY = mix(VELOCITY,vec3(0.0),collision_friction * DELTA * 100.0);\n";
861-
code += " }\n";
862854
} else if (collision_mode == COLLISION_HIDE_ON_CONTACT) {
863855
code += " if (COLLIDED) {\n";
864856
code += " ACTIVE = false;\n";

0 commit comments

Comments
 (0)