18#include "FastNoiseLite.h"
24#define HMAP_GRADIENT_OFFSET 0.001f
74 const glm::ivec2 &shape,
75 const Array *p_noise_x =
nullptr,
76 const Array *p_noise_y =
nullptr,
77 glm::vec2 center = {0.5f, 0.5f},
78 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
100 const Array *p_ctrl_param =
nullptr,
101 const Array *p_noise_x =
nullptr,
102 const Array *p_noise_y =
nullptr,
103 const Array *p_stretching =
nullptr,
104 glm::vec2 center = {0.5f, 0.5f},
105 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
107Array
biquad_pulse_x(glm::ivec2 shape, glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
108Array
biquad_pulse_y(glm::ivec2 shape, glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
129Array
bump(glm::ivec2 shape,
131 const Array *p_ctrl_param =
nullptr,
132 const Array *p_noise_x =
nullptr,
133 const Array *p_noise_y =
nullptr,
134 const Array *p_stretching =
nullptr,
135 glm::vec2 center = {0.5f, 0.5f},
136 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
183 float shape_factor = 0.5f,
185 const Array *p_ctrl_param =
nullptr,
186 const Array *p_noise_x =
nullptr,
187 const Array *p_noise_y =
nullptr,
188 glm::vec2 center = {0.5f, 0.5f},
189 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
217 const Array *p_noise,
220 glm::vec2 center = {0.5f, 0.5f},
221 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
228 glm::vec2 center = {0.5f, 0.5f},
229 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
249 const Array *p_noise_x =
nullptr,
250 const Array *p_noise_y =
nullptr,
251 const Array *p_stretching =
nullptr,
252 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
281Array
cone(glm::ivec2 shape,
283 float apex_elevation = 1.f,
284 bool smooth_profile =
false,
285 glm::vec2 center = {0.5f, 0.5f},
286 const Array *p_noise_x =
nullptr,
287 const Array *p_noise_y =
nullptr,
288 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
347 bool smooth_profile =
true,
348 float valley_amp = 0.2f,
350 float valley_decay_ratio = 0.5f,
351 float valley_angle0 = 15.f,
353 float erosion_delta = 0.01f,
354 float radial_waviness_amp = 0.05f,
355 float radial_waviness_kw = 2.f,
356 float bias_angle = 30.f,
357 float bias_amp = 0.75f,
358 float bias_exponent = 1.f,
359 glm::vec2 center = {0.5f, 0.5f},
360 const Array *p_ctrl_param =
nullptr,
361 const Array *p_noise_x =
nullptr,
362 const Array *p_noise_y =
nullptr,
363 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
399 glm::vec2 center = {0.5f, 0.5f},
400 const Array *p_noise_x =
nullptr,
401 const Array *p_noise_y =
nullptr,
402 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
411Array
constant(glm::ivec2 shape,
float value = 0.f);
435Array
crater(glm::ivec2 shape,
439 float lip_height_ratio = 0.5f,
440 const Array *p_ctrl_param =
nullptr,
441 const Array *p_noise_x =
nullptr,
442 const Array *p_noise_y =
nullptr,
443 glm::vec2 center = {0.5f, 0.5f},
444 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
450 const Array *p_noise_x,
451 const Array *p_noise_y,
452 glm::vec2 center = {0.5f, 0.5f},
453 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
491Array
dendry(glm::ivec2 shape,
494 Array &control_function,
497 float displacement = 0.075,
498 int primitives_resolution_steps = 3,
499 float slope_power = 2.f,
500 float noise_amplitude_proportion = 0.01,
501 bool add_control_function =
true,
502 float control_function_overlap = 0.5f,
503 const Array *p_noise_x =
nullptr,
504 const Array *p_noise_y =
nullptr,
505 const Array *p_stretching =
nullptr,
506 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
507 int subsampling = 1);
509Array
dendry(glm::ivec2 shape,
512 NoiseFunction &noise_function,
513 float noise_function_offset = 0.f,
514 float noise_function_scaling = 1.f,
517 float displacement = 0.075,
518 int primitives_resolution_steps = 3,
519 float slope_power = 2.f,
520 float noise_amplitude_proportion = 0.01,
521 bool add_control_function =
true,
522 float control_function_overlap = 0.5f,
523 const Array *p_noise_x =
nullptr,
524 const Array *p_noise_y =
nullptr,
525 const Array *p_stretching =
nullptr,
526 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
574 float seeding_radius = 0.4f,
575 float seeding_outer_radius_ratio = 0.2f,
577 float noise_ratio = 0.2f);
582 size_t control_points_count = 5000,
583 glm::vec2 seed_position = {0.5f, 0.5f},
585 float stop_proba = 1.f,
589 const Array *p_noise_x =
nullptr,
590 const Array *p_noise_y =
nullptr);
626Array
disk(glm::ivec2 shape,
629 const Array *p_ctrl_param =
nullptr,
630 const Array *p_noise_x =
nullptr,
631 const Array *p_noise_y =
nullptr,
632 const Array *p_stretching =
nullptr,
633 glm::vec2 center = {0.5f, 0.5f},
634 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
682 const Array *p_ctrl_param =
nullptr,
683 const Array *p_noise_x =
nullptr,
684 const Array *p_noise_y =
nullptr,
685 const Array *p_stretching =
nullptr,
686 glm::vec2 center = {0.5f, 0.5f},
687 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
720 float displacement = 0.2f,
725 float persistence = 0.5f,
726 float lacunarity = 2.f,
727 const glm::vec2 ¢er = {0.5f, 0.5f},
728 const glm::vec4 &bbox = {0.f, 1.f, 0.f, 1.f});
763 float elevation_exponent = 0.7f,
764 float shape_gain = 4.f,
766 float outer_slope = 0.1f,
767 const Array *p_ctrl_param =
nullptr,
768 const Array *p_noise_x =
nullptr,
769 const Array *p_noise_y =
nullptr,
770 const glm::vec2 ¢er = {0.5f, 0.5f},
771 const glm::vec4 &bbox = {0.f, 1.f, 0.f, 1.f});
795 const Array *p_noise_x =
nullptr,
796 const Array *p_noise_y =
nullptr,
797 const Array *p_stretching =
nullptr,
798 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
837 float persistence = 0.5f,
838 float lacunarity = 2.f,
839 const Array *p_ctrl_param =
nullptr,
840 const Array *p_noise_x =
nullptr,
841 const Array *p_noise_y =
nullptr,
842 const Array *p_stretching =
nullptr,
843 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
883 float persistence = 0.5f,
884 float lacunarity = 2.f,
885 float gradient_scale = 0.05f,
886 const Array *p_ctrl_param =
nullptr,
887 const Array *p_noise_x =
nullptr,
888 const Array *p_noise_y =
nullptr,
889 const Array *p_stretching =
nullptr,
890 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
933 float persistence = 0.5f,
934 float lacunarity = 2.f,
937 float warp_scale = 0.4f,
938 float damp_scale = 1.f,
939 const Array *p_ctrl_param =
nullptr,
940 const Array *p_noise_x =
nullptr,
941 const Array *p_noise_y =
nullptr,
942 const Array *p_stretching =
nullptr,
943 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
982 float persistence = 0.5f,
983 float lacunarity = 2.f,
985 const Array *p_ctrl_param =
nullptr,
986 const Array *p_noise_x =
nullptr,
987 const Array *p_noise_y =
nullptr,
988 const Array *p_stretching =
nullptr,
989 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1027 float weight = 0.7f,
1028 float persistence = 0.5f,
1029 float lacunarity = 2.f,
1030 const Array *p_ctrl_param =
nullptr,
1031 const Array *p_noise_x =
nullptr,
1032 const Array *p_noise_y =
nullptr,
1033 const Array *p_stretching =
nullptr,
1034 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1073 float weight = 0.7f,
1074 float persistence = 0.5f,
1075 float lacunarity = 2.f,
1076 float k_smoothing = 0.1f,
1077 const Array *p_ctrl_param =
nullptr,
1078 const Array *p_noise_x =
nullptr,
1079 const Array *p_noise_y =
nullptr,
1080 const Array *p_stretching =
nullptr,
1081 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1120 float weight = 0.7f,
1121 float persistence = 0.5f,
1122 float lacunarity = 2.f,
1123 float warp_scale = 0.1f,
1124 const Array *p_ctrl_param =
nullptr,
1125 const Array *p_noise_x =
nullptr,
1126 const Array *p_noise_y =
nullptr,
1127 const Array *p_stretching =
nullptr,
1128 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1158 bool reverse_x =
false,
1159 bool reverse_y =
false,
1160 const Array *p_noise_x =
nullptr,
1161 const Array *p_noise_y =
nullptr,
1162 const Array *p_stretching =
nullptr,
1163 glm::vec2 center = {0.5f, 0.5f},
1164 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1184Array
peak(glm::ivec2 shape,
1186 const Array *p_noise,
1188 float noise_z_ratio,
1189 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1234 const Array *p_ctrl_param =
nullptr,
1235 const Array *p_noise_x =
nullptr,
1236 const Array *p_noise_y =
nullptr,
1237 const Array *p_stretching =
nullptr,
1238 glm::vec2 center = {0.5f, 0.5f},
1239 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1264Array
rift(glm::ivec2 shape,
1268 bool sharp_bottom =
false,
1269 const Array *p_ctrl_param =
nullptr,
1270 const Array *p_noise_x =
nullptr,
1271 const Array *p_noise_y =
nullptr,
1272 const Array *p_stretching =
nullptr,
1273 glm::vec2 center = {0.5f, 0.5f},
1274 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1296Array
slope(glm::ivec2 shape,
1299 const Array *p_ctrl_param =
nullptr,
1300 const Array *p_noise_x =
nullptr,
1301 const Array *p_noise_y =
nullptr,
1302 const Array *p_stretching =
nullptr,
1303 glm::vec2 center = {0.5f, 0.5f},
1304 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1310 const Array *p_noise_x,
1311 const Array *p_noise_y,
1312 glm::vec2 center = {0.5f, 0.5f},
1313 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1336Array
step(glm::ivec2 shape,
1339 const Array *p_ctrl_param =
nullptr,
1340 const Array *p_noise_x =
nullptr,
1341 const Array *p_noise_y =
nullptr,
1342 const Array *p_stretching =
nullptr,
1343 glm::vec2 center = {0.5f, 0.5f},
1344 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1363void swirl(Array &dx,
1365 float amplitude = 1.f,
1366 float exponent = 1.f,
1367 const Array *p_noise =
nullptr,
1368 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1391 float phase_shift = 0.f,
1392 const Array *p_noise_x =
nullptr,
1393 const Array *p_noise_y =
nullptr,
1394 const Array *p_stretching =
nullptr,
1395 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1419 float phase_shift = 0.f,
1420 const Array *p_noise_x =
nullptr,
1421 const Array *p_noise_y =
nullptr,
1422 const Array *p_stretching =
nullptr,
1423 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1447 float phase_shift = 0.f,
1448 const Array *p_noise_x =
nullptr,
1449 const Array *p_noise_y =
nullptr,
1450 const Array *p_stretching =
nullptr,
1451 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1478 float phase_shift = 0.f,
1479 const Array *p_noise_x =
nullptr,
1480 const Array *p_noise_y =
nullptr,
1481 const Array *p_stretching =
nullptr,
1482 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1501Array
white(glm::ivec2 shape,
float a,
float b,
uint seed);
1582 const Array *p_ctrl_param =
nullptr,
1583 const Array *p_noise_x =
nullptr,
1584 const Array *p_noise_y =
nullptr,
1585 const Array *p_stretching =
nullptr,
1586 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1632 float k_smoothing = 0.1f,
1633 float base_noise_amp = 0.2f,
1634 const Array *p_noise_x =
nullptr,
1635 const Array *p_noise_y =
nullptr,
1636 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1717 float warp_kw = 4.f,
1718 float large_scale_warp_amp = 0.2f,
1719 float large_scale_gain = 6.f,
1720 float large_scale_amp = 0.2f,
1721 float medium_scale_kw_ratio = 3.f,
1722 float medium_scale_warp_amp = 1.f,
1723 float medium_scale_gain = 7.f,
1724 float medium_scale_amp = 0.08f,
1725 float small_scale_kw_ratio = 10.f,
1726 float small_scale_amp = 0.1f,
1727 float small_scale_overlay_amp = 0.002f,
1728 float rugosity_kw_ratio = 1.f,
1729 float rugosity_amp = 1.f,
1730 bool flatten_activate =
true,
1731 float flatten_kw_ratio = 1.f,
1732 float flatten_amp = 0.f,
1733 const Array *p_noise_x =
nullptr,
1734 const Array *p_noise_y =
nullptr,
1735 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1764 float angle_spread_ratio = 1.f,
1765 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1771 float angle_spread_ratio = 1.f,
1772 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1810 float angle_spread_ratio = 1.f,
1812 float weight = 0.7f,
1813 float persistence = 0.5f,
1814 float lacunarity = 2.f,
1815 const Array *p_ctrl_param =
nullptr,
1816 const Array *p_noise_x =
nullptr,
1817 const Array *p_noise_y =
nullptr,
1818 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1824 float angle_spread_ratio = 1.f,
1826 float weight = 0.7f,
1827 float persistence = 0.5f,
1828 float lacunarity = 2.f,
1829 const Array *p_ctrl_param =
nullptr,
1830 const Array *p_noise_x =
nullptr,
1831 const Array *p_noise_y =
nullptr,
1832 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1885 float amplitude = 0.05f,
1886 float angle_spread_ratio = 1.f,
1887 glm::vec2 kw_multiplier = {4.f, 4.f},
1888 float slope_strength = 1.f,
1889 float branch_strength = 2.f,
1890 float z_cut_min = 0.2f,
1891 float z_cut_max = 1.f,
1893 float persistence = 0.4f,
1894 float lacunarity = 2.f,
1895 const Array *p_ctrl_param =
nullptr,
1896 const Array *p_noise_x =
nullptr,
1897 const Array *p_noise_y =
nullptr,
1898 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1904 float amplitude = 0.05f,
1905 float angle_spread_ratio = 1.f,
1906 glm::vec2 kw_multiplier = {4.f, 4.f},
1907 float slope_strength = 1.f,
1908 float branch_strength = 2.f,
1909 float z_cut_min = 0.2f,
1910 float z_cut_max = 1.f,
1912 float persistence = 0.4f,
1913 float lacunarity = 2.f,
1914 const Array *p_ctrl_param =
nullptr,
1915 const Array *p_noise_x =
nullptr,
1916 const Array *p_noise_y =
nullptr,
1917 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1922 float amplitude = 0.05f,
1923 glm::vec2 kw_multiplier = {4.f, 4.f},
1924 float slope_strength = 1.f,
1925 float branch_strength = 2.f,
1926 float z_cut_min = 0.2f,
1927 float z_cut_max = 1.f,
1929 float persistence = 0.4f,
1930 float lacunarity = 2.f,
1931 const Array *p_ctrl_param =
nullptr,
1932 const Array *p_noise_x =
nullptr,
1933 const Array *p_noise_y =
nullptr,
1934 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1969 float amplitude_random_ratio = 1.f,
1970 float density = 0.1f,
1971 glm::vec2 jitter = {1.f, 1.f},
1973 const Array *p_noise_x =
nullptr,
1974 const Array *p_noise_y =
nullptr,
1975 const Array *p_noise_distance =
nullptr,
1976 const Array *p_density_multiplier =
nullptr,
1977 const Array *p_size_multiplier =
nullptr,
1978 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1986 float amplitude_random_ratio = 1.f,
1987 float density = 0.1f,
1988 glm::vec2 jitter = {0.5f, 0.5f},
1991 float persistence = 0.5f,
1992 float lacunarity = 2.f,
1993 const Array *p_noise_x =
nullptr,
1994 const Array *p_noise_y =
nullptr,
1995 const Array *p_noise_distance =
nullptr,
1996 const Array *p_density_multiplier =
nullptr,
1997 const Array *p_size_multiplier =
nullptr,
1998 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2038Array
island(
const Array &land_mask,
2039 const Array *p_noise_r =
nullptr,
2040 float apex_elevation = 1.f,
2041 bool filter_distance =
true,
2043 float slope_min = 0.1f,
2044 float slope_max = 8.f,
2045 float slope_start = 0.5f,
2046 float slope_end = 1.f,
2047 float slope_noise_intensity = 0.5f,
2048 float k_smooth = 0.05f,
2049 float radial_noise_intensity = 0.3f,
2050 float radial_profile_gain = 2.f,
2051 float water_decay = 0.05f,
2052 float water_depth = 0.3f,
2053 float lee_angle = 30.f,
2054 float lee_amp = 0.f,
2055 float uplift_amp = 0.f,
2056 Array *p_water_depth =
nullptr,
2057 Array *p_inland_mask =
nullptr);
2102Array
island(
const Array &land_mask,
2104 float noise_amp = 0.07f,
2105 glm::vec2 noise_kw = {4.f, 4.f},
2106 int noise_octaves = 8,
2107 float noise_rugosity = 0.7f,
2108 float noise_angle = 45.f,
2109 float noise_k_smoothing = 0.05f,
2110 float apex_elevation = 1.f,
2111 bool filter_distance =
true,
2113 float slope_min = 0.1f,
2114 float slope_max = 8.f,
2115 float slope_start = 0.5f,
2116 float slope_end = 1.f,
2117 float slope_noise_intensity = 0.5f,
2118 float k_smooth = 0.05f,
2119 float radial_noise_intensity = 0.3f,
2120 float radial_profile_gain = 2.f,
2121 float water_decay = 0.05f,
2122 float water_depth = 0.3f,
2123 float lee_angle = 30.f,
2124 float lee_amp = 0.f,
2125 float uplift_amp = 0.f,
2126 Array *p_water_depth =
nullptr,
2127 Array *p_inland_mask =
nullptr);
2180 float peak_kw = 4.f,
2183 float k_smoothing = 0.f,
2185 float cone_alpha = 1.f,
2186 float ridge_amp = 0.4f,
2187 float base_noise_amp = 0.05f,
2188 glm::vec2 center = {0.5f, 0.5f},
2189 const Array *p_noise_x =
nullptr,
2190 const Array *p_noise_y =
nullptr,
2191 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2245 bool round_shape =
false,
2246 bool add_deposition =
true,
2247 float bulk_amp = 0.2f,
2248 float base_noise_amp = 0.2f,
2249 float k_smoothing = 0.1f,
2250 glm::vec2 center = {0.5f, 0.5f},
2251 const Array *p_noise_x =
nullptr,
2252 const Array *p_noise_y =
nullptr,
2253 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2307 float half_width = 0.2f,
2308 float angle_spread_ratio = 0.5f,
2309 float core_size_ratio = 1.f,
2310 glm::vec2 center = {0.5f, 0.5f},
2312 float weight = 0.7f,
2313 float persistence = 0.5f,
2314 float lacunarity = 2.f,
2315 const Array *p_ctrl_param =
nullptr,
2316 const Array *p_noise_x =
nullptr,
2317 const Array *p_noise_y =
nullptr,
2318 const Array *p_angle =
nullptr,
2319 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2370 float peak_kw = 6.f,
2373 float k_smoothing = 0.f,
2374 float gamma = 0.25f,
2375 bool add_deposition =
true,
2376 float ridge_amp = 0.75f,
2377 float base_noise_amp = 0.1f,
2378 glm::vec2 center = {0.5f, 0.5f},
2379 const Array *p_noise_x =
nullptr,
2380 const Array *p_noise_y =
nullptr,
2381 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2432 float peak_kw = 20.f,
2435 float angle_spread_ratio = 0.25f,
2437 bool add_deposition =
true,
2438 float bulk_amp = 1.f,
2439 float base_noise_amp = 0.1f,
2440 glm::vec2 center = {0.5f, 0.5f},
2441 const Array *p_noise_x =
nullptr,
2442 const Array *p_noise_y =
nullptr,
2443 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2480 glm::vec2 kw = {2.f, 2.f},
2481 float noise_amp = 0.1f,
2482 float noise_rugosity = 0.f,
2483 bool noise_inflate =
true,
2486 float elevation_exponent = 0.7f,
2487 float shape_gain = 4.f,
2489 float outer_slope = 0.1f,
2490 const Array *p_ctrl_param =
nullptr,
2491 const glm::vec2 ¢er = {0.5f, 0.5f},
2492 const glm::vec4 &bbox = {0.f, 1.f, 0.f, 1.f});
2499 const Array *p_noise_x =
nullptr,
2500 const Array *p_noise_y =
nullptr,
2501 const Array *p_stretching =
nullptr,
2502 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2510 float weight = 0.7f,
2511 float persistence = 0.5f,
2512 float lacunarity = 2.f,
2513 const Array *p_ctrl_param =
nullptr,
2514 const Array *p_noise_x =
nullptr,
2515 const Array *p_noise_y =
nullptr,
2516 const Array *p_stretching =
nullptr,
2517 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2551 float angle_shift = 0.f,
2552 int n_kernel_samples = 8,
2553 const glm::vec2 jitter = {1.f, 1.f},
2554 int angle_filter_ir = 8,
2555 float delta = 0.01f,
2556 float phase_smoothing = 10.f,
2557 const Array *p_angle =
nullptr,
2558 const Array *p_noise_x =
nullptr,
2559 const Array *p_noise_y =
nullptr,
2560 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2598 float angle_shift = 0.f,
2600 float weight = 0.7f,
2601 float persistence = 0.5f,
2602 float lacunarity = 2.f,
2603 int n_kernel_samples = 8,
2604 const glm::vec2 jitter = {1.f, 1.f},
2605 int angle_filter_ir = 8,
2606 float delta = 0.01f,
2607 float phase_smoothing = 10.f,
2608 const Array *p_angle =
nullptr,
2609 const Array *p_noise_x =
nullptr,
2610 const Array *p_noise_y =
nullptr,
2611 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2639Array
plates(glm::ivec2 shape,
2644 float mix_ratio = 0.9f,
2645 float base_noise_amp = 0.05f,
2646 float kw_multiplier = 2.f,
2649 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2701 float clamping_dist = 0.1f,
2702 float clamping_k = 0.1f,
2703 int n_vertices_min = 3,
2704 int n_vertices_max = 16,
2705 float density = 0.5f,
2706 glm::vec2 jitter = {0.5f, 0.5f},
2708 const Array *p_noise_x =
nullptr,
2709 const Array *p_noise_y =
nullptr,
2710 const Array *p_noise_distance =
nullptr,
2711 const Array *p_density_multiplier =
nullptr,
2712 const Array *p_size_multiplier =
nullptr,
2713 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2764 float clamping_dist = 0.1f,
2765 float clamping_k = 0.1f,
2766 int n_vertices_min = 3,
2767 int n_vertices_max = 16,
2768 float density = 0.1f,
2769 glm::vec2 jitter = {0.5f, 0.5f},
2772 float persistence = 0.5f,
2773 float lacunarity = 2.f,
2774 const Array *p_noise_x =
nullptr,
2775 const Array *p_noise_y =
nullptr,
2776 const Array *p_noise_distance =
nullptr,
2777 const Array *p_density_multiplier =
nullptr,
2778 const Array *p_size_multiplier =
nullptr,
2779 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2829 float peak_kw = 4.f,
2833 bool add_deposition =
true,
2834 float bulk_amp = 0.3f,
2835 float base_noise_amp = 0.1f,
2836 float k_smoothing = 0.f,
2837 glm::vec2 center = {0.5f, 0.5f},
2838 const Array *p_noise_x =
nullptr,
2839 const Array *p_noise_y =
nullptr,
2840 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2890 float k_smoothing = 0.f,
2891 float exp_sigma = 0.f,
2893 float alpha_span = M_PI,
2895 const Array *p_noise_x =
nullptr,
2896 const Array *p_noise_y =
nullptr,
2897 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
2898 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
2959 float k_smoothing = 0.f,
2960 float exp_sigma = 0.f,
2962 float alpha_span = M_PI,
2965 float weight = 0.7f,
2966 float persistence = 0.5f,
2967 float lacunarity = 2.f,
2968 const Array *p_noise_x =
nullptr,
2969 const Array *p_noise_y =
nullptr,
2970 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
2971 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
3012Array
voronoi(glm::ivec2 shape,
3015 glm::vec2 jitter = {0.5f, 0.5f},
3016 float k_smoothing = 0.f,
3017 float exp_sigma = 0.f,
3019 const Array *p_ctrl_param =
nullptr,
3020 const Array *p_noise_x =
nullptr,
3021 const Array *p_noise_y =
nullptr,
3022 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3073 glm::vec2 jitter = {0.5f, 0.5f},
3074 float k_smoothing = 0.f,
3075 float exp_sigma = 0.f,
3078 float weight = 0.7f,
3079 float persistence = 0.5f,
3080 float lacunarity = 2.f,
3081 const Array *p_ctrl_param =
nullptr,
3082 const Array *p_noise_x =
nullptr,
3083 const Array *p_noise_y =
nullptr,
3084 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3115 glm::vec2 jitter = {0.5f, 0.5f},
3116 const Array *p_ctrl_param =
nullptr,
3117 const Array *p_noise_x =
nullptr,
3118 const Array *p_noise_y =
nullptr,
3119 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3162 const Array *p_noise_x =
nullptr,
3163 const Array *p_noise_y =
nullptr,
3164 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3199 float weight = 0.7f,
3200 float persistence = 0.5f,
3201 float lacunarity = 2.f,
3202 const Array *p_ctrl_param =
nullptr,
3203 const Array *p_noise_x =
nullptr,
3204 const Array *p_noise_y =
nullptr,
3205 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3259 float k_smoothing = 0.f,
3260 float exp_sigma = 0.f,
3262 const Array *p_noise_x =
nullptr,
3263 const Array *p_noise_y =
nullptr,
3264 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f},
3265 glm::vec4 bbox_points = {0.f, 1.f, 0.f, 1.f});
3268 const std::vector<float> &xp,
3269 const std::vector<float> &yp,
3270 float k_smoothing = 0.f,
3271 float exp_sigma = 0.f,
3273 const Array *p_noise_x =
nullptr,
3274 const Array *p_noise_y =
nullptr,
3275 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
3336 float kw_multiplier = 2.f,
3337 float vorticity = 0.f,
3338 float density = 1.f,
3340 float weight = 0.7f,
3341 float persistence = 0.5f,
3342 float lacunarity = 2.f,
3343 const Array *p_ctrl_param =
nullptr,
3344 const Array *p_noise_x =
nullptr,
3345 const Array *p_noise_y =
nullptr,
3346 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
unsigned int uint
Definition array.hpp:14
Defines modular function objects for procedural generation, including noise algorithms (Perlin,...
Definition blending.hpp:186
Array voronoi(glm::ivec2 shape, glm::vec2 kw, uint 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:826
Array mountain_cone(glm::ivec2 shape, uint seed, float scale=1.f, int octaves=8, float peak_kw=4.f, float rugosity=0.f, float angle=45.f, float k_smoothing=0.f, float gamma=0.5f, float cone_alpha=1.f, float ridge_amp=0.4f, float base_noise_amp=0.05f, glm::vec2 center={0.5f, 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})
Generates a procedural "mountain cone" heightmap using fractal noise and Voronoi patterns.
Definition mountain_cone.cpp:13
Array noise_fbm(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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})
See hmap::noise_fbm.
Definition primitives_gpu.cpp:529
Array polygon_field_fbm(glm::ivec2 shape, glm::vec2 kw, uint seed, float rmin=0.05f, float rmax=0.8f, float clamping_dist=0.1f, float clamping_k=0.1f, int n_vertices_min=3, int n_vertices_max=16, float density=0.1f, glm::vec2 jitter={0.5f, 0.5f}, float shift=0.1f, int octaves=8, float persistence=0.5f, float lacunarity=2.f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_noise_distance=nullptr, const Array *p_density_multiplier=nullptr, const Array *p_size_multiplier=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a scalar field representing the signed distance to randomly generated polygons combined wit...
Definition primitives_gpu.cpp:636
Array wavelet_noise(glm::ivec2 shape, glm::vec2 kw, uint 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:1127
Array voronoi_edge_distance(glm::ivec2 shape, glm::vec2 kw, uint 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:999
Array gabor_wave_fbm(glm::ivec2 shape, glm::vec2 kw, uint 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:85
Array hemisphere_field(glm::ivec2 shape, glm::vec2 kw, uint seed, float rmin=0.05f, float rmax=0.8f, float amplitude_random_ratio=1.f, float density=0.1f, glm::vec2 jitter={1.f, 1.f}, float shift=0.f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_noise_distance=nullptr, const Array *p_density_multiplier=nullptr, const Array *p_size_multiplier=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a scalar field representing the signed distance to randomly generated hemispheres.
Definition primitives_gpu.cpp:324
Array mountain_range_radial(glm::ivec2 shape, glm::vec2 kw, uint seed, float half_width=0.2f, float angle_spread_ratio=0.5f, float core_size_ratio=1.f, glm::vec2 center={0.5f, 0.5f}, 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_angle=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a heightmap representing a radial mountain range.
Definition primitives_gpu.cpp:438
Array vorolines(glm::ivec2 shape, float density, uint 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:702
Array gabor_wave(glm::ivec2 shape, glm::vec2 kw, uint 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:42
Array mountain_inselberg(glm::ivec2 shape, uint seed, float scale=1.f, int octaves=8, float rugosity=0.2f, float angle=45.f, float gamma=1.1f, bool round_shape=false, bool add_deposition=true, float bulk_amp=0.2f, float base_noise_amp=0.2f, float k_smoothing=0.1f, glm::vec2 center={0.5f, 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})
Generates a synthetic mountain-like inselberg (isolated hill) heightmap.
Definition mountain_inselberg.cpp:13
Array gavoronoise(glm::ivec2 shape, glm::vec2 kw, uint 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:166
Array badlands(glm::ivec2 shape, glm::vec2 kw, uint seed, int octaves=8, float rugosity=0.2f, float angle=30.f, float k_smoothing=0.1f, float base_noise_amp=0.2f, 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 synthetic "badlands" terrain heightmap.
Definition badlands.cpp:13
Array phasor(PhasorProfile phasor_profile, glm::ivec2 shape, float kp_global, uint seed, float angle_shift=0.f, int n_kernel_samples=8, const glm::vec2 jitter={1.f, 1.f}, int angle_filter_ir=8, 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:11
Array mountain_stump(glm::ivec2 shape, uint seed, float scale=1.f, int octaves=8, float peak_kw=6.f, float rugosity=0.f, float angle=45.f, float k_smoothing=0.f, float gamma=0.25f, bool add_deposition=true, float ridge_amp=0.75f, float base_noise_amp=0.1f, glm::vec2 center={0.5f, 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})
Generates a mountain-like heightmap with a flattened (stump-shaped) peak.
Definition mountain_stump.cpp:13
Array rugosity(const Array &z, int ir, bool convex=true)
See hmap::rugosity.
Definition local_metrics_gpu.cpp:195
Array multisteps(glm::ivec2 shape, float angle, uint seed, glm::vec2 kw={2.f, 2.f}, float noise_amp=0.1f, float noise_rugosity=0.f, bool noise_inflate=true, float r=1.2f, int nsteps=8, float elevation_exponent=0.7f, float shape_gain=4.f, float scale=0.5f, float outer_slope=0.1f, const Array *p_ctrl_param=nullptr, const glm::vec2 ¢er={0.5f, 0.5f}, const glm::vec4 &bbox={0.f, 1.f, 0.f, 1.f})
GPU-accelerated multi-step height generation with procedural noise.
Definition multisteps.cpp:83
Array voronoise(glm::ivec2 shape, glm::vec2 kw, float u_param, float v_param, uint 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:918
Array mountain_tibesti(glm::ivec2 shape, uint seed, float scale=1.f, int octaves=8, float peak_kw=20.f, float rugosity=0.f, float angle=30.f, float angle_spread_ratio=0.25f, float gamma=1.f, bool add_deposition=true, float bulk_amp=1.f, float base_noise_amp=0.1f, glm::vec2 center={0.5f, 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})
Generates a synthetic "Tibesti" mountain heightmap.
Definition mountain_tibesti.cpp:13
Array noise(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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})
See hmap::noise.
Definition primitives_gpu.cpp:493
Array shattered_peak(glm::ivec2 shape, uint seed, float scale=1.f, int octaves=8, float peak_kw=4.f, float rugosity=0.f, float angle=30.f, float gamma=1.f, bool add_deposition=true, float bulk_amp=0.3f, float base_noise_amp=0.1f, float k_smoothing=0.f, glm::vec2 center={0.5f, 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})
Generates a synthetic "shattered peak" terrain heightmap.
Definition shattered_peak.cpp:13
Array phasor_fbm(PhasorProfile phasor_profile, glm::ivec2 shape, float kp_global, uint 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}, int angle_filter_ir=8, 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:70
Array polygon_field(glm::ivec2 shape, glm::vec2 kw, uint seed, float rmin=0.05f, float rmax=0.8f, float clamping_dist=0.1f, float clamping_k=0.1f, int n_vertices_min=3, int n_vertices_max=16, float density=0.5f, glm::vec2 jitter={0.5f, 0.5f}, float shift=0.1f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_noise_distance=nullptr, const Array *p_density_multiplier=nullptr, const Array *p_size_multiplier=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a scalar field representing the signed distance to randomly generated polygons.
Definition primitives_gpu.cpp:576
Array vorolines_fbm(glm::ivec2 shape, float density, uint 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:781
Array voronoi_fbm(glm::ivec2 shape, glm::vec2 kw, uint 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:868
Array island(const Array &land_mask, const Array *p_noise_r=nullptr, float apex_elevation=1.f, bool filter_distance=true, int filter_ir=32, float slope_min=0.1f, float slope_max=8.f, float slope_start=0.5f, float slope_end=1.f, float slope_noise_intensity=0.5f, float k_smooth=0.05f, float radial_noise_intensity=0.3f, float radial_profile_gain=2.f, float water_decay=0.05f, float water_depth=0.3f, float lee_angle=30.f, float lee_amp=0.f, float uplift_amp=0.f, Array *p_water_depth=nullptr, Array *p_inland_mask=nullptr)
Generates an island heightmap from a land mask using radial profiles, slope shaping,...
Definition island.cpp:108
Array hemisphere_field_fbm(glm::ivec2 shape, glm::vec2 kw, uint seed, float rmin=0.05f, float rmax=0.8f, float amplitude_random_ratio=1.f, float density=0.1f, glm::vec2 jitter={0.5f, 0.5f}, float shift=0.1f, int octaves=8, float persistence=0.5f, float lacunarity=2.f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_noise_distance=nullptr, const Array *p_density_multiplier=nullptr, const Array *p_size_multiplier=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
See hmap::hemisphere_field.
Definition primitives_gpu.cpp:378
Array voronoise_fbm(glm::ivec2 shape, glm::vec2 kw, float u_param, float v_param, uint 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:953
Array vororand(glm::ivec2 shape, float density, float variability, uint 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:1035
Array basalt_field(glm::ivec2 shape, glm::vec2 kw, uint seed, float warp_kw=4.f, float large_scale_warp_amp=0.2f, float large_scale_gain=6.f, float large_scale_amp=0.2f, float medium_scale_kw_ratio=3.f, float medium_scale_warp_amp=1.f, float medium_scale_gain=7.f, float medium_scale_amp=0.08f, float small_scale_kw_ratio=10.f, float small_scale_amp=0.1f, float small_scale_overlay_amp=0.002f, float rugosity_kw_ratio=1.f, float rugosity_amp=1.f, bool flatten_activate=true, float flatten_kw_ratio=1.f, float flatten_amp=0.f, 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 synthetic procedural terrain resembling basaltic landforms.
Definition basalt_field.cpp:13
Array plates(glm::ivec2 shape, glm::vec2 kw, uint seed, float talus, int direction=0, float mix_ratio=0.9f, float base_noise_amp=0.05f, float kw_multiplier=2.f, int octaves=8, float rugosity=0.f, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generate a tectonic plate–like heightfield using Voronoi FBM and directional talus projection.
Definition plates.cpp:11
Definition algebra.hpp:23
Array white(glm::ivec2 shape, float a, float b, uint seed)
Return an array filled with white noise.
Definition white.cpp:12
Array noise_pingpong(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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 biquad_pulse_x(glm::ivec2 shape, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Definition primitives.cpp:41
Array bump(glm::ivec2 shape, float gain=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::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return a bump.
Definition primitives.cpp:81
Array noise_ridged(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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
ErosionProfile
Procedural erosion angular profile type.
Definition erosion.hpp:34
@ EP_TRIANGLE_GRENIER
Definition erosion.hpp:43
Array diffusion_limited_aggregation_trimesh(glm::ivec2 shape, uint 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:105
Array dendry(glm::ivec2 shape, glm::vec2 kw, uint 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:26
Array constant(glm::ivec2 shape, float value=0.f)
Return a constant value array.
Definition primitives.cpp:142
Array biquad_pulse(glm::ivec2 shape, float gain=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::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return a 'biquadratic pulse'.
Definition primitives.cpp:19
Array cubic_pulse(glm::ivec2 shape)
Generates a cubic pulse kernel array.
Definition kernels.cpp:97
Array worley_double(glm::ivec2 shape, glm::vec2 kw, uint 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 bump_lorentzian(glm::ivec2 shape, float shape_factor=0.5f, float radius=0.5f, 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})
Generates a 2D Lorentzian bump pattern.
Definition primitives.cpp:103
Array diffusion_limited_aggregation(glm::ivec2 shape, float scale, uint 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:17
Array checkerboard(glm::ivec2 shape, glm::vec2 kw, 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 a checkerboard heightmap.
Definition checkerboard.cpp:12
Array crater(glm::ivec2 shape, float radius, float depth, float lip_decay, float lip_height_ratio=0.5f, 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 a crater-shaped heightmap.
Definition geo.cpp:94
PrimitiveType
Defines the primitive shape used for synthesis.
Definition primitives.hpp:53
@ PRIM_BIQUAD_PULSE
Definition primitives.hpp:54
@ PRIM_CONE_SMOOTH
Definition primitives.hpp:57
@ PRIM_BUMP
Definition primitives.hpp:55
@ PRIM_SMOOTH_COSINE
Definition primitives.hpp:59
@ PRIM_CUBIC_PULSE
Definition primitives.hpp:58
@ PRIM_CONE
Definition primitives.hpp:56
Array noise_parberry(glm::ivec2 shape, glm::vec2 kw, uint 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
InterpolationMethod2D
Enumeration of 2D interpolation methods.
Definition interpolate2d.hpp:45
@ ITP2D_DELAUNAY_GRADIENT
Delaunay triangulation + linear gradient.
Definition interpolate2d.hpp:51
Array noise(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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
Array white_density_map(const Array &density_map, uint seed)
Return an array filled 1 with a probability based on a density map.
Definition white.cpp:24
PhasorProfile
Phasor angular profile type.
Definition math.hpp:54
Array wave_dune(glm::ivec2 shape, float kw, float angle, float xtop, float xbottom, float phase_shift=0.f, 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 a dune shape wave.
Definition wave.cpp:15
Array gaussian_pulse(glm::ivec2 shape, float sigma, 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 a gaussian_decay pulse kernel.
Definition primitives.cpp:203
Array peak(glm::ivec2 shape, float radius, const Array *p_noise, float noise_r_amp, float noise_z_ratio, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return a peak-shaped heightmap.
Definition geo.cpp:122
Array cone_sigmoid(glm::ivec2 shape, float alpha, float radius=0.5f, glm::vec2 center={0.5f, 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})
Generates a smooth conical heightmap using a sigmoid-based profile.
Definition cone.cpp:154
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:319
void swirl(Array &dx, Array &dy, float amplitude=1.f, float exponent=1.f, const Array *p_noise=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generate displacements dx and dy to apply a swirl effect to another primitve.
Definition swirl.cpp:16
Array rift(glm::ivec2 shape, float angle, float slope, float width, bool sharp_bottom=false, 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 a rift function (Heaviside with an optional talus slope at the transition).
Definition primitives.cpp:290
Array step(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 a step function (Heaviside with an optional talus slope at the transition).
Definition primitives.cpp:372
Array island_land_mask(glm::ivec2 shape, float radius, uint seed, float displacement=0.2f, NoiseType noise_type=NoiseType::SIMPLEX2S, float kw=4.f, int octaves=8, float weight=0.f, float persistence=0.5f, float lacunarity=2.f, const glm::vec2 ¢er={0.5f, 0.5f}, const glm::vec4 &bbox={0.f, 1.f, 0.f, 1.f})
Generates a 2D island mask by perturbing a radial boundary with noise.
Definition island.cpp:16
Array noise_jordan(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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 primitives.hpp:36
@ EDGE_DISTANCE_SQUARED
Squared edge distance.
Definition primitives.hpp:43
@ F1_SQUARED
Returns F1^2.
Definition primitives.hpp:37
@ CONSTANT_F2MF1_SQUARED
Constant × (F2 - F1)^2.
Definition primitives.hpp:45
@ F2_SQUARED
Returns F2^2.
Definition primitives.hpp:38
@ CONSTANT
Constant value.
Definition primitives.hpp:44
@ F1TF2_SQUARED
Returns (F1 * F2)^2.
Definition primitives.hpp:39
@ F2MF1_SQUARED
Returns (F2 - F1)^2.
Definition primitives.hpp:41
@ F1DF2_SQUARED
Returns (F1 / F2)^2.
Definition primitives.hpp:40
@ EDGE_DISTANCE_EXP
Exponential edge distance.
Definition primitives.hpp:42
Array paraboloid(glm::ivec2 shape, float angle, float a, float b, float v0=0.f, bool reverse_x=false, bool reverse_y=false, 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 a paraboloid.
Definition primitives.cpp:225
Array caldera(glm::ivec2 shape, float radius, float sigma_inner, float sigma_outer, float z_bottom, const Array *p_noise, float noise_amp_r, float noise_ratio_z, glm::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Return a caldera-shaped heightmap.
Definition geo.cpp:16
Array get_primitive_base(const PrimitiveType &primitive_type, const glm::ivec2 &shape, 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})
Generates a primitive shape as a 2D array.
Definition primitives.cpp:397
float angle(const Point &p1, const Point &p2)
Computes the angle between two points relative to the x-axis.
Definition points.cpp:42
void gain(Array &array, float factor, const Array *p_mask)
Apply a gain correction to the array elements.
Definition filters.cpp:189
NoiseType
Enumeration of various noise types used for procedural generation.
Definition functions.hpp:62
@ SIMPLEX2S
OpenSimplex2S.
Definition functions.hpp:68
Array disk(glm::ivec2 shape)
Generates a disk-shaped kernel footprint.
Definition kernels.cpp:225
Array noise_iq(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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_fbm(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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 cone_complex(glm::ivec2 shape, float alpha, float radius=0.5f, bool smooth_profile=true, float valley_amp=0.2f, int valley_nb=5, float valley_decay_ratio=0.5f, float valley_angle0=15.f, const ErosionProfile &erosion_profile=ErosionProfile::EP_TRIANGLE_GRENIER, float erosion_delta=0.01f, float radial_waviness_amp=0.05f, float radial_waviness_kw=2.f, float bias_angle=30.f, float bias_amp=0.75f, float bias_exponent=1.f, glm::vec2 center={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})
Generates a complex conical heightfield with valleys, directional bias, and radial waviness.
Definition cone.cpp:73
Array smooth_cosine(glm::ivec2 shape)
Generate a smooth cosine kernel.
Definition kernels.cpp:431
Array noise_swiss(NoiseType noise_type, glm::ivec2 shape, glm::vec2 kw, uint 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
Array white_sparse(glm::ivec2 shape, float a, float b, float density, uint seed)
Return an array sparsely filled with white noise.
Definition white.cpp:39
Array white_sparse_binary(glm::ivec2 shape, float density, uint seed)
Return an array sparsely filled with random 0 and 1.
Definition white.cpp:53
Array rectangle(glm::ivec2 shape, float rx, float ry, float angle, float slope=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::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Generates a rectangle-shaped heightmap with optional modifications.
Definition primitives.cpp:265
Array wave_triangular(glm::ivec2 shape, float kw, float angle, float slant_ratio, float phase_shift=0.f, 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 a triangular wave.
Definition wave.cpp:91
Array wave_square(glm::ivec2 shape, float kw, float angle, float phase_shift=0.f, 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 a square wave.
Definition wave.cpp:67
Array multisteps(glm::ivec2 shape, float angle, float r=1.2f, int nsteps=8, float elevation_exponent=0.7f, float shape_gain=4.f, float scale=0.5f, float outer_slope=0.1f, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const glm::vec2 ¢er={0.5f, 0.5f}, const glm::vec4 &bbox={0.f, 1.f, 0.f, 1.f})
Generate a multi-step height profile along a rotated axis.
Definition multisteps.cpp:14
Array biquad_pulse_y(glm::ivec2 shape, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Definition primitives.cpp:61
Array wave_sine(glm::ivec2 shape, float kw, float angle, float phase_shift=0.f, 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 a sine wave.
Definition wave.cpp:43
Array gabor_noise(glm::ivec2 shape, float kw, float angle, int width, float density, uint seed)
Return a sparse Gabor noise.
Definition gabor.cpp:19
Array cone(glm::ivec2 shape)
Generates a cone-shaped kernel array.
Definition kernels.cpp:56