diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index 99dc6a4d494a..da7ec5722b25 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -754,15 +754,16 @@ void CPUParticles2D::_particles_process(double p_delta) { real_t base_angle = tex_angle * Math::lerp(parameters_min[PARAM_ANGLE], parameters_max[PARAM_ANGLE], p.angle_rand); p.rotation = Math::deg_to_rad(base_angle); - p.custom[0] = 0.0; // unused - 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[3] = (1.0 - Math::randf() * lifetime_randomness); p.transform = Transform2D(); p.time = 0; - p.lifetime = lifetime * p.custom[3]; + p.lifetime = lifetime * (1.0 - Math::randf() * lifetime_randomness); p.base_color = Color(1, 1, 1, 1); + p.custom[0] = p.rotation; + 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[3] = p.lifetime; + switch (emission_shape) { case EMISSION_SHAPE_POINT: { //do none diff --git a/scene/3d/cpu_particles_3d.cpp b/scene/3d/cpu_particles_3d.cpp index a9ff003abce6..6b940de4b298 100644 --- a/scene/3d/cpu_particles_3d.cpp +++ b/scene/3d/cpu_particles_3d.cpp @@ -820,15 +820,17 @@ void CPUParticles3D::_particles_process(double p_delta) { } real_t base_angle = tex_angle * Math::lerp(parameters_min[PARAM_ANGLE], parameters_max[PARAM_ANGLE], p.angle_rand); - p.custom[0] = Math::deg_to_rad(base_angle); //angle - 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[3] = (1.0 - Math::randf() * lifetime_randomness); + p.transform = Transform3D(); p.time = 0; - p.lifetime = lifetime * p.custom[3]; + p.lifetime = lifetime * (1.0 - Math::randf() * lifetime_randomness); p.base_color = Color(1, 1, 1, 1); + p.custom[0] = Math::deg_to_rad(base_angle); + 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[3] = p.lifetime; + switch (emission_shape) { case EMISSION_SHAPE_POINT: { //do none