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 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
92 int subsampling = 1);
93
94Array dendry(glm::ivec2 shape,
95 glm::vec2 kw,
96 std::uint32_t seed,
97 NoiseFunction &noise_function,
98 float noise_function_offset = 0.f,
99 float noise_function_scaling = 1.f,
100 float eps = 0.05,
101 int resolution = 1,
102 float displacement = 0.075,
103 int primitives_resolution_steps = 3,
104 float slope_power = 2.f,
105 float noise_amplitude_proportion = 0.01,
106 bool add_control_function = true,
107 float control_function_overlap = 0.5f,
108 const Array *p_noise_x = nullptr,
109 const Array *p_noise_y = nullptr,
110 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
111
155Array diffusion_limited_aggregation(glm::ivec2 shape,
156 float scale,
157 std::uint32_t seed,
158 float seeding_radius = 0.4f,
159 float seeding_outer_radius_ratio = 0.2f,
160 float slope = 8.f,
161 float noise_ratio = 0.2f);
162
164 glm::ivec2 shape,
165 std::uint32_t seed,
166 size_t control_points_count = 5000,
167 glm::vec2 seed_position = {0.5f, 0.5f},
168 float ratio = 0.98f,
169 float stop_proba = 1.f,
170 float slope = 16.f,
171 InterpolationMethod2D interpolation_method =
173 const Array *p_noise_x = nullptr,
174 const Array *p_noise_y = nullptr);
175
193Array gabor_noise(glm::ivec2 shape,
194 float kw,
195 float angle,
196 int width,
197 float density,
198 std::uint32_t seed);
199
218Array noise(NoiseType noise_type,
219 glm::ivec2 shape,
220 glm::vec2 kw,
221 std::uint32_t seed,
222 const Array *p_noise_x = nullptr,
223 const Array *p_noise_y = nullptr,
224 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
225
257Array noise_fbm(NoiseType noise_type,
258 glm::ivec2 shape,
259 glm::vec2 kw,
260 std::uint32_t seed,
261 int octaves = 8,
262 float weight = 0.7f,
263 float persistence = 0.5f,
264 float lacunarity = 2.f,
265 const Array *p_ctrl_param = nullptr,
266 const Array *p_noise_x = nullptr,
267 const Array *p_noise_y = nullptr,
268 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
269
302Array noise_iq(NoiseType noise_type,
303 glm::ivec2 shape,
304 glm::vec2 kw,
305 std::uint32_t seed,
306 int octaves = 8,
307 float weight = 0.7f,
308 float persistence = 0.5f,
309 float lacunarity = 2.f,
310 float gradient_scale = 0.05f,
311 const Array *p_ctrl_param = nullptr,
312 const Array *p_noise_x = nullptr,
313 const Array *p_noise_y = nullptr,
314 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
315
351Array noise_jordan(NoiseType noise_type,
352 glm::ivec2 shape,
353 glm::vec2 kw,
354 std::uint32_t seed,
355 int octaves = 8,
356 float weight = 0.7f,
357 float persistence = 0.5f,
358 float lacunarity = 2.f,
359 float warp0 = 0.4f,
360 float damp0 = 1.f,
361 float warp_scale = 0.4f,
362 float damp_scale = 1.f,
363 const Array *p_ctrl_param = nullptr,
364 const Array *p_noise_x = nullptr,
365 const Array *p_noise_y = nullptr,
366 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
367
400Array noise_parberry(glm::ivec2 shape,
401 glm::vec2 kw,
402 std::uint32_t seed,
403 int octaves = 8,
404 float weight = 0.7f,
405 float persistence = 0.5f,
406 float lacunarity = 2.f,
407 float mu = 1.02f,
408 const Array *p_ctrl_param = nullptr,
409 const Array *p_noise_x = nullptr,
410 const Array *p_noise_y = nullptr,
411 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
412
444Array noise_pingpong(NoiseType noise_type,
445 glm::ivec2 shape,
446 glm::vec2 kw,
447 std::uint32_t seed,
448 int octaves = 8,
449 float weight = 0.7f,
450 float persistence = 0.5f,
451 float lacunarity = 2.f,
452 const Array *p_ctrl_param = nullptr,
453 const Array *p_noise_x = nullptr,
454 const Array *p_noise_y = nullptr,
455 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
456
489Array noise_ridged(NoiseType noise_type,
490 glm::ivec2 shape,
491 glm::vec2 kw,
492 std::uint32_t seed,
493 int octaves = 8,
494 float weight = 0.7f,
495 float persistence = 0.5f,
496 float lacunarity = 2.f,
497 float k_smoothing = 0.1f,
498 const Array *p_ctrl_param = nullptr,
499 const Array *p_noise_x = nullptr,
500 const Array *p_noise_y = nullptr,
501 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
502
535Array noise_swiss(NoiseType noise_type,
536 glm::ivec2 shape,
537 glm::vec2 kw,
538 std::uint32_t seed,
539 int octaves = 8,
540 float weight = 0.7f,
541 float persistence = 0.5f,
542 float lacunarity = 2.f,
543 float warp_scale = 0.1f,
544 const Array *p_ctrl_param = nullptr,
545 const Array *p_noise_x = nullptr,
546 const Array *p_noise_y = nullptr,
547 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
548
572Array worley_double(glm::ivec2 shape,
573 glm::vec2 kw,
574 std::uint32_t seed,
575 float ratio = 0.5f,
576 float k = 0.f,
577 const Array *p_ctrl_param = nullptr,
578 const Array *p_noise_x = nullptr,
579 const Array *p_noise_y = nullptr,
580 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
581
582} // namespace hmap
583
584namespace hmap::gpu
585{
586
610Array gabor_wave(glm::ivec2 shape,
611 glm::vec2 kw,
612 std::uint32_t seed,
613 const Array &angle,
614 float angle_spread_ratio = 1.f,
615 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
616
617Array gabor_wave(glm::ivec2 shape,
618 glm::vec2 kw,
619 std::uint32_t seed,
620 float angle = 0.f,
621 float angle_spread_ratio = 1.f,
622 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
623
656Array gabor_wave_fbm(glm::ivec2 shape,
657 glm::vec2 kw,
658 std::uint32_t seed,
659 const Array &angle,
660 float angle_spread_ratio = 1.f,
661 int octaves = 8,
662 float weight = 0.7f,
663 float persistence = 0.5f,
664 float lacunarity = 2.f,
665 const Array *p_ctrl_param = nullptr,
666 const Array *p_noise_x = nullptr,
667 const Array *p_noise_y = nullptr,
668 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
669
670Array gabor_wave_fbm(glm::ivec2 shape,
671 glm::vec2 kw,
672 std::uint32_t seed,
673 float angle = 0.f,
674 float angle_spread_ratio = 1.f,
675 int octaves = 8,
676 float weight = 0.7f,
677 float persistence = 0.5f,
678 float lacunarity = 2.f,
679 const Array *p_ctrl_param = nullptr,
680 const Array *p_noise_x = nullptr,
681 const Array *p_noise_y = nullptr,
682 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
683
731Array gavoronoise(glm::ivec2 shape,
732 glm::vec2 kw,
733 std::uint32_t seed,
734 const Array &angle,
735 float amplitude = 0.05f,
736 float angle_spread_ratio = 1.f,
737 glm::vec2 kw_multiplier = {4.f, 4.f},
738 float slope_strength = 1.f,
739 float branch_strength = 2.f,
740 float z_cut_min = 0.2f,
741 float z_cut_max = 1.f,
742 int octaves = 8,
743 float persistence = 0.4f,
744 float lacunarity = 2.f,
745 const Array *p_ctrl_param = nullptr,
746 const Array *p_noise_x = nullptr,
747 const Array *p_noise_y = nullptr,
748 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
749
750Array gavoronoise(glm::ivec2 shape,
751 glm::vec2 kw,
752 std::uint32_t seed,
753 float angle = 0.f,
754 float amplitude = 0.05f,
755 float angle_spread_ratio = 1.f,
756 glm::vec2 kw_multiplier = {4.f, 4.f},
757 float slope_strength = 1.f,
758 float branch_strength = 2.f,
759 float z_cut_min = 0.2f,
760 float z_cut_max = 1.f,
761 int octaves = 8,
762 float persistence = 0.4f,
763 float lacunarity = 2.f,
764 const Array *p_ctrl_param = nullptr,
765 const Array *p_noise_x = nullptr,
766 const Array *p_noise_y = nullptr,
767 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
768
769Array gavoronoise(const Array &base,
770 glm::vec2 kw,
771 std::uint32_t seed,
772 float amplitude = 0.05f,
773 glm::vec2 kw_multiplier = {4.f, 4.f},
774 float slope_strength = 1.f,
775 float branch_strength = 2.f,
776 float z_cut_min = 0.2f,
777 float z_cut_max = 1.f,
778 int octaves = 8,
779 float persistence = 0.4f,
780 float lacunarity = 2.f,
781 const Array *p_ctrl_param = nullptr,
782 const Array *p_noise_x = nullptr,
783 const Array *p_noise_y = nullptr,
784 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
785
793Array noise(NoiseType noise_type,
794 glm::ivec2 shape,
795 glm::vec2 kw,
796 std::uint32_t seed,
797 const Array *p_noise_x = nullptr,
798 const Array *p_noise_y = nullptr,
799 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
800 glm::ivec2 period = {0, 0});
801
809Array noise_fbm(NoiseType noise_type,
810 glm::ivec2 shape,
811 glm::vec2 kw,
812 std::uint32_t seed,
813 int octaves = 8,
814 float weight = 0.7f,
815 float persistence = 0.5f,
816 float lacunarity = 2.f,
817 const Array *p_ctrl_param = nullptr,
818 const Array *p_noise_x = nullptr,
819 const Array *p_noise_y = nullptr,
820 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
821 glm::ivec2 period = {0, 0});
822
850Array phasor(PhasorProfile phasor_profile,
851 glm::ivec2 shape,
852 float kp_global,
853 std::uint32_t seed,
854 float angle_shift = 0.f,
855 int n_kernel_samples = 8,
856 const glm::vec2 jitter = {1.f, 1.f},
857 float delta = 0.01f,
858 float phase_smoothing = 10.f,
859 const Array *p_angle = nullptr,
860 const Array *p_noise_x = nullptr,
861 const Array *p_noise_y = nullptr,
862 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
863
895Array phasor_fbm(PhasorProfile phasor_profile,
896 glm::ivec2 shape,
897 float kp_global,
898 std::uint32_t seed,
899 float angle_shift = 0.f,
900 int octaves = 8,
901 float weight = 0.7f,
902 float persistence = 0.5f,
903 float lacunarity = 2.f,
904 int n_kernel_samples = 8,
905 const glm::vec2 jitter = {1.f, 1.f},
906 float delta = 0.01f,
907 float phase_smoothing = 10.f,
908 const Array *p_angle = nullptr,
909 const Array *p_noise_x = nullptr,
910 const Array *p_noise_y = nullptr,
911 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
912
958Array vorolines(glm::ivec2 shape,
959 float density,
960 std::uint32_t seed,
961 float k_smoothing = 0.f,
962 float exp_sigma = 0.f,
963 float alpha = 0.f,
964 float alpha_span = M_PI,
966 const Array *p_noise_x = nullptr,
967 const Array *p_noise_y = nullptr,
968 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
969 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
970
1026Array vorolines_fbm(
1027 glm::ivec2 shape,
1028 float density,
1029 std::uint32_t seed,
1030 float k_smoothing = 0.f,
1031 float exp_sigma = 0.f,
1032 float alpha = 0.f,
1033 float alpha_span = M_PI,
1035 int octaves = 8,
1036 float weight = 0.7f,
1037 float persistence = 0.5f,
1038 float lacunarity = 2.f,
1039 const Array *p_noise_x = nullptr,
1040 const Array *p_noise_y = nullptr,
1041 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
1042 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
1043
1083Array voronoi(glm::ivec2 shape,
1084 glm::vec2 kw,
1085 std::uint32_t seed,
1086 glm::vec2 jitter = {0.5f, 0.5f},
1087 float k_smoothing = 0.f,
1088 float exp_sigma = 0.f,
1090 const Array *p_ctrl_param = nullptr,
1091 const Array *p_noise_x = nullptr,
1092 const Array *p_noise_y = nullptr,
1093 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1094
1141Array voronoi_fbm(glm::ivec2 shape,
1142 glm::vec2 kw,
1143 std::uint32_t seed,
1144 glm::vec2 jitter = {0.5f, 0.5f},
1145 float k_smoothing = 0.f,
1146 float exp_sigma = 0.f,
1148 int octaves = 8,
1149 float weight = 0.7f,
1150 float persistence = 0.5f,
1151 float lacunarity = 2.f,
1152 const Array *p_ctrl_param = nullptr,
1153 const Array *p_noise_x = nullptr,
1154 const Array *p_noise_y = nullptr,
1155 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1156
1183Array voronoi_edge_distance(glm::ivec2 shape,
1184 glm::vec2 kw,
1185 std::uint32_t seed,
1186 glm::vec2 jitter = {0.5f, 0.5f},
1187 const Array *p_ctrl_param = nullptr,
1188 const Array *p_noise_x = nullptr,
1189 const Array *p_noise_y = nullptr,
1190 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1191
1228Array voronoise(glm::ivec2 shape,
1229 glm::vec2 kw,
1230 float u_param,
1231 float v_param,
1232 std::uint32_t seed,
1233 const Array *p_noise_x = nullptr,
1234 const Array *p_noise_y = nullptr,
1235 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1236
1264Array voronoise_fbm(glm::ivec2 shape,
1265 glm::vec2 kw,
1266 float u_param,
1267 float v_param,
1268 std::uint32_t seed,
1269 int octaves = 8,
1270 float weight = 0.7f,
1271 float persistence = 0.5f,
1272 float lacunarity = 2.f,
1273 const Array *p_ctrl_param = nullptr,
1274 const Array *p_noise_x = nullptr,
1275 const Array *p_noise_y = nullptr,
1276 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1277
1326Array vororand(glm::ivec2 shape,
1327 float density,
1328 float variability,
1329 std::uint32_t seed,
1330 float k_smoothing = 0.f,
1331 float exp_sigma = 0.f,
1333 const Array *p_noise_x = nullptr,
1334 const Array *p_noise_y = nullptr,
1335 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
1336 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
1337
1338Array vororand(glm::ivec2 shape,
1339 const std::vector<float> &xp,
1340 const std::vector<float> &yp,
1341 float k_smoothing = 0.f,
1342 float exp_sigma = 0.f,
1344 const Array *p_noise_x = nullptr,
1345 const Array *p_noise_y = nullptr,
1346 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1347
1404Array wavelet_noise(glm::ivec2 shape,
1405 glm::vec2 kw,
1406 std::uint32_t seed,
1407 float kw_multiplier = 2.f,
1408 float vorticity = 0.f,
1409 float density = 1.f,
1410 int octaves = 8,
1411 float weight = 0.7f,
1412 float persistence = 0.5f,
1413 float lacunarity = 2.f,
1414 const Array *p_ctrl_param = nullptr,
1415 const Array *p_noise_x = nullptr,
1416 const Array *p_noise_y = nullptr,
1417 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1418
1419} // 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:225
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, 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:615
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, 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:573
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:79
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:1093
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:818
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:1054
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:901
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:1187
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:196
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:1285
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:54
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:950
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:998
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:18
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:102
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:1145
Definition algebra.hpp:23
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, 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:333
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, 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:178
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence noise.
Definition noise.cpp:17
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:86
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:116
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:18
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm swiss noise.
Definition noise.cpp:302
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:26
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm pingpong noise.
Definition noise.cpp:218
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_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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:129
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:45
Cloud scale(const Cloud &cloud, glm::vec2 scale, glm::vec2 center={0.5f, 0.5f})
Scales the point coordinates in a cloud relative to a center point.
Definition cloud_functions.cpp:165
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, 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:16
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
float angle(const Point &p1, const Point &p2)
Computes the angle between two points relative to the x-axis.
Definition points.cpp:52
NoiseType
Enumeration of various noise types used for procedural generation.
Definition functions.hpp:66
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, 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:32
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, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm ridged noise.
Definition noise.cpp:259