Skip to content

Commit eda44bf

Browse files
authored
Merge pull request godotengine#85252 from QbieShay/qbe/fix-radial-inwards-velocity
Fix radial inwards velocity clamping incorrectly (regression from godotengine#83488)
2 parents 03c251e + a879e59 commit eda44bf

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

scene/resources/particle_process_material.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -762,8 +762,11 @@ void ParticleProcessMaterial::_update_shader() {
762762

763763
code += "}\n";
764764

765-
code += "vec3 process_radial_displacement(DynamicsParameters param, float lifetime, inout uint alt_seed, mat4 transform, mat4 emission_transform){\n";
765+
code += "vec3 process_radial_displacement(DynamicsParameters param, float lifetime, inout uint alt_seed, mat4 transform, mat4 emission_transform, float delta){\n";
766766
code += " vec3 radial_displacement = vec3(0.0);\n";
767+
code += " if (delta < 0.001){\n";
768+
code += " return radial_displacement;\n";
769+
code += " }\n";
767770
code += " float radial_displacement_multiplier = 1.0;\n";
768771
if (tex_parameters[PARAM_RADIAL_VELOCITY].is_valid()) {
769772
code += " radial_displacement_multiplier = texture(radial_velocity_curve, vec2(lifetime)).r;\n";
@@ -774,7 +777,7 @@ void ParticleProcessMaterial::_update_shader() {
774777
code += " }else{radial_displacement = get_random_direction_from_spread(alt_seed, 360.0)* param.radial_velocity;} \n";
775778
code += " if (radial_displacement_multiplier * param.radial_velocity < 0.0){\n // Prevent inwards velocity to flicker once the point is reached.";
776779
code += " if (length(radial_displacement) > 0.01){\n";
777-
code += " radial_displacement = normalize(radial_displacement) * min(abs((radial_displacement_multiplier * param.radial_velocity)), length(transform[3].xyz - global_pivot));\n";
780+
code += " radial_displacement = normalize(radial_displacement) * min(abs((radial_displacement_multiplier * param.radial_velocity)), length(transform[3].xyz - global_pivot) / delta);\n";
778781
code += " }\n";
779782
code += " \n";
780783
code += " return radial_displacement;\n";
@@ -923,7 +926,7 @@ void ParticleProcessMaterial::_update_shader() {
923926
}
924927
code += " // calculate all velocity\n";
925928
code += " \n";
926-
code += " controlled_displacement += process_radial_displacement(dynamic_params, lifetime_percent, alt_seed, TRANSFORM, EMISSION_TRANSFORM);\n";
929+
code += " controlled_displacement += process_radial_displacement(dynamic_params, lifetime_percent, alt_seed, TRANSFORM, EMISSION_TRANSFORM, DELTA);\n";
927930
code += " \n";
928931
if (tex_parameters[PARAM_DIRECTIONAL_VELOCITY].is_valid()) {
929932
code += " controlled_displacement += process_directional_displacement(dynamic_params, lifetime_percent, TRANSFORM, EMISSION_TRANSFORM);\n";

0 commit comments

Comments
 (0)