Skip to content

Commit 5a63d1d

Browse files
committed
Merge pull request godotengine#91223 from Arnklit/particle-cylinder-emission-distribution-fix
Fix particle cylinder emission shape random distribution
2 parents 731ea17 + af22d50 commit 5a63d1d

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

scene/3d/cpu_particles_3d.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,7 @@ void CPUParticles3D::_particles_process(double p_delta) {
880880
} break;
881881
case EMISSION_SHAPE_RING: {
882882
real_t ring_random_angle = Math::randf() * Math_TAU;
883-
real_t ring_random_radius = Math::randf() * (emission_ring_radius - emission_ring_inner_radius) + emission_ring_inner_radius;
883+
real_t ring_random_radius = Math::sqrt(Math::randf() * (emission_ring_radius - emission_ring_inner_radius * emission_ring_inner_radius) + emission_ring_inner_radius * emission_ring_inner_radius);
884884
Vector3 axis = emission_ring_axis == Vector3(0.0, 0.0, 0.0) ? Vector3(0.0, 0.0, 1.0) : emission_ring_axis.normalized();
885885
Vector3 ortho_axis;
886886
if (axis.abs() == Vector3(1.0, 0.0, 0.0)) {

scene/resources/particle_process_material.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ void ParticleProcessMaterial::_update_shader() {
634634
if (emission_shape == EMISSION_SHAPE_RING) {
635635
code += " \n";
636636
code += " float ring_spawn_angle = rand_from_seed(alt_seed) * 2.0 * pi;\n";
637-
code += " float ring_random_radius = rand_from_seed(alt_seed) * (emission_ring_radius - emission_ring_inner_radius) + emission_ring_inner_radius;\n";
637+
code += " float ring_random_radius = sqrt(rand_from_seed(alt_seed) * (emission_ring_radius - emission_ring_inner_radius * emission_ring_inner_radius) + emission_ring_inner_radius * emission_ring_inner_radius);\n";
638638
code += " vec3 axis = emission_ring_axis == vec3(0.0) ? vec3(0.0, 0.0, 1.0) : normalize(emission_ring_axis);\n";
639639
code += " vec3 ortho_axis = vec3(0.0);\n";
640640
code += " if (abs(axis) == vec3(1.0, 0.0, 0.0)) {\n";

0 commit comments

Comments
 (0)