Skip to content

Commit

Permalink
Fix noise_direction variable used before initialized in particle sh…
Browse files Browse the repository at this point in the history
…ader

when using turbulence with collisions, delete unused code
  • Loading branch information
jsjtxietian committed Oct 25, 2023
1 parent ea0ab44 commit cc14e00
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions scene/resources/particle_process_material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -962,10 +962,6 @@ void ParticleProcessMaterial::_update_shader() {
code += " VELOCITY = mix(VELOCITY,vec3(0.0),clamp(collision_friction, 0.0, 1.0));\n";
code += " } else {\n";
code += " VELOCITY = vec3(0.0);\n";
// If turbulence is enabled, set the noise direction to up so the turbulence color is "neutral"
if (turbulence_enabled) {
code += " noise_direction = vec3(1.0, 0.0, 0.0);\n";
}
code += " }\n";
code += " }\n";
} else if (collision_mode == COLLISION_HIDE_ON_CONTACT) {
Expand All @@ -984,14 +980,16 @@ void ParticleProcessMaterial::_update_shader() {
}
code += " \n";
code += " vec3 noise_direction = get_noise_direction(TRANSFORM[3].xyz);\n";
// The following snippet causes massive performance hit. We don't need it as long as collision is disabled.
// Refer to GH-83744 for more info.
if (collision_mode != COLLISION_DISABLED) {

// Godot detects when the COLLIDED keyword is used. If it's used anywhere in the shader then Godot will generate the screen space SDF for collisions.
// We don't need it as long as collision is disabled. Refer to GH-83744 for more info.
if (collision_mode == COLLISION_RIGID) {
code += " if (!COLLIDED) {\n";
code += " \n";
code += " float vel_mag = length(final_velocity);\n";
code += " float vel_infl = clamp(dynamic_params.turb_influence * turbulence_influence, 0.0,1.0);\n";
code += " final_velocity = mix(final_velocity, normalize(noise_direction) * vel_mag * (1.0 + (1.0 - vel_infl) * 0.2), vel_infl);\n";
}
code += " float vel_mag = length(final_velocity);\n";
code += " float vel_infl = clamp(dynamic_params.turb_influence * turbulence_influence, 0.0,1.0);\n";
code += " final_velocity = mix(final_velocity, normalize(noise_direction) * vel_mag * (1.0 + (1.0 - vel_infl) * 0.2), vel_infl);\n";
if (collision_mode == COLLISION_RIGID) {
code += " }\n";
}
}
Expand Down

0 comments on commit cc14e00

Please sign in to comment.