HighMap library (C++)
Loading...
Searching...
No Matches
coherent_noise.hpp
Go to the documentation of this file.
1/* Copyright (c) 2023 Otto Link. Distributed under the terms of the GNU General
2 Public License. The full license is in the file LICENSE, distributed with
3 this software. */
4
10#pragma once
11
12#include "highmap/array.hpp"
13#include "highmap/functions.hpp"
16
17#define HMAP_GRADIENT_OFFSET 0.001f
18
19namespace hmap
20{
21
40
77Array dendry(glm::ivec2 shape,
78 glm::vec2 kw,
79 std::uint32_t seed,
80 Array &control_function,
81 float eps = 0.05,
82 int resolution = 1,
83 float displacement = 0.075,
84 int primitives_resolution_steps = 3,
85 float slope_power = 2.f,
86 float noise_amplitude_proportion = 0.01,
87 bool add_control_function = true,
88 float control_function_overlap = 0.5f,
89 const Array *p_noise_x = nullptr,
90 const Array *p_noise_y = nullptr,
91 const Array *p_stretching = nullptr,
92 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
93 int subsampling = 1);
94
95Array dendry(glm::ivec2 shape,
96 glm::vec2 kw,
97 std::uint32_t seed,
98 NoiseFunction &noise_function,
99 float noise_function_offset = 0.f,
100 float noise_function_scaling = 1.f,
101 float eps = 0.05,
102 int resolution = 1,
103 float displacement = 0.075,
104 int primitives_resolution_steps = 3,
105 float slope_power = 2.f,
106 float noise_amplitude_proportion = 0.01,
107 bool add_control_function = true,
108 float control_function_overlap = 0.5f,
109 const Array *p_noise_x = nullptr,
110 const Array *p_noise_y = nullptr,
111 const Array *p_stretching = nullptr,
112 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
113
157Array diffusion_limited_aggregation(glm::ivec2 shape,
158 float scale,
159 std::uint32_t seed,
160 float seeding_radius = 0.4f,
161 float seeding_outer_radius_ratio = 0.2f,
162 float slope = 8.f,
163 float noise_ratio = 0.2f);
164
166 glm::ivec2 shape,
167 std::uint32_t seed,
168 size_t control_points_count = 5000,
169 glm::vec2 seed_position = {0.5f, 0.5f},
170 float ratio = 0.98f,
171 float stop_proba = 1.f,
172 float slope = 16.f,
173 InterpolationMethod2D interpolation_method =
175 const Array *p_noise_x = nullptr,
176 const Array *p_noise_y = nullptr);
177
195Array gabor_noise(glm::ivec2 shape,
196 float kw,
197 float angle,
198 int width,
199 float density,
200 std::uint32_t seed);
201
220Array noise(NoiseType noise_type,
221 glm::ivec2 shape,
222 glm::vec2 kw,
223 std::uint32_t seed,
224 const Array *p_noise_x = nullptr,
225 const Array *p_noise_y = nullptr,
226 const Array *p_stretching = nullptr,
227 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
228
260Array noise_fbm(NoiseType noise_type,
261 glm::ivec2 shape,
262 glm::vec2 kw,
263 std::uint32_t seed,
264 int octaves = 8,
265 float weight = 0.7f,
266 float persistence = 0.5f,
267 float lacunarity = 2.f,
268 const Array *p_ctrl_param = nullptr,
269 const Array *p_noise_x = nullptr,
270 const Array *p_noise_y = nullptr,
271 const Array *p_stretching = nullptr,
272 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
273
306Array noise_iq(NoiseType noise_type,
307 glm::ivec2 shape,
308 glm::vec2 kw,
309 std::uint32_t seed,
310 int octaves = 8,
311 float weight = 0.7f,
312 float persistence = 0.5f,
313 float lacunarity = 2.f,
314 float gradient_scale = 0.05f,
315 const Array *p_ctrl_param = nullptr,
316 const Array *p_noise_x = nullptr,
317 const Array *p_noise_y = nullptr,
318 const Array *p_stretching = nullptr,
319 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
320
356Array noise_jordan(NoiseType noise_type,
357 glm::ivec2 shape,
358 glm::vec2 kw,
359 std::uint32_t seed,
360 int octaves = 8,
361 float weight = 0.7f,
362 float persistence = 0.5f,
363 float lacunarity = 2.f,
364 float warp0 = 0.4f,
365 float damp0 = 1.f,
366 float warp_scale = 0.4f,
367 float damp_scale = 1.f,
368 const Array *p_ctrl_param = nullptr,
369 const Array *p_noise_x = nullptr,
370 const Array *p_noise_y = nullptr,
371 const Array *p_stretching = nullptr,
372 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
373
406Array noise_parberry(glm::ivec2 shape,
407 glm::vec2 kw,
408 std::uint32_t seed,
409 int octaves = 8,
410 float weight = 0.7f,
411 float persistence = 0.5f,
412 float lacunarity = 2.f,
413 float mu = 1.02f,
414 const Array *p_ctrl_param = nullptr,
415 const Array *p_noise_x = nullptr,
416 const Array *p_noise_y = nullptr,
417 const Array *p_stretching = nullptr,
418 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
419
451Array noise_pingpong(NoiseType noise_type,
452 glm::ivec2 shape,
453 glm::vec2 kw,
454 std::uint32_t seed,
455 int octaves = 8,
456 float weight = 0.7f,
457 float persistence = 0.5f,
458 float lacunarity = 2.f,
459 const Array *p_ctrl_param = nullptr,
460 const Array *p_noise_x = nullptr,
461 const Array *p_noise_y = nullptr,
462 const Array *p_stretching = nullptr,
463 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
464
497Array noise_ridged(NoiseType noise_type,
498 glm::ivec2 shape,
499 glm::vec2 kw,
500 std::uint32_t seed,
501 int octaves = 8,
502 float weight = 0.7f,
503 float persistence = 0.5f,
504 float lacunarity = 2.f,
505 float k_smoothing = 0.1f,
506 const Array *p_ctrl_param = nullptr,
507 const Array *p_noise_x = nullptr,
508 const Array *p_noise_y = nullptr,
509 const Array *p_stretching = nullptr,
510 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
511
544Array noise_swiss(NoiseType noise_type,
545 glm::ivec2 shape,
546 glm::vec2 kw,
547 std::uint32_t seed,
548 int octaves = 8,
549 float weight = 0.7f,
550 float persistence = 0.5f,
551 float lacunarity = 2.f,
552 float warp_scale = 0.1f,
553 const Array *p_ctrl_param = nullptr,
554 const Array *p_noise_x = nullptr,
555 const Array *p_noise_y = nullptr,
556 const Array *p_stretching = nullptr,
557 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
558
582Array worley_double(glm::ivec2 shape,
583 glm::vec2 kw,
584 std::uint32_t seed,
585 float ratio = 0.5f,
586 float k = 0.f,
587 const Array *p_ctrl_param = nullptr,
588 const Array *p_noise_x = nullptr,
589 const Array *p_noise_y = nullptr,
590 const Array *p_stretching = nullptr,
591 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
592
593} // namespace hmap
594
595namespace hmap::gpu
596{
597
621Array gabor_wave(glm::ivec2 shape,
622 glm::vec2 kw,
623 std::uint32_t seed,
624 const Array &angle,
625 float angle_spread_ratio = 1.f,
626 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
627
628Array gabor_wave(glm::ivec2 shape,
629 glm::vec2 kw,
630 std::uint32_t seed,
631 float angle = 0.f,
632 float angle_spread_ratio = 1.f,
633 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
634
667Array gabor_wave_fbm(glm::ivec2 shape,
668 glm::vec2 kw,
669 std::uint32_t seed,
670 const Array &angle,
671 float angle_spread_ratio = 1.f,
672 int octaves = 8,
673 float weight = 0.7f,
674 float persistence = 0.5f,
675 float lacunarity = 2.f,
676 const Array *p_ctrl_param = nullptr,
677 const Array *p_noise_x = nullptr,
678 const Array *p_noise_y = nullptr,
679 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
680
681Array gabor_wave_fbm(glm::ivec2 shape,
682 glm::vec2 kw,
683 std::uint32_t seed,
684 float angle = 0.f,
685 float angle_spread_ratio = 1.f,
686 int octaves = 8,
687 float weight = 0.7f,
688 float persistence = 0.5f,
689 float lacunarity = 2.f,
690 const Array *p_ctrl_param = nullptr,
691 const Array *p_noise_x = nullptr,
692 const Array *p_noise_y = nullptr,
693 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
694
742Array gavoronoise(glm::ivec2 shape,
743 glm::vec2 kw,
744 std::uint32_t seed,
745 const Array &angle,
746 float amplitude = 0.05f,
747 float angle_spread_ratio = 1.f,
748 glm::vec2 kw_multiplier = {4.f, 4.f},
749 float slope_strength = 1.f,
750 float branch_strength = 2.f,
751 float z_cut_min = 0.2f,
752 float z_cut_max = 1.f,
753 int octaves = 8,
754 float persistence = 0.4f,
755 float lacunarity = 2.f,
756 const Array *p_ctrl_param = nullptr,
757 const Array *p_noise_x = nullptr,
758 const Array *p_noise_y = nullptr,
759 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
760
761Array gavoronoise(glm::ivec2 shape,
762 glm::vec2 kw,
763 std::uint32_t seed,
764 float angle = 0.f,
765 float amplitude = 0.05f,
766 float angle_spread_ratio = 1.f,
767 glm::vec2 kw_multiplier = {4.f, 4.f},
768 float slope_strength = 1.f,
769 float branch_strength = 2.f,
770 float z_cut_min = 0.2f,
771 float z_cut_max = 1.f,
772 int octaves = 8,
773 float persistence = 0.4f,
774 float lacunarity = 2.f,
775 const Array *p_ctrl_param = nullptr,
776 const Array *p_noise_x = nullptr,
777 const Array *p_noise_y = nullptr,
778 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
779
780Array gavoronoise(const Array &base,
781 glm::vec2 kw,
782 std::uint32_t seed,
783 float amplitude = 0.05f,
784 glm::vec2 kw_multiplier = {4.f, 4.f},
785 float slope_strength = 1.f,
786 float branch_strength = 2.f,
787 float z_cut_min = 0.2f,
788 float z_cut_max = 1.f,
789 int octaves = 8,
790 float persistence = 0.4f,
791 float lacunarity = 2.f,
792 const Array *p_ctrl_param = nullptr,
793 const Array *p_noise_x = nullptr,
794 const Array *p_noise_y = nullptr,
795 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
796
804Array noise(NoiseType noise_type,
805 glm::ivec2 shape,
806 glm::vec2 kw,
807 std::uint32_t seed,
808 const Array *p_noise_x = nullptr,
809 const Array *p_noise_y = nullptr,
810 const Array *p_stretching = nullptr,
811 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
812 glm::ivec2 period = {0, 0});
813
821Array noise_fbm(NoiseType noise_type,
822 glm::ivec2 shape,
823 glm::vec2 kw,
824 std::uint32_t seed,
825 int octaves = 8,
826 float weight = 0.7f,
827 float persistence = 0.5f,
828 float lacunarity = 2.f,
829 const Array *p_ctrl_param = nullptr,
830 const Array *p_noise_x = nullptr,
831 const Array *p_noise_y = nullptr,
832 const Array *p_stretching = nullptr,
833 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
834 glm::ivec2 period = {0, 0});
835
863Array phasor(PhasorProfile phasor_profile,
864 glm::ivec2 shape,
865 float kp_global,
866 std::uint32_t seed,
867 float angle_shift = 0.f,
868 int n_kernel_samples = 8,
869 const glm::vec2 jitter = {1.f, 1.f},
870 float delta = 0.01f,
871 float phase_smoothing = 10.f,
872 const Array *p_angle = nullptr,
873 const Array *p_noise_x = nullptr,
874 const Array *p_noise_y = nullptr,
875 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
876
908Array phasor_fbm(PhasorProfile phasor_profile,
909 glm::ivec2 shape,
910 float kp_global,
911 std::uint32_t seed,
912 float angle_shift = 0.f,
913 int octaves = 8,
914 float weight = 0.7f,
915 float persistence = 0.5f,
916 float lacunarity = 2.f,
917 int n_kernel_samples = 8,
918 const glm::vec2 jitter = {1.f, 1.f},
919 float delta = 0.01f,
920 float phase_smoothing = 10.f,
921 const Array *p_angle = nullptr,
922 const Array *p_noise_x = nullptr,
923 const Array *p_noise_y = nullptr,
924 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
925
971Array vorolines(glm::ivec2 shape,
972 float density,
973 std::uint32_t seed,
974 float k_smoothing = 0.f,
975 float exp_sigma = 0.f,
976 float alpha = 0.f,
977 float alpha_span = M_PI,
979 const Array *p_noise_x = nullptr,
980 const Array *p_noise_y = nullptr,
981 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
982 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
983
1039Array vorolines_fbm(
1040 glm::ivec2 shape,
1041 float density,
1042 std::uint32_t seed,
1043 float k_smoothing = 0.f,
1044 float exp_sigma = 0.f,
1045 float alpha = 0.f,
1046 float alpha_span = M_PI,
1048 int octaves = 8,
1049 float weight = 0.7f,
1050 float persistence = 0.5f,
1051 float lacunarity = 2.f,
1052 const Array *p_noise_x = nullptr,
1053 const Array *p_noise_y = nullptr,
1054 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
1055 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
1056
1096Array voronoi(glm::ivec2 shape,
1097 glm::vec2 kw,
1098 std::uint32_t seed,
1099 glm::vec2 jitter = {0.5f, 0.5f},
1100 float k_smoothing = 0.f,
1101 float exp_sigma = 0.f,
1103 const Array *p_ctrl_param = nullptr,
1104 const Array *p_noise_x = nullptr,
1105 const Array *p_noise_y = nullptr,
1106 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1107
1154Array voronoi_fbm(glm::ivec2 shape,
1155 glm::vec2 kw,
1156 std::uint32_t seed,
1157 glm::vec2 jitter = {0.5f, 0.5f},
1158 float k_smoothing = 0.f,
1159 float exp_sigma = 0.f,
1161 int octaves = 8,
1162 float weight = 0.7f,
1163 float persistence = 0.5f,
1164 float lacunarity = 2.f,
1165 const Array *p_ctrl_param = nullptr,
1166 const Array *p_noise_x = nullptr,
1167 const Array *p_noise_y = nullptr,
1168 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1169
1196Array voronoi_edge_distance(glm::ivec2 shape,
1197 glm::vec2 kw,
1198 std::uint32_t seed,
1199 glm::vec2 jitter = {0.5f, 0.5f},
1200 const Array *p_ctrl_param = nullptr,
1201 const Array *p_noise_x = nullptr,
1202 const Array *p_noise_y = nullptr,
1203 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1204
1241Array voronoise(glm::ivec2 shape,
1242 glm::vec2 kw,
1243 float u_param,
1244 float v_param,
1245 std::uint32_t seed,
1246 const Array *p_noise_x = nullptr,
1247 const Array *p_noise_y = nullptr,
1248 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1249
1277Array voronoise_fbm(glm::ivec2 shape,
1278 glm::vec2 kw,
1279 float u_param,
1280 float v_param,
1281 std::uint32_t seed,
1282 int octaves = 8,
1283 float weight = 0.7f,
1284 float persistence = 0.5f,
1285 float lacunarity = 2.f,
1286 const Array *p_ctrl_param = nullptr,
1287 const Array *p_noise_x = nullptr,
1288 const Array *p_noise_y = nullptr,
1289 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1290
1339Array vororand(glm::ivec2 shape,
1340 float density,
1341 float variability,
1342 std::uint32_t seed,
1343 float k_smoothing = 0.f,
1344 float exp_sigma = 0.f,
1346 const Array *p_noise_x = nullptr,
1347 const Array *p_noise_y = nullptr,
1348 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
1349 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
1350
1351Array vororand(glm::ivec2 shape,
1352 const std::vector<float> &xp,
1353 const std::vector<float> &yp,
1354 float k_smoothing = 0.f,
1355 float exp_sigma = 0.f,
1357 const Array *p_noise_x = nullptr,
1358 const Array *p_noise_y = nullptr,
1359 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1360
1417Array wavelet_noise(glm::ivec2 shape,
1418 glm::vec2 kw,
1419 std::uint32_t seed,
1420 float kw_multiplier = 2.f,
1421 float vorticity = 0.f,
1422 float density = 1.f,
1423 int octaves = 8,
1424 float weight = 0.7f,
1425 float persistence = 0.5f,
1426 float lacunarity = 2.f,
1427 const Array *p_ctrl_param = nullptr,
1428 const Array *p_noise_x = nullptr,
1429 const Array *p_noise_y = nullptr,
1430 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1431
1432} // namespace hmap::gpu
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
Defines modular function objects for procedural generation, including noise algorithms (Perlin,...
Header file for 2D interpolation methods.
Definition blending.hpp:186
Array phasor_fbm(PhasorProfile phasor_profile, glm::ivec2 shape, float kp_global, std::uint32_t seed, float angle_shift=0.f, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, int n_kernel_samples=8, const glm::vec2 jitter={1.f, 1.f}, float delta=0.01f, float phase_smoothing=10.f, const Array *p_angle=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a multi-octave (fBm) phasor-based pattern.
Definition phasor.cpp:74
Array noise_fbm(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, glm::ivec2 period={0, 0})
See hmap::noise_fbm. period sets the tiling period in lattice cells for the base octave....
Definition primitives_gpu.cpp:543
Array voronoise_fbm(glm::ivec2 shape, glm::vec2 kw, float u_param, float v_param, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Voronoise.
Definition primitives_gpu.cpp:970
Array vorolines(glm::ivec2 shape, float density, std::uint32_t seed, float k_smoothing=0.f, float exp_sigma=0.f, float alpha=0.f, float alpha_span=M_PI, VoronoiReturnType return_type=VoronoiReturnType::F1_SQUARED, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, glm::vec4 bbox_points={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi-based pattern where cells are defined by proximity to random lines.
Definition primitives_gpu.cpp:719
Array voronoise(glm::ivec2 shape, glm::vec2 kw, float u_param, float v_param, std::uint32_t seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a 2D Voronoi noise array.
Definition primitives_gpu.cpp:935
Array vorolines_fbm(glm::ivec2 shape, float density, std::uint32_t seed, float k_smoothing=0.f, float exp_sigma=0.f, float alpha=0.f, float alpha_span=M_PI, VoronoiReturnType return_type=VoronoiReturnType::F1_SQUARED, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, glm::vec4 bbox_points={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi-based pattern using distances to lines defined by random points and angles,...
Definition primitives_gpu.cpp:798
Array vororand(glm::ivec2 shape, float density, float variability, std::uint32_t seed, float k_smoothing=0.f, float exp_sigma=0.f, VoronoiReturnType return_type=VoronoiReturnType::F1_SQUARED, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, glm::vec4 bbox_points={0.f, 1.f, 0.f, 1.f})
Generates a 2D Voronoi-based scalar field using OpenCL.
Definition primitives_gpu.cpp:1052
Array gavoronoise(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, const Array &angle, float amplitude=0.05f, float angle_spread_ratio=1.f, glm::vec2 kw_multiplier={4.f, 4.f}, float slope_strength=1.f, float branch_strength=2.f, float z_cut_min=0.2f, float z_cut_max=1.f, int octaves=8, float persistence=0.4f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a 2D array using the GavoroNoise algorithm, which is a procedural noise technique for terra...
Definition primitives_gpu.cpp:177
Array wavelet_noise(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, float kw_multiplier=2.f, float vorticity=0.f, float density=1.f, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates 2D wavelet noise using an OpenCL kernel.
Definition primitives_gpu.cpp:1144
Array gabor_wave(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, const Array &angle, float angle_spread_ratio=1.f, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Gabor noise.
Definition primitives_gpu.cpp:53
Array voronoi(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, glm::vec2 jitter={0.5f, 0.5f}, float k_smoothing=0.f, float exp_sigma=0.f, VoronoiReturnType return_type=VoronoiReturnType::F1_SQUARED, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi diagram in a 2D array with configurable properties.
Definition primitives_gpu.cpp:843
Array voronoi_fbm(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, glm::vec2 jitter={0.5f, 0.5f}, float k_smoothing=0.f, float exp_sigma=0.f, VoronoiReturnType return_type=VoronoiReturnType::F1_SQUARED, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi diagram in a 2D array with configurable properties.
Definition primitives_gpu.cpp:885
Array phasor(PhasorProfile phasor_profile, glm::ivec2 shape, float kp_global, std::uint32_t seed, float angle_shift=0.f, int n_kernel_samples=8, const glm::vec2 jitter={1.f, 1.f}, float delta=0.01f, float phase_smoothing=10.f, const Array *p_angle=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a procedural phasor-based pattern.
Definition phasor.cpp:17
Array noise(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, glm::ivec2 period={0, 0})
See hmap::noise. period sets the tiling period in lattice cells. For the heightmap to be periodic wit...
Definition primitives_gpu.cpp:504
Array gabor_wave_fbm(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, const Array &angle, float angle_spread_ratio=1.f, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Gabor noise.
Definition primitives_gpu.cpp:96
Array voronoi_edge_distance(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, glm::vec2 jitter={0.5f, 0.5f}, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Computes the Voronoi edge distance.
Definition primitives_gpu.cpp:1016
Definition algebra.hpp:23
Array dendry(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, Array &control_function, float eps=0.05, int resolution=1, float displacement=0.075, int primitives_resolution_steps=3, float slope_power=2.f, float noise_amplitude_proportion=0.01, bool add_control_function=true, float control_function_overlap=0.5f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f}, int subsampling=1)
Dendry is a locally computable procedural function that generates branching patterns at various scale...
Definition dendry.cpp:31
Array diffusion_limited_aggregation_trimesh(glm::ivec2 shape, std::uint32_t seed, size_t control_points_count=5000, glm::vec2 seed_position={0.5f, 0.5f}, float ratio=0.98f, float stop_proba=1.f, float slope=16.f, InterpolationMethod2D interpolation_method=InterpolationMethod2D::ITP2D_DELAUNAY_GRADIENT, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr)
Definition diffusion_limited_aggregation.cpp:113
Array gabor_noise(glm::ivec2 shape, float kw, float angle, int width, float density, std::uint32_t seed)
Return a sparse Gabor noise.
Definition gabor.cpp:17
Array noise_ridged(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, float k_smoothing=0.1f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm ridged noise.
Definition noise.cpp:230
Array diffusion_limited_aggregation(glm::ivec2 shape, float scale, std::uint32_t seed, float seeding_radius=0.4f, float seeding_outer_radius_ratio=0.2f, float slope=8.f, float noise_ratio=0.2f)
Generates a diffusion-limited aggregation (DLA) pattern.
Definition diffusion_limited_aggregation.cpp:25
InterpolationMethod2D
Enumeration of 2D interpolation methods.
Definition interpolate2d.hpp:47
@ ITP2D_DELAUNAY_GRADIENT
Delaunay triangulation + linear gradient.
Definition interpolate2d.hpp:53
PhasorProfile
Phasor angular profile type.
Definition profiles.hpp:38
Array noise_pingpong(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm pingpong noise.
Definition noise.cpp:194
Array slope(glm::ivec2 shape, float angle, float slope, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array corresponding to a slope with a given overall.
Definition primitives.cpp:288
Array noise_fbm(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:41
Array noise_jordan(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, float warp0=0.4f, float damp0=1.f, float warp_scale=0.4f, float damp_scale=1.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:115
VoronoiReturnType
Selects the value returned by the Voronoi evaluation.
Definition coherent_noise.hpp:29
@ EDGE_DISTANCE_SQUARED
Squared edge distance.
Definition coherent_noise.hpp:36
@ F1_SQUARED
Returns F1^2.
Definition coherent_noise.hpp:30
@ CONSTANT_F2MF1_SQUARED
Constant × (F2 - F1)^2.
Definition coherent_noise.hpp:38
@ F2_SQUARED
Returns F2^2.
Definition coherent_noise.hpp:31
@ CONSTANT
Constant value.
Definition coherent_noise.hpp:37
@ F1TF2_SQUARED
Returns (F1 * F2)^2.
Definition coherent_noise.hpp:32
@ F2MF1_SQUARED
Returns (F2 - F1)^2.
Definition coherent_noise.hpp:34
@ F1DF2_SQUARED
Returns (F1 / F2)^2.
Definition coherent_noise.hpp:33
@ EDGE_DISTANCE_EXP
Exponential edge distance.
Definition coherent_noise.hpp:35
Array worley_double(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, float ratio=0.5f, float k=0.f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with the maximum of two Worley (cellular) noises.
Definition worley.cpp:15
Array noise_parberry(glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, float mu=1.02f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherent fbm Parberry variant of Perlin noise.
Definition noise.cpp:159
Array noise(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence noise.
Definition noise.cpp:16
float angle(const Point &p1, const Point &p2)
Computes the angle between two points relative to the x-axis.
Definition points.cpp:46
NoiseType
Enumeration of various noise types used for procedural generation.
Definition functions.hpp:67
Array noise_iq(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, float gradient_scale=0.05f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:77
Array noise_swiss(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, std::uint32_t seed, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f, float warp_scale=0.1f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm swiss noise.
Definition noise.cpp:268