Increase the maximum number of octaves in OpenSimplexNoise to 9
An error message is now printed when trying to set the number of octaves
above the maximum allowed value.
The magic constant was also replaced with a define that can be
easily changed.
This closes #28714.
(cherry picked from commit 13622d40fc
)
This commit is contained in:
parent
cbd4784d14
commit
1898240af8
3 changed files with 14 additions and 5 deletions
|
@ -117,7 +117,8 @@
|
||||||
Difference in period between [member octaves].
|
Difference in period between [member octaves].
|
||||||
</member>
|
</member>
|
||||||
<member name="octaves" type="int" setter="set_octaves" getter="get_octaves" default="3">
|
<member name="octaves" type="int" setter="set_octaves" getter="get_octaves" default="3">
|
||||||
Number of OpenSimplex noise layers that are sampled to get the fractal noise.
|
Number of OpenSimplex noise layers that are sampled to get the fractal noise. Higher values result in more detailed noise but take more time to generate.
|
||||||
|
[b]Note:[/b] The maximum allowed value is 9.
|
||||||
</member>
|
</member>
|
||||||
<member name="period" type="float" setter="set_period" getter="get_period" default="64.0">
|
<member name="period" type="float" setter="set_period" getter="get_period" default="64.0">
|
||||||
Period of the base octave. A lower period results in a higher-frequency noise (more value changes across the same distance).
|
Period of the base octave. A lower period results in a higher-frequency noise (more value changes across the same distance).
|
||||||
|
|
|
@ -47,7 +47,7 @@ OpenSimplexNoise::~OpenSimplexNoise() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenSimplexNoise::_init_seeds() {
|
void OpenSimplexNoise::_init_seeds() {
|
||||||
for (int i = 0; i < 6; ++i) {
|
for (int i = 0; i < MAX_OCTAVES; ++i) {
|
||||||
open_simplex_noise(seed + i * 2, &(contexts[i]));
|
open_simplex_noise(seed + i * 2, &(contexts[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,10 @@ int OpenSimplexNoise::get_seed() {
|
||||||
|
|
||||||
void OpenSimplexNoise::set_octaves(int p_octaves) {
|
void OpenSimplexNoise::set_octaves(int p_octaves) {
|
||||||
if (p_octaves == octaves) return;
|
if (p_octaves == octaves) return;
|
||||||
octaves = CLAMP(p_octaves, 1, 6);
|
|
||||||
|
ERR_FAIL_COND_MSG(p_octaves > MAX_OCTAVES, vformat("The number of OpenSimplexNoise octaves is limited to %d; ignoring the new value.", MAX_OCTAVES));
|
||||||
|
|
||||||
|
octaves = CLAMP(p_octaves, 1, MAX_OCTAVES);
|
||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +185,7 @@ void OpenSimplexNoise::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_noise_3dv", "pos"), &OpenSimplexNoise::get_noise_3dv);
|
ClassDB::bind_method(D_METHOD("get_noise_3dv", "pos"), &OpenSimplexNoise::get_noise_3dv);
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "seed"), "set_seed", "get_seed");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "seed"), "set_seed", "get_seed");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "octaves", PROPERTY_HINT_RANGE, "1,6,1"), "set_octaves", "get_octaves");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "octaves", PROPERTY_HINT_RANGE, vformat("1,%d,1", MAX_OCTAVES)), "set_octaves", "get_octaves");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "period", PROPERTY_HINT_RANGE, "0.1,256.0,0.1"), "set_period", "get_period");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "period", PROPERTY_HINT_RANGE, "0.1,256.0,0.1"), "set_period", "get_period");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "persistence", PROPERTY_HINT_RANGE, "0.0,1.0,0.001"), "set_persistence", "get_persistence");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "persistence", PROPERTY_HINT_RANGE, "0.0,1.0,0.001"), "set_persistence", "get_persistence");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "lacunarity", PROPERTY_HINT_RANGE, "0.1,4.0,0.01"), "set_lacunarity", "get_lacunarity");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "lacunarity", PROPERTY_HINT_RANGE, "0.1,4.0,0.01"), "set_lacunarity", "get_lacunarity");
|
||||||
|
|
|
@ -37,11 +37,16 @@
|
||||||
|
|
||||||
#include "thirdparty/misc/open-simplex-noise.h"
|
#include "thirdparty/misc/open-simplex-noise.h"
|
||||||
|
|
||||||
|
// The maximum number of octaves allowed. Note that these are statically allocated.
|
||||||
|
// Higher values become exponentially slower, so this shouldn't be set too high
|
||||||
|
// to avoid freezing the editor for long periods of time.
|
||||||
|
#define MAX_OCTAVES 9
|
||||||
|
|
||||||
class OpenSimplexNoise : public Resource {
|
class OpenSimplexNoise : public Resource {
|
||||||
GDCLASS(OpenSimplexNoise, Resource);
|
GDCLASS(OpenSimplexNoise, Resource);
|
||||||
OBJ_SAVE_TYPE(OpenSimplexNoise);
|
OBJ_SAVE_TYPE(OpenSimplexNoise);
|
||||||
|
|
||||||
osn_context contexts[6];
|
osn_context contexts[MAX_OCTAVES];
|
||||||
|
|
||||||
int seed;
|
int seed;
|
||||||
float persistence; // Controls details, value in [0,1]. Higher increases grain, lower increases smoothness.
|
float persistence; // Controls details, value in [0,1]. Higher increases grain, lower increases smoothness.
|
||||||
|
|
Loading…
Reference in a new issue