diff --git a/doc/ru/particles.md b/doc/ru/particles.md index bc20a4a3..167337f8 100644 --- a/doc/ru/particles.md +++ b/doc/ru/particles.md @@ -17,6 +17,7 @@ | acceleration | Ускорение частиц. | {0, -16, 0} | | explosion | Сила разлёта частиц при спавне. | {2, 2, 2} | | size | Размер частиц. | {0.1, 0.1, 0.1} | +| size_spread | Максимальное отклонение времени размера частиц. | 0.2 | | spawn_shape | Форма области спавна частиц. (ball/sphere/box) | ball | | spawn_spread | Размер области спавна частиц. | {0, 0, 0} | | random_sub_uv | Размер случайного подрегиона текстуры (1 - будет использована вся текстура). | 1.0 | diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 1fd8e860..0e2292a5 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -89,11 +89,13 @@ void ParticlesRenderer::renderParticles(const Camera& camera, float delta) { ); light *= 0.9f + (particle.random % 100) * 0.001f; } + float scale = 1.0f + ((particle.random ^ 2628172) % 1000) * + 0.001f * preset.sizeSpread; batch->quad( particle.position, right, preset.globalUpVector ? glm::vec3(0, 1, 0) : up, - preset.size, + preset.size * scale, light, glm::vec3(1.0f), particle.region diff --git a/src/presets/ParticlesPreset.cpp b/src/presets/ParticlesPreset.cpp index 31b0cff2..181dbeb5 100644 --- a/src/presets/ParticlesPreset.cpp +++ b/src/presets/ParticlesPreset.cpp @@ -42,6 +42,7 @@ dv::value ParticlesPreset::serialize() const { root["acceleration"] = dv::to_value(acceleration); root["explosion"] = dv::to_value(explosion); root["size"] = dv::to_value(size); + root["size_spread"] = sizeSpread; root["spawn_spread"] = dv::to_value(size); root["spawn_shape"] = to_string(spawnShape); root["random_sub_uv"] = randomSubUV; @@ -67,6 +68,7 @@ void ParticlesPreset::deserialize(const dv::value& src) { if (src.has("size")) { dv::get_vec(src["size"], size); } + src.at("size_spread").get(sizeSpread); if (src.has("spawn_spread")) { dv::get_vec(src["spawn_spread"], spawnSpread); } diff --git a/src/presets/ParticlesPreset.hpp b/src/presets/ParticlesPreset.hpp index 483ce1b4..eb9f06dd 100644 --- a/src/presets/ParticlesPreset.hpp +++ b/src/presets/ParticlesPreset.hpp @@ -42,6 +42,8 @@ struct ParticlesPreset : public Serializable { glm::vec3 explosion {2.0f}; /// @brief Particle size glm::vec3 size {0.1f}; + /// @brief Particles size spread + float sizeSpread = 0.2f; /// @brief Spawn spread shape ParticleSpawnShape spawnShape = BALL; /// @brief Spawn spread