HighMap library (C++)
Loading...
Searching...
No Matches
primitives.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
16#pragma once
17
18#include "FastNoiseLite.h"
19
20#include "highmap/array.hpp"
21#include "highmap/erosion.hpp"
22#include "highmap/functions.hpp"
23
24#define HMAP_GRADIENT_OFFSET 0.001f
25
26namespace hmap
27{
28
47
61
73Array get_primitive_base(const PrimitiveType &primitive_type,
74 const Vec2<int> &shape,
75 const Array *p_noise_x = nullptr,
76 const Array *p_noise_y = nullptr,
77 Vec2<float> center = {0.5f, 0.5f},
78 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
79
98Array biquad_pulse(Vec2<int> shape,
99 float gain = 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 Vec2<float> center = {0.5f, 0.5f},
105 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
106
126Array bump(Vec2<int> shape,
127 float gain = 1.f,
128 const Array *p_ctrl_param = nullptr, // gain multiplier
129 const Array *p_noise_x = nullptr,
130 const Array *p_noise_y = nullptr,
131 const Array *p_stretching = nullptr,
132 Vec2<float> center = {0.5f, 0.5f},
133 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
134
178Array bump_lorentzian(
179 Vec2<int> shape,
180 float shape_factor = 0.5f,
181 float radius = 0.5f,
182 const Array *p_ctrl_param = nullptr, // shape_factor multiplier
183 const Array *p_noise_x = nullptr,
184 const Array *p_noise_y = nullptr,
185 Vec2<float> center = {0.5f, 0.5f},
186 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
187
209Array caldera(Vec2<int> shape,
210 float radius,
211 float sigma_inner,
212 float sigma_outer,
213 float z_bottom,
214 const Array *p_noise,
215 float noise_amp_r,
216 float noise_ratio_z,
217 Vec2<float> center = {0.5f, 0.5f},
218 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
219
220Array caldera(Vec2<int> shape,
221 float radius,
222 float sigma_inner,
223 float sigma_outer,
224 float z_bottom,
225 Vec2<float> center = {0.5f, 0.5f},
226 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
227
244Array checkerboard(Vec2<int> shape,
245 Vec2<float> kw,
246 const Array *p_noise_x = nullptr,
247 const Array *p_noise_y = nullptr,
248 const Array *p_stretching = nullptr,
249 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
250
278Array cone(Vec2<int> shape,
279 float slope,
280 float apex_elevation = 1.f,
281 bool smooth_profile = false,
282 Vec2<float> center = {0.5f, 0.5f},
283 const Array *p_noise_x = nullptr,
284 const Array *p_noise_y = nullptr,
285 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
286
340Array cone_complex(
341 Vec2<int> shape,
342 float alpha,
343 float radius = 0.5f,
344 bool smooth_profile = true,
345 float valley_amp = 0.2f,
346 int valley_nb = 5,
347 float valley_decay_ratio = 0.5f,
348 float valley_angle0 = 15.f,
349 const ErosionProfile &erosion_profile = ErosionProfile::TRIANGLE_GRENIER,
350 float erosion_delta = 0.01f,
351 float radial_waviness_amp = 0.05f,
352 float radial_waviness_kw = 2.f,
353 float bias_angle = 30.f,
354 float bias_amp = 0.75f,
355 float bias_exponent = 1.f,
356 Vec2<float> center = {0.5f, 0.5f},
357 const Array *p_ctrl_param = nullptr,
358 const Array *p_noise_x = nullptr,
359 const Array *p_noise_y = nullptr,
360 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
361
393Array cone_sigmoid(Vec2<int> shape,
394 float alpha,
395 float radius = 0.5f,
396 Vec2<float> center = {0.5f, 0.5f},
397 const Array *p_noise_x = nullptr,
398 const Array *p_noise_y = nullptr,
399 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
400
408Array constant(Vec2<int> shape, float value = 0.f);
409
432Array crater(Vec2<int> shape,
433 float radius,
434 float depth,
435 float lip_decay,
436 float lip_height_ratio = 0.5f,
437 const Array *p_ctrl_param = nullptr,
438 const Array *p_noise_x = nullptr,
439 const Array *p_noise_y = nullptr,
440 Vec2<float> center = {0.5f, 0.5f},
441 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
442
446Array cubic_pulse(Vec2<int> shape,
447 const Array *p_noise_x,
448 const Array *p_noise_y,
449 Vec2<float> center = {0.5f, 0.5f},
450 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
451
488Array dendry(Vec2<int> shape,
489 Vec2<float> kw,
490 uint seed,
491 Array &control_function,
492 float eps = 0.05,
493 int resolution = 1,
494 float displacement = 0.075,
495 int primitives_resolution_steps = 3,
496 float slope_power = 2.f,
497 float noise_amplitude_proportion = 0.01,
498 bool add_control_function = true,
499 float control_function_overlap = 0.5f,
500 const Array *p_noise_x = nullptr,
501 const Array *p_noise_y = nullptr,
502 const Array *p_stretching = nullptr,
503 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
504 int subsampling = 1);
505
506Array dendry(Vec2<int> shape,
507 Vec2<float> kw,
508 uint seed,
509 NoiseFunction &noise_function,
510 float noise_function_offset = 0.f,
511 float noise_function_scaling = 1.f,
512 float eps = 0.05,
513 int resolution = 1,
514 float displacement = 0.075,
515 int primitives_resolution_steps = 3,
516 float slope_power = 2.f,
517 float noise_amplitude_proportion = 0.01,
518 bool add_control_function = true,
519 float control_function_overlap = 0.5f,
520 const Array *p_noise_x = nullptr,
521 const Array *p_noise_y = nullptr,
522 const Array *p_stretching = nullptr,
523 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
524
568Array diffusion_limited_aggregation(Vec2<int> shape,
569 float scale,
570 uint seed,
571 float seeding_radius = 0.4f,
572 float seeding_outer_radius_ratio = 0.2f,
573 float slope = 8.f,
574 float noise_ratio = 0.2f);
575
610Array disk(Vec2<int> shape,
611 float radius,
612 float slope = 1.f,
613 const Array *p_ctrl_param = nullptr,
614 const Array *p_noise_x = nullptr,
615 const Array *p_noise_y = nullptr,
616 const Array *p_stretching = nullptr,
617 Vec2<float> center = {0.5f, 0.5f},
618 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
619
637Array gabor_noise(Vec2<int> shape,
638 float kw,
639 float angle,
640 int width,
641 float density,
642 uint seed);
643
664Array gaussian_pulse(Vec2<int> shape,
665 float sigma,
666 const Array *p_ctrl_param = nullptr,
667 const Array *p_noise_x = nullptr,
668 const Array *p_noise_y = nullptr,
669 const Array *p_stretching = nullptr,
670 Vec2<float> center = {0.5f, 0.5f},
671 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
672
701Array island_land_mask(Vec2<int> shape,
702 float radius,
703 uint seed,
704 float displacement = 0.2f,
705 NoiseType noise_type = NoiseType::SIMPLEX2S,
706 float kw = 4.f,
707 int octaves = 8,
708 float weight = 0.f,
709 float persistence = 0.5f,
710 float lacunarity = 2.f,
711 const Vec2<float> &center = {0.5f, 0.5f},
712 const Vec4<float> &bbox = {0.f, 1.f, 0.f, 1.f});
713
732Array noise(NoiseType noise_type,
733 Vec2<int> shape,
734 Vec2<float> kw,
735 uint seed,
736 const Array *p_noise_x = nullptr,
737 const Array *p_noise_y = nullptr,
738 const Array *p_stretching = nullptr,
739 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
740
772Array noise_fbm(NoiseType noise_type,
773 Vec2<int> shape,
774 Vec2<float> kw,
775 uint seed,
776 int octaves = 8,
777 float weight = 0.7f,
778 float persistence = 0.5f,
779 float lacunarity = 2.f,
780 const Array *p_ctrl_param = nullptr,
781 const Array *p_noise_x = nullptr,
782 const Array *p_noise_y = nullptr,
783 const Array *p_stretching = nullptr,
784 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
785
818Array noise_iq(NoiseType noise_type,
819 Vec2<int> shape,
820 Vec2<float> kw,
821 uint seed,
822 int octaves = 8,
823 float weight = 0.7f,
824 float persistence = 0.5f,
825 float lacunarity = 2.f,
826 float gradient_scale = 0.05f,
827 const Array *p_ctrl_param = nullptr,
828 const Array *p_noise_x = nullptr,
829 const Array *p_noise_y = nullptr,
830 const Array *p_stretching = nullptr,
831 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
832
868Array noise_jordan(NoiseType noise_type,
869 Vec2<int> shape,
870 Vec2<float> kw,
871 uint seed,
872 int octaves = 8,
873 float weight = 0.7f,
874 float persistence = 0.5f,
875 float lacunarity = 2.f,
876 float warp0 = 0.4f,
877 float damp0 = 1.f,
878 float warp_scale = 0.4f,
879 float damp_scale = 1.f,
880 const Array *p_ctrl_param = nullptr,
881 const Array *p_noise_x = nullptr,
882 const Array *p_noise_y = nullptr,
883 const Array *p_stretching = nullptr,
884 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
885
918Array noise_parberry(Vec2<int> shape,
919 Vec2<float> kw,
920 uint seed,
921 int octaves = 8,
922 float weight = 0.7f,
923 float persistence = 0.5f,
924 float lacunarity = 2.f,
925 float mu = 1.02f,
926 const Array *p_ctrl_param = nullptr,
927 const Array *p_noise_x = nullptr,
928 const Array *p_noise_y = nullptr,
929 const Array *p_stretching = nullptr,
930 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
931
963Array noise_pingpong(NoiseType noise_type,
964 Vec2<int> shape,
965 Vec2<float> kw,
966 uint seed,
967 int octaves = 8,
968 float weight = 0.7f,
969 float persistence = 0.5f,
970 float lacunarity = 2.f,
971 const Array *p_ctrl_param = nullptr,
972 const Array *p_noise_x = nullptr,
973 const Array *p_noise_y = nullptr,
974 const Array *p_stretching = nullptr,
975 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
976
1009Array noise_ridged(NoiseType noise_type,
1010 Vec2<int> shape,
1011 Vec2<float> kw,
1012 uint seed,
1013 int octaves = 8,
1014 float weight = 0.7f,
1015 float persistence = 0.5f,
1016 float lacunarity = 2.f,
1017 float k_smoothing = 0.1f,
1018 const Array *p_ctrl_param = nullptr,
1019 const Array *p_noise_x = nullptr,
1020 const Array *p_noise_y = nullptr,
1021 const Array *p_stretching = nullptr,
1022 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1023
1056Array noise_swiss(NoiseType noise_type,
1057 Vec2<int> shape,
1058 Vec2<float> kw,
1059 uint seed,
1060 int octaves = 8,
1061 float weight = 0.7f,
1062 float persistence = 0.5f,
1063 float lacunarity = 2.f,
1064 float warp_scale = 0.1f,
1065 const Array *p_ctrl_param = nullptr,
1066 const Array *p_noise_x = nullptr,
1067 const Array *p_noise_y = nullptr,
1068 const Array *p_stretching = nullptr,
1069 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1070
1094Array paraboloid(Vec2<int> shape,
1095 float angle,
1096 float a,
1097 float b,
1098 float v0 = 0.f,
1099 bool reverse_x = false,
1100 bool reverse_y = false,
1101 const Array *p_noise_x = nullptr,
1102 const Array *p_noise_y = nullptr,
1103 const Array *p_stretching = nullptr,
1104 Vec2<float> center = {0.5f, 0.5f},
1105 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1106
1125Array peak(Vec2<int> shape,
1126 float radius,
1127 const Array *p_noise,
1128 float noise_r_amp,
1129 float noise_z_ratio,
1130 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1131
1183Array phasor(PhasorProfile phasor_profile,
1184 Vec2<int> shape,
1185 float kw,
1186 const Array &angle,
1187 uint seed,
1188 float profile_delta = 0.1f,
1189 float density_factor = 1.f,
1190 float kernel_width_ratio = 2.f,
1191 float phase_smoothing = 2.f);
1192
1237Array phasor_fbm(PhasorProfile phasor_profile,
1238 Vec2<int> shape,
1239 float kw,
1240 const Array &angle,
1241 uint seed,
1242 float profile_delta = 0.1f,
1243 float density_factor = 1.f,
1244 float kernel_width_ratio = 2.f,
1245 float phase_smoothing = 2.f,
1246 int octaves = 8,
1247 float weight = 0.7f,
1248 float persistence = 0.5f,
1249 float lacunarity = 2.f);
1250
1289Array rectangle(Vec2<int> shape,
1290 float rx,
1291 float ry,
1292 float angle,
1293 float slope = 1.f,
1294 const Array *p_ctrl_param = nullptr,
1295 const Array *p_noise_x = nullptr,
1296 const Array *p_noise_y = nullptr,
1297 const Array *p_stretching = nullptr,
1298 Vec2<float> center = {0.5f, 0.5f},
1299 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1300
1324Array rift(Vec2<int> shape,
1325 float angle,
1326 float slope,
1327 float width,
1328 bool sharp_bottom = false,
1329 const Array *p_ctrl_param = nullptr,
1330 const Array *p_noise_x = nullptr,
1331 const Array *p_noise_y = nullptr,
1332 const Array *p_stretching = nullptr,
1333 Vec2<float> center = {0.5f, 0.5f},
1334 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1335
1356Array slope(Vec2<int> shape,
1357 float angle,
1358 float slope,
1359 const Array *p_ctrl_param = nullptr,
1360 const Array *p_noise_x = nullptr,
1361 const Array *p_noise_y = nullptr,
1362 const Array *p_stretching = nullptr,
1363 Vec2<float> center = {0.5f, 0.5f},
1364 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1365
1369Array smooth_cosine(Vec2<int> shape,
1370 const Array *p_noise_x,
1371 const Array *p_noise_y,
1372 Vec2<float> center = {0.5f, 0.5f},
1373 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1374
1396Array step(Vec2<int> shape,
1397 float angle,
1398 float slope,
1399 const Array *p_ctrl_param = nullptr,
1400 const Array *p_noise_x = nullptr,
1401 const Array *p_noise_y = nullptr,
1402 const Array *p_stretching = nullptr,
1403 Vec2<float> center = {0.5f, 0.5f},
1404 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1405
1423void swirl(Array &dx,
1424 Array &dy,
1425 float amplitude = 1.f,
1426 float exponent = 1.f,
1427 const Array *p_noise = nullptr,
1428 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1429
1446Array wave_dune(Vec2<int> shape,
1447 float kw,
1448 float angle,
1449 float xtop,
1450 float xbottom,
1451 float phase_shift = 0.f,
1452 const Array *p_noise_x = nullptr,
1453 const Array *p_noise_y = nullptr,
1454 const Array *p_stretching = nullptr,
1455 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1456
1476Array wave_sine(Vec2<int> shape,
1477 float kw,
1478 float angle,
1479 float phase_shift = 0.f,
1480 const Array *p_noise_x = nullptr,
1481 const Array *p_noise_y = nullptr,
1482 const Array *p_stretching = nullptr,
1483 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1484
1504Array wave_square(Vec2<int> shape,
1505 float kw,
1506 float angle,
1507 float phase_shift = 0.f,
1508 const Array *p_noise_x = nullptr,
1509 const Array *p_noise_y = nullptr,
1510 const Array *p_stretching = nullptr,
1511 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1512
1534Array wave_triangular(Vec2<int> shape,
1535 float kw,
1536 float angle,
1537 float slant_ratio,
1538 float phase_shift = 0.f,
1539 const Array *p_noise_x = nullptr,
1540 const Array *p_noise_y = nullptr,
1541 const Array *p_stretching = nullptr,
1542 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1543
1561Array white(Vec2<int> shape, float a, float b, uint seed);
1562
1576Array white_density_map(const Array &density_map, uint seed);
1577
1597Array white_sparse(Vec2<int> shape, float a, float b, float density, uint seed);
1598
1608Array white_sparse_binary(Vec2<int> shape, float density, uint seed);
1609
1633Array worley_double(Vec2<int> shape,
1634 Vec2<float> kw,
1635 uint seed,
1636 float ratio = 0.5f,
1637 float k = 0.f,
1638 const Array *p_ctrl_param = nullptr,
1639 const Array *p_noise_x = nullptr,
1640 const Array *p_noise_y = nullptr,
1641 const Array *p_stretching = nullptr,
1642 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1643
1644} // namespace hmap
1645
1646namespace hmap::gpu
1647{
1648
1682Array badlands(Vec2<int> shape,
1683 Vec2<float> kw,
1684 uint seed,
1685 int octaves = 8,
1686 float rugosity = 0.2f,
1687 float angle = 30.f,
1688 float k_smoothing = 0.1f,
1689 float base_noise_amp = 0.2f,
1690 const Array *p_noise_x = nullptr,
1691 const Array *p_noise_y = nullptr,
1692 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1693
1770Array basalt_field(Vec2<int> shape,
1771 Vec2<float> kw,
1772 uint seed,
1773 float warp_kw = 4.f,
1774 float large_scale_warp_amp = 0.2f,
1775 float large_scale_gain = 6.f,
1776 float large_scale_amp = 0.2f,
1777 float medium_scale_kw_ratio = 3.f,
1778 float medium_scale_warp_amp = 1.f,
1779 float medium_scale_gain = 7.f,
1780 float medium_scale_amp = 0.08f,
1781 float small_scale_kw_ratio = 10.f,
1782 float small_scale_amp = 0.1f,
1783 float small_scale_overlay_amp = 0.002f,
1784 float rugosity_kw_ratio = 1.f,
1785 float rugosity_amp = 1.f,
1786 bool flatten_activate = true,
1787 float flatten_kw_ratio = 1.f,
1788 float flatten_amp = 0.f,
1789 const Array *p_noise_x = nullptr,
1790 const Array *p_noise_y = nullptr,
1791 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1792
1816Array gabor_wave(Vec2<int> shape,
1817 Vec2<float> kw,
1818 uint seed,
1819 const Array &angle,
1820 float angle_spread_ratio = 1.f,
1821 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1822
1823Array gabor_wave(Vec2<int> shape,
1824 Vec2<float> kw,
1825 uint seed,
1826 float angle = 0.f,
1827 float angle_spread_ratio = 1.f,
1828 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1829
1862Array gabor_wave_fbm(Vec2<int> shape,
1863 Vec2<float> kw,
1864 uint seed,
1865 const Array &angle,
1866 float angle_spread_ratio = 1.f,
1867 int octaves = 8,
1868 float weight = 0.7f,
1869 float persistence = 0.5f,
1870 float lacunarity = 2.f,
1871 const Array *p_ctrl_param = nullptr,
1872 const Array *p_noise_x = nullptr,
1873 const Array *p_noise_y = nullptr,
1874 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1875
1876Array gabor_wave_fbm(Vec2<int> shape,
1877 Vec2<float> kw,
1878 uint seed,
1879 float angle = 0.f,
1880 float angle_spread_ratio = 1.f,
1881 int octaves = 8,
1882 float weight = 0.7f,
1883 float persistence = 0.5f,
1884 float lacunarity = 2.f,
1885 const Array *p_ctrl_param = nullptr,
1886 const Array *p_noise_x = nullptr,
1887 const Array *p_noise_y = nullptr,
1888 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1889
1937Array gavoronoise(Vec2<int> shape,
1938 Vec2<float> kw,
1939 uint seed,
1940 const Array &angle,
1941 float amplitude = 0.05f,
1942 float angle_spread_ratio = 1.f,
1943 Vec2<float> kw_multiplier = {4.f, 4.f},
1944 float slope_strength = 1.f,
1945 float branch_strength = 2.f,
1946 float z_cut_min = 0.2f,
1947 float z_cut_max = 1.f,
1948 int octaves = 8,
1949 float persistence = 0.4f,
1950 float lacunarity = 2.f,
1951 const Array *p_ctrl_param = nullptr,
1952 const Array *p_noise_x = nullptr,
1953 const Array *p_noise_y = nullptr,
1954 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1955
1956Array gavoronoise(Vec2<int> shape,
1957 Vec2<float> kw,
1958 uint seed,
1959 float angle = 0.f,
1960 float amplitude = 0.05f,
1961 float angle_spread_ratio = 1.f,
1962 Vec2<float> kw_multiplier = {4.f, 4.f},
1963 float slope_strength = 1.f,
1964 float branch_strength = 2.f,
1965 float z_cut_min = 0.2f,
1966 float z_cut_max = 1.f,
1967 int octaves = 8,
1968 float persistence = 0.4f,
1969 float lacunarity = 2.f,
1970 const Array *p_ctrl_param = nullptr,
1971 const Array *p_noise_x = nullptr,
1972 const Array *p_noise_y = nullptr,
1973 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1974
1975Array gavoronoise(const Array &base,
1976 Vec2<float> kw,
1977 uint seed,
1978 float amplitude = 0.05f,
1979 Vec2<float> kw_multiplier = {4.f, 4.f},
1980 float slope_strength = 1.f,
1981 float branch_strength = 2.f,
1982 float z_cut_min = 0.2f,
1983 float z_cut_max = 1.f,
1984 int octaves = 8,
1985 float persistence = 0.4f,
1986 float lacunarity = 2.f,
1987 const Array *p_ctrl_param = nullptr,
1988 const Array *p_noise_x = nullptr,
1989 const Array *p_noise_y = nullptr,
1990 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1991
2020Array hemisphere_field(Vec2<int> shape,
2021 Vec2<float> kw,
2022 uint seed,
2023 float rmin = 0.05f,
2024 float rmax = 0.8f,
2025 float amplitude_random_ratio = 1.f,
2026 float density = 0.1f,
2027 hmap::Vec2<float> jitter = {1.f, 1.f},
2028 float shift = 0.f,
2029 const Array *p_noise_x = nullptr,
2030 const Array *p_noise_y = nullptr,
2031 const Array *p_noise_distance = nullptr,
2032 const Array *p_density_multiplier = nullptr,
2033 const Array *p_size_multiplier = nullptr,
2034 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2035
2037Array hemisphere_field_fbm(Vec2<int> shape,
2038 Vec2<float> kw,
2039 uint seed,
2040 float rmin = 0.05f,
2041 float rmax = 0.8f,
2042 float amplitude_random_ratio = 1.f,
2043 float density = 0.1f,
2044 hmap::Vec2<float> jitter = {0.5f, 0.5f},
2045 float shift = 0.1f,
2046 int octaves = 8,
2047 float persistence = 0.5f,
2048 float lacunarity = 2.f,
2049 const Array *p_noise_x = nullptr,
2050 const Array *p_noise_y = nullptr,
2051 const Array *p_noise_distance = nullptr,
2052 const Array *p_density_multiplier = nullptr,
2053 const Array *p_size_multiplier = nullptr,
2054 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2055
2094Array island(const Array &land_mask,
2095 const Array *p_noise_r = nullptr,
2096 float apex_elevation = 1.f,
2097 bool filter_distance = true,
2098 int filter_ir = 32,
2099 float slope_min = 0.1f,
2100 float slope_max = 8.f,
2101 float slope_start = 0.5f,
2102 float slope_end = 1.f,
2103 float slope_noise_intensity = 0.5f,
2104 float k_smooth = 0.05f,
2105 float radial_noise_intensity = 0.3f,
2106 float radial_profile_gain = 2.f,
2107 float water_decay = 0.05f,
2108 float water_depth = 0.3f,
2109 float lee_angle = 30.f,
2110 float lee_amp = 0.f,
2111 float uplift_amp = 0.f,
2112 Array *p_water_depth = nullptr,
2113 Array *p_inland_mask = nullptr);
2114
2158Array island(const Array &land_mask,
2159 uint seed,
2160 float noise_amp = 0.07f,
2161 Vec2<float> noise_kw = {4.f, 4.f},
2162 int noise_octaves = 8,
2163 float noise_rugosity = 0.7f,
2164 float noise_angle = 45.f,
2165 float noise_k_smoothing = 0.05f,
2166 float apex_elevation = 1.f,
2167 bool filter_distance = true,
2168 int filter_ir = 32,
2169 float slope_min = 0.1f,
2170 float slope_max = 8.f,
2171 float slope_start = 0.5f,
2172 float slope_end = 1.f,
2173 float slope_noise_intensity = 0.5f,
2174 float k_smooth = 0.05f,
2175 float radial_noise_intensity = 0.3f,
2176 float radial_profile_gain = 2.f,
2177 float water_decay = 0.05f,
2178 float water_depth = 0.3f,
2179 float lee_angle = 30.f,
2180 float lee_amp = 0.f,
2181 float uplift_amp = 0.f,
2182 Array *p_water_depth = nullptr,
2183 Array *p_inland_mask = nullptr);
2184
2232Array mountain_cone(Vec2<int> shape,
2233 uint seed,
2234 float scale = 1.f,
2235 int octaves = 8,
2236 float peak_kw = 4.f,
2237 float rugosity = 0.f,
2238 float angle = 45.f,
2239 float k_smoothing = 0.f,
2240 float gamma = 0.5f,
2241 float cone_alpha = 1.f,
2242 float ridge_amp = 0.4f,
2243 float base_noise_amp = 0.05f,
2244 Vec2<float> center = {0.5f, 0.5f},
2245 const Array *p_noise_x = nullptr,
2246 const Array *p_noise_y = nullptr,
2247 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2248
2294Array mountain_inselberg(Vec2<int> shape,
2295 uint seed,
2296 float scale = 1.f,
2297 int octaves = 8,
2298 float rugosity = 0.2f,
2299 float angle = 45.f,
2300 float gamma = 1.1f,
2301 bool round_shape = false,
2302 bool add_deposition = true,
2303 float bulk_amp = 0.2f,
2304 float base_noise_amp = 0.2f,
2305 float k_smoothing = 0.1f,
2306 Vec2<float> center = {0.5f, 0.5f},
2307 const Array *p_noise_x = nullptr,
2308 const Array *p_noise_y = nullptr,
2309 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2310
2360Array mountain_range_radial(Vec2<int> shape,
2361 Vec2<float> kw,
2362 uint seed,
2363 float half_width = 0.2f,
2364 float angle_spread_ratio = 0.5f,
2365 float core_size_ratio = 1.f,
2366 Vec2<float> center = {0.5f, 0.5f},
2367 int octaves = 8,
2368 float weight = 0.7f,
2369 float persistence = 0.5f,
2370 float lacunarity = 2.f,
2371 const Array *p_ctrl_param = nullptr,
2372 const Array *p_noise_x = nullptr,
2373 const Array *p_noise_y = nullptr,
2374 const Array *p_angle = nullptr,
2375 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2376
2422Array mountain_stump(Vec2<int> shape,
2423 uint seed,
2424 float scale = 1.f,
2425 int octaves = 8,
2426 float peak_kw = 6.f,
2427 float rugosity = 0.f,
2428 float angle = 45.f,
2429 float k_smoothing = 0.f,
2430 float gamma = 0.25f,
2431 bool add_deposition = true,
2432 float ridge_amp = 0.75f,
2433 float base_noise_amp = 0.1f,
2434 Vec2<float> center = {0.5f, 0.5f},
2435 const Array *p_noise_x = nullptr,
2436 const Array *p_noise_y = nullptr,
2437 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2438
2484Array mountain_tibesti(Vec2<int> shape,
2485 uint seed,
2486 float scale = 1.f,
2487 int octaves = 8,
2488 float peak_kw = 20.f,
2489 float rugosity = 0.f,
2490 float angle = 30.f,
2491 float angle_spread_ratio = 0.25f,
2492 float gamma = 1.f,
2493 bool add_deposition = true,
2494 float bulk_amp = 1.f,
2495 float base_noise_amp = 0.1f,
2496 Vec2<float> center = {0.5f, 0.5f},
2497 const Array *p_noise_x = nullptr,
2498 const Array *p_noise_y = nullptr,
2499 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2500
2502Array noise(NoiseType noise_type,
2503 Vec2<int> shape,
2504 Vec2<float> kw,
2505 uint seed,
2506 const Array *p_noise_x = nullptr,
2507 const Array *p_noise_y = nullptr,
2508 const Array *p_stretching = nullptr,
2509 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2510
2512Array noise_fbm(NoiseType noise_type,
2513 Vec2<int> shape,
2514 Vec2<float> kw,
2515 uint seed,
2516 int octaves = 8,
2517 float weight = 0.7f,
2518 float persistence = 0.5f,
2519 float lacunarity = 2.f,
2520 const Array *p_ctrl_param = nullptr,
2521 const Array *p_noise_x = nullptr,
2522 const Array *p_noise_y = nullptr,
2523 const Array *p_stretching = nullptr,
2524 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2525
2571Array polygon_field(Vec2<int> shape,
2572 Vec2<float> kw,
2573 uint seed,
2574 float rmin = 0.05f,
2575 float rmax = 0.8f,
2576 float clamping_dist = 0.1f,
2577 float clamping_k = 0.1f,
2578 int n_vertices_min = 3,
2579 int n_vertices_max = 16,
2580 float density = 0.5f,
2581 hmap::Vec2<float> jitter = {0.5f, 0.5f},
2582 float shift = 0.1f,
2583 const Array *p_noise_x = nullptr,
2584 const Array *p_noise_y = nullptr,
2585 const Array *p_noise_distance = nullptr,
2586 const Array *p_density_multiplier = nullptr,
2587 const Array *p_size_multiplier = nullptr,
2588 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2589
2634Array polygon_field_fbm(Vec2<int> shape,
2635 Vec2<float> kw,
2636 uint seed,
2637 float rmin = 0.05f,
2638 float rmax = 0.8f,
2639 float clamping_dist = 0.1f,
2640 float clamping_k = 0.1f,
2641 int n_vertices_min = 3,
2642 int n_vertices_max = 16,
2643 float density = 0.1f,
2644 hmap::Vec2<float> jitter = {0.5f, 0.5f},
2645 float shift = 0.1f,
2646 int octaves = 8,
2647 float persistence = 0.5f,
2648 float lacunarity = 2.f,
2649 const Array *p_noise_x = nullptr,
2650 const Array *p_noise_y = nullptr,
2651 const Array *p_noise_distance = nullptr,
2652 const Array *p_density_multiplier = nullptr,
2653 const Array *p_size_multiplier = nullptr,
2654 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2655
2700Array shattered_peak(Vec2<int> shape,
2701 uint seed,
2702 float scale = 1.f,
2703 int octaves = 8,
2704 float peak_kw = 4.f,
2705 float rugosity = 0.f,
2706 float angle = 30.f,
2707 float gamma = 1.f,
2708 bool add_deposition = true,
2709 float bulk_amp = 0.3f,
2710 float base_noise_amp = 0.1f,
2711 float k_smoothing = 0.f,
2712 Vec2<float> center = {0.5f, 0.5f},
2713 const Array *p_noise_x = nullptr,
2714 const Array *p_noise_y = nullptr,
2715 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2716
2762Array vorolines(Vec2<int> shape,
2763 float density,
2764 uint seed,
2765 float k_smoothing = 0.f,
2766 float exp_sigma = 0.f,
2767 float alpha = 0.f,
2768 float alpha_span = M_PI,
2770 const Array *p_noise_x = nullptr,
2771 const Array *p_noise_y = nullptr,
2772 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
2773 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
2774
2830Array vorolines_fbm(
2831 Vec2<int> shape,
2832 float density,
2833 uint seed,
2834 float k_smoothing = 0.f,
2835 float exp_sigma = 0.f,
2836 float alpha = 0.f,
2837 float alpha_span = M_PI,
2839 int octaves = 8,
2840 float weight = 0.7f,
2841 float persistence = 0.5f,
2842 float lacunarity = 2.f,
2843 const Array *p_noise_x = nullptr,
2844 const Array *p_noise_y = nullptr,
2845 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
2846 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
2847
2887Array voronoi(Vec2<int> shape,
2888 Vec2<float> kw,
2889 uint seed,
2890 Vec2<float> jitter = {0.5f, 0.5f},
2891 float k_smoothing = 0.f,
2892 float exp_sigma = 0.f,
2894 const Array *p_ctrl_param = nullptr,
2895 const Array *p_noise_x = nullptr,
2896 const Array *p_noise_y = nullptr,
2897 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2898
2945Array voronoi_fbm(Vec2<int> shape,
2946 Vec2<float> kw,
2947 uint seed,
2948 Vec2<float> jitter = {0.5f, 0.5f},
2949 float k_smoothing = 0.f,
2950 float exp_sigma = 0.f,
2952 int octaves = 8,
2953 float weight = 0.7f,
2954 float persistence = 0.5f,
2955 float lacunarity = 2.f,
2956 const Array *p_ctrl_param = nullptr,
2957 const Array *p_noise_x = nullptr,
2958 const Array *p_noise_y = nullptr,
2959 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2960
2987Array voronoi_edge_distance(Vec2<int> shape,
2988 Vec2<float> kw,
2989 uint seed,
2990 Vec2<float> jitter = {0.5f, 0.5f},
2991 const Array *p_ctrl_param = nullptr,
2992 const Array *p_noise_x = nullptr,
2993 const Array *p_noise_y = nullptr,
2994 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2995
3032Array voronoise(Vec2<int> shape,
3033 Vec2<float> kw,
3034 float u_param,
3035 float v_param,
3036 uint seed,
3037 const Array *p_noise_x = nullptr,
3038 const Array *p_noise_y = nullptr,
3039 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
3040
3068Array voronoise_fbm(Vec2<int> shape,
3069 Vec2<float> kw,
3070 float u_param,
3071 float v_param,
3072 uint seed,
3073 int octaves = 8,
3074 float weight = 0.7f,
3075 float persistence = 0.5f,
3076 float lacunarity = 2.f,
3077 const Array *p_ctrl_param = nullptr,
3078 const Array *p_noise_x = nullptr,
3079 const Array *p_noise_y = nullptr,
3080 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
3081
3130Array vororand(Vec2<int> shape,
3131 float density,
3132 float variability,
3133 uint seed,
3134 float k_smoothing = 0.f,
3135 float exp_sigma = 0.f,
3137 const Array *p_noise_x = nullptr,
3138 const Array *p_noise_y = nullptr,
3139 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
3140 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
3141
3142Array vororand(Vec2<int> shape,
3143 const std::vector<float> &xp,
3144 const std::vector<float> &yp,
3145 float k_smoothing = 0.f,
3146 float exp_sigma = 0.f,
3148 const Array *p_noise_x = nullptr,
3149 const Array *p_noise_y = nullptr,
3150 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
3151
3208Array wavelet_noise(Vec2<int> shape,
3209 Vec2<float> kw,
3210 uint seed,
3211 float kw_multiplier = 2.f,
3212 float vorticity = 0.f,
3213 float density = 1.f,
3214 int octaves = 8,
3215 float weight = 0.7f,
3216 float persistence = 0.5f,
3217 float lacunarity = 2.f,
3218 const Array *p_ctrl_param = nullptr,
3219 const Array *p_noise_x = nullptr,
3220 const Array *p_noise_y = nullptr,
3221 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
3222
3223} // namespace hmap::gpu
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
unsigned int uint
Definition array.hpp:14
Implements hydraulic and thermal erosion algorithms for terrain modeling, including particle-based fl...
Defines modular function objects for procedural generation, including noise algorithms (Perlin,...
Definition blending.hpp:186
Array polygon_field(Vec2< int > shape, Vec2< float > 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, hmap::Vec2< float > 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, Vec4< float > 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:578
Array shattered_peak(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a synthetic "shattered peak" terrain heightmap.
Definition shattered_peak.cpp:13
Array basalt_field(Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a synthetic procedural terrain resembling basaltic landforms.
Definition basalt_field.cpp:13
Array voronoi(Vec2< int > shape, Vec2< float > kw, uint seed, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi diagram in a 2D array with configurable properties.
Definition primitives_gpu.cpp:828
Array badlands(Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a synthetic "badlands" terrain heightmap.
Definition badlands.cpp:13
Array voronoise_fbm(Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Voronoise.
Definition primitives_gpu.cpp:955
Array voronoise(Vec2< int > shape, Vec2< float > kw, float u_param, float v_param, uint seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a 2D Voronoi noise array.
Definition primitives_gpu.cpp:920
Array noise_fbm(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
See hmap::noise_fbm.
Definition primitives_gpu.cpp:530
Array noise(NoiseType noise_type, Vec2< int > shape, Vec2< float > kw, uint seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
See hmap::noise.
Definition primitives_gpu.cpp:493
Array polygon_field_fbm(Vec2< int > shape, Vec2< float > 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, hmap::Vec2< float > 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, Vec4< float > 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:638
Array mountain_range_radial(Vec2< int > shape, Vec2< float > kw, uint seed, float half_width=0.2f, float angle_spread_ratio=0.5f, float core_size_ratio=1.f, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a heightmap representing a radial mountain range.
Definition primitives_gpu.cpp:438
Array gabor_wave(Vec2< int > shape, Vec2< float > kw, uint seed, const Array &angle, float angle_spread_ratio=1.f, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Gabor noise.
Definition primitives_gpu.cpp:42
Array mountain_stump(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > 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 hemisphere_field_fbm(Vec2< int > shape, Vec2< float > kw, uint seed, float rmin=0.05f, float rmax=0.8f, float amplitude_random_ratio=1.f, float density=0.1f, hmap::Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
See hmap::hemisphere_field.
Definition primitives_gpu.cpp:378
Array hemisphere_field(Vec2< int > shape, Vec2< float > kw, uint seed, float rmin=0.05f, float rmax=0.8f, float amplitude_random_ratio=1.f, float density=0.1f, hmap::Vec2< float > 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, Vec4< float > 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 vorolines(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f}, Vec4< float > 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:704
Array mountain_tibesti(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a synthetic "Tibesti" mountain heightmap.
Definition mountain_tibesti.cpp:13
Array gabor_wave_fbm(Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence Gabor noise.
Definition primitives_gpu.cpp:85
Array rugosity(const Array &z, int ir, bool convex=true)
See hmap::rugosity.
Definition features_gpu.cpp:72
Array voronoi_fbm(Vec2< int > shape, Vec2< float > kw, uint seed, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a Voronoi diagram in a 2D array with configurable properties.
Definition primitives_gpu.cpp:870
Array voronoi_edge_distance(Vec2< int > shape, Vec2< float > kw, uint seed, Vec2< float > jitter={0.5f, 0.5f}, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Computes the Voronoi edge distance.
Definition primitives_gpu.cpp:1001
Array mountain_cone(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > 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 vorolines_fbm(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f}, Vec4< float > 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:783
Array vororand(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f}, Vec4< float > bbox_points={0.f, 1.f, 0.f, 1.f})
Generates a 2D Voronoi-based scalar field using OpenCL.
Definition primitives_gpu.cpp:1037
Array mountain_inselberg(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a synthetic mountain-like inselberg (isolated hill) heightmap.
Definition mountain_inselberg.cpp:13
Array wavelet_noise(Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates 2D wavelet noise using an OpenCL kernel.
Definition primitives_gpu.cpp:1129
Array gavoronoise(Vec2< int > shape, Vec2< float > kw, uint seed, const Array &angle, float amplitude=0.05f, float angle_spread_ratio=1.f, Vec2< float > 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, Vec4< float > 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 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
Definition algebra.hpp:28
Array noise_jordan(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:115
Array noise(NoiseType noise_type, Vec2< int > shape, Vec2< float > kw, uint seed, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence noise.
Definition noise.cpp:16
Array smooth_cosine(Vec2< int > shape)
Generate a smooth cosine kernel.
Definition kernels.cpp:406
Array wave_sine(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a sine wave.
Definition wave.cpp:43
Array phasor_fbm(PhasorProfile phasor_profile, Vec2< int > shape, float kw, const Array &angle, uint seed, float profile_delta=0.1f, float density_factor=1.f, float kernel_width_ratio=2.f, float phase_smoothing=2.f, int octaves=8, float weight=0.7f, float persistence=0.5f, float lacunarity=2.f)
Generates a fractal Brownian motion (fBm) noise field using layered phasor profiles.
Definition phasor.cpp:111
Array diffusion_limited_aggregation(Vec2< int > 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:14
Array wave_dune(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a dune shape wave.
Definition wave.cpp:15
Array dendry(Vec2< int > shape, Vec2< float > 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, Vec4< float > 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:19
ErosionProfile
Procedural erosion angular profile type.
Definition erosion.hpp:42
@ TRIANGLE_GRENIER
Definition erosion.hpp:48
Array biquad_pulse(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a 'biquadratic pulse'.
Definition primitives.cpp:19
Array gabor_noise(Vec2< int > shape, float kw, float angle, int width, float density, uint seed)
Return a sparse Gabor noise.
Definition gabor.cpp:19
Array white_sparse(Vec2< int > 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(Vec2< int > shape, float density, uint seed)
Return an array sparsely filled with random 0 and 1.
Definition white.cpp:53
Array island_land_mask(Vec2< int > 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 Vec2< float > &center={0.5f, 0.5f}, const Vec4< float > &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_fbm(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:41
Array gaussian_pulse(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a gaussian_decay pulse kernel.
Definition primitives.cpp:163
Array wave_triangular(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a triangular wave.
Definition wave.cpp:91
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 crater(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a crater-shaped heightmap.
Definition geo.cpp:94
Array worley_double(Vec2< int > shape, Vec2< float > 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, Vec4< float > 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 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 rift(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > 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:250
Array noise_swiss(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm swiss noise.
Definition noise.cpp:268
Array noise_ridged(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm ridged noise.
Definition noise.cpp:230
Array bump(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a bump.
Definition primitives.cpp:41
Array bump_lorentzian(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a 2D Lorentzian bump pattern.
Definition primitives.cpp:63
Array get_primitive_base(const PrimitiveType &primitive_type, const Vec2< int > &shape, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a primitive shape as a 2D array.
Definition primitives.cpp:357
Array checkerboard(Vec2< int > shape, Vec2< float > kw, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, const Array *p_stretching=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a checkerboard heightmap.
Definition checkerboard.cpp:12
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 constant(Vec2< int > shape, float value=0.f)
Return a constant value array.
Definition primitives.cpp:102
Array peak(Vec2< int > shape, float radius, const Array *p_noise, float noise_r_amp, float noise_z_ratio, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a peak-shaped heightmap.
Definition geo.cpp:122
Array noise_pingpong(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm pingpong noise.
Definition noise.cpp:194
Array cone(Vec2< int > shape)
Generates a cone-shaped kernel array.
Definition kernels.cpp:56
Array phasor(PhasorProfile phasor_profile, Vec2< int > shape, float kw, const Array &angle, uint seed, float profile_delta=0.1f, float density_factor=1.f, float kernel_width_ratio=2.f, float phase_smoothing=2.f)
Generates a phasor noise field based on a Gabor noise model and phase profile.
Definition phasor.cpp:16
void swirl(Array &dx, Array &dy, float amplitude=1.f, float exponent=1.f, const Array *p_noise=nullptr, Vec4< float > 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
float angle(const Point &p1, const Point &p2)
Computes the angle between two points relative to the x-axis.
Definition points.cpp:42
Array white(Vec2< int > shape, float a, float b, uint seed)
Return an array filled with white noise.
Definition white.cpp:12
Array step(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > 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:332
Array noise_iq(NoiseType noise_type, Vec2< int > shape, Vec2< float > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array filled with coherence fbm noise.
Definition noise.cpp:77
void gain(Array &array, float factor, const Array *p_mask)
Apply a gain correction to the array elements.
Definition filters.cpp:346
NoiseType
Enumeration of various noise types used for procedural generation.
Definition functions.hpp:62
@ SIMPLEX2S
OpenSimplex2S.
Definition functions.hpp:68
Array caldera(Vec2< int > shape, float radius, float sigma_inner, float sigma_outer, float z_bottom, const Array *p_noise, float noise_amp_r, float noise_ratio_z, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a caldera-shaped heightmap.
Definition geo.cpp:16
Array cone_complex(Vec2< int > 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::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, Vec2< float > center={0.5f, 0.5f}, const Array *p_ctrl_param=nullptr, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > 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 wave_square(Vec2< int > 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, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a square wave.
Definition wave.cpp:67
Array disk(Vec2< int > shape)
Generates a disk-shaped kernel footprint.
Definition kernels.cpp:200
Array slope(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return an array corresponding to a slope with a given overall.
Definition primitives.cpp:279
Array paraboloid(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Return a paraboloid.
Definition primitives.cpp:185
Array noise_parberry(Vec2< int > shape, Vec2< float > 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, Vec4< float > 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 rectangle(Vec2< int > 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, Vec2< float > center={0.5f, 0.5f}, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a rectangle-shaped heightmap with optional modifications.
Definition primitives.cpp:225
Array cubic_pulse(Vec2< int > shape)
Generates a cubic pulse kernel array.
Definition kernels.cpp:97
Array cone_sigmoid(Vec2< int > shape, float alpha, float radius=0.5f, Vec2< float > center={0.5f, 0.5f}, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, Vec4< float > bbox={0.f, 1.f, 0.f, 1.f})
Generates a smooth conical heightmap using a sigmoid-based profile.
Definition cone.cpp:154
Vec2 class for basic manipulation of 2D vectors.
Definition algebra.hpp:40