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/functions.hpp"
22
23#define HMAP_GRADIENT_OFFSET 0.001f
24
25namespace hmap
26{
27
28// F1: the distance to the closest point in space
29// F2: the distance to the second closest point in space
42
61Array biquad_pulse(Vec2<int> shape,
62 float gain = 1.f,
63 const Array *p_ctrl_param = nullptr,
64 const Array *p_noise_x = nullptr,
65 const Array *p_noise_y = nullptr,
66 const Array *p_stretching = nullptr,
67 Vec2<float> center = {0.5f, 0.5f},
68 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
69
89Array bump(Vec2<int> shape,
90 float gain = 1.f,
91 const Array *p_ctrl_param = nullptr, // gain multiplier
92 const Array *p_noise_x = nullptr,
93 const Array *p_noise_y = nullptr,
94 const Array *p_stretching = nullptr,
95 Vec2<float> center = {0.5f, 0.5f},
96 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
97
141Array bump_lorentzian(
142 Vec2<int> shape,
143 float shape_factor = 0.5f,
144 float radius = 0.5f,
145 const Array *p_ctrl_param = nullptr, // shape_factor multiplier
146 const Array *p_noise_x = nullptr,
147 const Array *p_noise_y = nullptr,
148 Vec2<float> center = {0.5f, 0.5f},
149 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
150
172Array caldera(Vec2<int> shape,
173 float radius,
174 float sigma_inner,
175 float sigma_outer,
176 float z_bottom,
177 const Array *p_noise,
178 float noise_amp_r,
179 float noise_ratio_z,
180 Vec2<float> center = {0.5f, 0.5f},
181 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
182
183Array caldera(Vec2<int> shape,
184 float radius,
185 float sigma_inner,
186 float sigma_outer,
187 float z_bottom,
188 Vec2<float> center = {0.5f, 0.5f},
189 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
190
207Array checkerboard(Vec2<int> shape,
208 Vec2<float> kw,
209 const Array *p_noise_x = nullptr,
210 const Array *p_noise_y = nullptr,
211 const Array *p_stretching = nullptr,
212 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
213
221Array constant(Vec2<int> shape, float value = 0.f);
222
245Array crater(Vec2<int> shape,
246 float radius,
247 float depth,
248 float lip_decay,
249 float lip_height_ratio = 0.5f,
250 const Array *p_ctrl_param = nullptr,
251 const Array *p_noise_x = nullptr,
252 const Array *p_noise_y = nullptr,
253 Vec2<float> center = {0.5f, 0.5f},
254 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
255
292Array dendry(Vec2<int> shape,
293 Vec2<float> kw,
294 uint seed,
295 Array &control_function,
296 float eps = 0.05,
297 int resolution = 1,
298 float displacement = 0.075,
299 int primitives_resolution_steps = 3,
300 float slope_power = 2.f,
301 float noise_amplitude_proportion = 0.01,
302 bool add_control_function = true,
303 float control_function_overlap = 0.5f,
304 const Array *p_noise_x = nullptr,
305 const Array *p_noise_y = nullptr,
306 const Array *p_stretching = nullptr,
307 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
308 int subsampling = 1);
309
310Array dendry(Vec2<int> shape,
311 Vec2<float> kw,
312 uint seed,
313 NoiseFunction &noise_function,
314 float noise_function_offset = 0.f,
315 float noise_function_scaling = 1.f,
316 float eps = 0.05,
317 int resolution = 1,
318 float displacement = 0.075,
319 int primitives_resolution_steps = 3,
320 float slope_power = 2.f,
321 float noise_amplitude_proportion = 0.01,
322 bool add_control_function = true,
323 float control_function_overlap = 0.5f,
324 const Array *p_noise_x = nullptr,
325 const Array *p_noise_y = nullptr,
326 const Array *p_stretching = nullptr,
327 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
328
372Array diffusion_limited_aggregation(Vec2<int> shape,
373 float scale,
374 uint seed,
375 float seeding_radius = 0.4f,
376 float seeding_outer_radius_ratio = 0.2f,
377 float slope = 8.f,
378 float noise_ratio = 0.2f);
379
414Array disk(Vec2<int> shape,
415 float radius,
416 float slope = 1.f,
417 const Array *p_ctrl_param = nullptr,
418 const Array *p_noise_x = nullptr,
419 const Array *p_noise_y = nullptr,
420 const Array *p_stretching = nullptr,
421 Vec2<float> center = {0.5f, 0.5f},
422 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
423
441Array gabor_noise(Vec2<int> shape,
442 float kw,
443 float angle,
444 int width,
445 float density,
446 uint seed);
447
468Array gaussian_pulse(Vec2<int> shape,
469 float sigma,
470 const Array *p_ctrl_param = nullptr,
471 const Array *p_noise_x = nullptr,
472 const Array *p_noise_y = nullptr,
473 const Array *p_stretching = nullptr,
474 Vec2<float> center = {0.5f, 0.5f},
475 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
476
495Array noise(NoiseType noise_type,
496 Vec2<int> shape,
497 Vec2<float> kw,
498 uint seed,
499 const Array *p_noise_x = nullptr,
500 const Array *p_noise_y = nullptr,
501 const Array *p_stretching = nullptr,
502 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
503
535Array noise_fbm(NoiseType noise_type,
536 Vec2<int> shape,
537 Vec2<float> kw,
538 uint seed,
539 int octaves = 8,
540 float weight = 0.7f,
541 float persistence = 0.5f,
542 float lacunarity = 2.f,
543 const Array *p_ctrl_param = nullptr,
544 const Array *p_noise_x = nullptr,
545 const Array *p_noise_y = nullptr,
546 const Array *p_stretching = nullptr,
547 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
548
581Array noise_iq(NoiseType noise_type,
582 Vec2<int> shape,
583 Vec2<float> kw,
584 uint seed,
585 int octaves = 8,
586 float weight = 0.7f,
587 float persistence = 0.5f,
588 float lacunarity = 2.f,
589 float gradient_scale = 0.05f,
590 const Array *p_ctrl_param = nullptr,
591 const Array *p_noise_x = nullptr,
592 const Array *p_noise_y = nullptr,
593 const Array *p_stretching = nullptr,
594 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
595
631Array noise_jordan(NoiseType noise_type,
632 Vec2<int> shape,
633 Vec2<float> kw,
634 uint seed,
635 int octaves = 8,
636 float weight = 0.7f,
637 float persistence = 0.5f,
638 float lacunarity = 2.f,
639 float warp0 = 0.4f,
640 float damp0 = 1.f,
641 float warp_scale = 0.4f,
642 float damp_scale = 1.f,
643 const Array *p_ctrl_param = nullptr,
644 const Array *p_noise_x = nullptr,
645 const Array *p_noise_y = nullptr,
646 const Array *p_stretching = nullptr,
647 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
648
681Array noise_parberry(Vec2<int> shape,
682 Vec2<float> kw,
683 uint seed,
684 int octaves = 8,
685 float weight = 0.7f,
686 float persistence = 0.5f,
687 float lacunarity = 2.f,
688 float mu = 1.02f,
689 const Array *p_ctrl_param = nullptr,
690 const Array *p_noise_x = nullptr,
691 const Array *p_noise_y = nullptr,
692 const Array *p_stretching = nullptr,
693 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
694
726Array noise_pingpong(NoiseType noise_type,
727 Vec2<int> shape,
728 Vec2<float> kw,
729 uint seed,
730 int octaves = 8,
731 float weight = 0.7f,
732 float persistence = 0.5f,
733 float lacunarity = 2.f,
734 const Array *p_ctrl_param = nullptr,
735 const Array *p_noise_x = nullptr,
736 const Array *p_noise_y = nullptr,
737 const Array *p_stretching = nullptr,
738 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
739
772Array noise_ridged(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 float k_smoothing = 0.1f,
781 const Array *p_ctrl_param = nullptr,
782 const Array *p_noise_x = nullptr,
783 const Array *p_noise_y = nullptr,
784 const Array *p_stretching = nullptr,
785 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
786
819Array noise_swiss(NoiseType noise_type,
820 Vec2<int> shape,
821 Vec2<float> kw,
822 uint seed,
823 int octaves = 8,
824 float weight = 0.7f,
825 float persistence = 0.5f,
826 float lacunarity = 2.f,
827 float warp_scale = 0.1f,
828 const Array *p_ctrl_param = nullptr,
829 const Array *p_noise_x = nullptr,
830 const Array *p_noise_y = nullptr,
831 const Array *p_stretching = nullptr,
832 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
833
857Array paraboloid(Vec2<int> shape,
858 float angle,
859 float a,
860 float b,
861 float v0 = 0.f,
862 bool reverse_x = false,
863 bool reverse_y = false,
864 const Array *p_noise_x = nullptr,
865 const Array *p_noise_y = nullptr,
866 const Array *p_stretching = nullptr,
867 Vec2<float> center = {0.5f, 0.5f},
868 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
869
888Array peak(Vec2<int> shape,
889 float radius,
890 const Array *p_noise,
891 float noise_r_amp,
892 float noise_z_ratio,
893 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
894
946Array phasor(PhasorProfile phasor_profile,
947 Vec2<int> shape,
948 float kw,
949 const Array &angle,
950 uint seed,
951 float profile_delta = 0.1f,
952 float density_factor = 1.f,
953 float kernel_width_ratio = 2.f,
954 float phase_smoothing = 2.f);
955
1000Array phasor_fbm(PhasorProfile phasor_profile,
1001 Vec2<int> shape,
1002 float kw,
1003 const Array &angle,
1004 uint seed,
1005 float profile_delta = 0.1f,
1006 float density_factor = 1.f,
1007 float kernel_width_ratio = 2.f,
1008 float phase_smoothing = 2.f,
1009 int octaves = 8,
1010 float weight = 0.7f,
1011 float persistence = 0.5f,
1012 float lacunarity = 2.f);
1013
1052Array rectangle(Vec2<int> shape,
1053 float rx,
1054 float ry,
1055 float angle,
1056 float slope = 1.f,
1057 const Array *p_ctrl_param = nullptr,
1058 const Array *p_noise_x = nullptr,
1059 const Array *p_noise_y = nullptr,
1060 const Array *p_stretching = nullptr,
1061 Vec2<float> center = {0.5f, 0.5f},
1062 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1063
1087Array rift(Vec2<int> shape,
1088 float angle,
1089 float slope,
1090 float width,
1091 bool sharp_bottom = false,
1092 const Array *p_ctrl_param = nullptr,
1093 const Array *p_noise_x = nullptr,
1094 const Array *p_noise_y = nullptr,
1095 const Array *p_stretching = nullptr,
1096 Vec2<float> center = {0.5f, 0.5f},
1097 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1098
1119Array slope(Vec2<int> shape,
1120 float angle,
1121 float slope,
1122 const Array *p_ctrl_param = nullptr,
1123 const Array *p_noise_x = nullptr,
1124 const Array *p_noise_y = nullptr,
1125 const Array *p_stretching = nullptr,
1126 Vec2<float> center = {0.5f, 0.5f},
1127 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1128
1150Array step(Vec2<int> shape,
1151 float angle,
1152 float slope,
1153 const Array *p_ctrl_param = nullptr,
1154 const Array *p_noise_x = nullptr,
1155 const Array *p_noise_y = nullptr,
1156 const Array *p_stretching = nullptr,
1157 Vec2<float> center = {0.5f, 0.5f},
1158 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1159
1177void swirl(Array &dx,
1178 Array &dy,
1179 float amplitude = 1.f,
1180 float exponent = 1.f,
1181 const Array *p_noise = nullptr,
1182 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1183
1200Array wave_dune(Vec2<int> shape,
1201 float kw,
1202 float angle,
1203 float xtop,
1204 float xbottom,
1205 float phase_shift = 0.f,
1206 const Array *p_noise_x = nullptr,
1207 const Array *p_noise_y = nullptr,
1208 const Array *p_stretching = nullptr,
1209 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1210
1230Array wave_sine(Vec2<int> shape,
1231 float kw,
1232 float angle,
1233 float phase_shift = 0.f,
1234 const Array *p_noise_x = nullptr,
1235 const Array *p_noise_y = nullptr,
1236 const Array *p_stretching = nullptr,
1237 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1238
1258Array wave_square(Vec2<int> shape,
1259 float kw,
1260 float angle,
1261 float phase_shift = 0.f,
1262 const Array *p_noise_x = nullptr,
1263 const Array *p_noise_y = nullptr,
1264 const Array *p_stretching = nullptr,
1265 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1266
1288Array wave_triangular(Vec2<int> shape,
1289 float kw,
1290 float angle,
1291 float slant_ratio,
1292 float phase_shift = 0.f,
1293 const Array *p_noise_x = nullptr,
1294 const Array *p_noise_y = nullptr,
1295 const Array *p_stretching = nullptr,
1296 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1297
1315Array white(Vec2<int> shape, float a, float b, uint seed);
1316
1330Array white_density_map(const Array &density_map, uint seed);
1331
1351Array white_sparse(Vec2<int> shape, float a, float b, float density, uint seed);
1352
1362Array white_sparse_binary(Vec2<int> shape, float density, uint seed);
1363
1387Array worley_double(Vec2<int> shape,
1388 Vec2<float> kw,
1389 uint seed,
1390 float ratio = 0.5f,
1391 float k = 0.f,
1392 const Array *p_ctrl_param = nullptr,
1393 const Array *p_noise_x = nullptr,
1394 const Array *p_noise_y = nullptr,
1395 const Array *p_stretching = nullptr,
1396 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1397
1398} // namespace hmap
1399
1400namespace hmap::gpu
1401{
1402
1479Array basalt_field(Vec2<int> shape,
1480 Vec2<float> kw,
1481 uint seed,
1482 float warp_kw = 4.f,
1483 float large_scale_warp_amp = 0.2f,
1484 float large_scale_gain = 6.f,
1485 float large_scale_amp = 0.2f,
1486 float medium_scale_kw_ratio = 3.f,
1487 float medium_scale_warp_amp = 1.f,
1488 float medium_scale_gain = 7.f,
1489 float medium_scale_amp = 0.08f,
1490 float small_scale_kw_ratio = 10.f,
1491 float small_scale_amp = 0.1f,
1492 float small_scale_overlay_amp = 0.002f,
1493 float rugosity_kw_ratio = 1.f,
1494 float rugosity_amp = 1.f,
1495 bool flatten_activate = true,
1496 float flatten_kw_ratio = 1.f,
1497 float flatten_amp = 0.f,
1498 const Array *p_noise_x = nullptr,
1499 const Array *p_noise_y = nullptr,
1500 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1501
1525Array gabor_wave(Vec2<int> shape,
1526 Vec2<float> kw,
1527 uint seed,
1528 const Array &angle,
1529 float angle_spread_ratio = 1.f,
1530 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1531
1532Array gabor_wave(Vec2<int> shape,
1533 Vec2<float> kw,
1534 uint seed,
1535 float angle = 0.f,
1536 float angle_spread_ratio = 1.f,
1537 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1538
1571Array gabor_wave_fbm(Vec2<int> shape,
1572 Vec2<float> kw,
1573 uint seed,
1574 const Array &angle,
1575 float angle_spread_ratio = 1.f,
1576 int octaves = 8,
1577 float weight = 0.7f,
1578 float persistence = 0.5f,
1579 float lacunarity = 2.f,
1580 const Array *p_ctrl_param = nullptr,
1581 const Array *p_noise_x = nullptr,
1582 const Array *p_noise_y = nullptr,
1583 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1584
1585Array gabor_wave_fbm(Vec2<int> shape,
1586 Vec2<float> kw,
1587 uint seed,
1588 float angle = 0.f,
1589 float angle_spread_ratio = 1.f,
1590 int octaves = 8,
1591 float weight = 0.7f,
1592 float persistence = 0.5f,
1593 float lacunarity = 2.f,
1594 const Array *p_ctrl_param = nullptr,
1595 const Array *p_noise_x = nullptr,
1596 const Array *p_noise_y = nullptr,
1597 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1598
1646Array gavoronoise(Vec2<int> shape,
1647 Vec2<float> kw,
1648 uint seed,
1649 const Array &angle,
1650 float amplitude = 0.05f,
1651 float angle_spread_ratio = 1.f,
1652 Vec2<float> kw_multiplier = {4.f, 4.f},
1653 float slope_strength = 1.f,
1654 float branch_strength = 2.f,
1655 float z_cut_min = 0.2f,
1656 float z_cut_max = 1.f,
1657 int octaves = 8,
1658 float persistence = 0.4f,
1659 float lacunarity = 2.f,
1660 const Array *p_ctrl_param = nullptr,
1661 const Array *p_noise_x = nullptr,
1662 const Array *p_noise_y = nullptr,
1663 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1664
1665Array gavoronoise(Vec2<int> shape,
1666 Vec2<float> kw,
1667 uint seed,
1668 float angle = 0.f,
1669 float amplitude = 0.05f,
1670 float angle_spread_ratio = 1.f,
1671 Vec2<float> kw_multiplier = {4.f, 4.f},
1672 float slope_strength = 1.f,
1673 float branch_strength = 2.f,
1674 float z_cut_min = 0.2f,
1675 float z_cut_max = 1.f,
1676 int octaves = 8,
1677 float persistence = 0.4f,
1678 float lacunarity = 2.f,
1679 const Array *p_ctrl_param = nullptr,
1680 const Array *p_noise_x = nullptr,
1681 const Array *p_noise_y = nullptr,
1682 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1683
1684Array gavoronoise(const Array &base,
1685 Vec2<float> kw,
1686 uint seed,
1687 float amplitude = 0.05f,
1688 Vec2<float> kw_multiplier = {4.f, 4.f},
1689 float slope_strength = 1.f,
1690 float branch_strength = 2.f,
1691 float z_cut_min = 0.2f,
1692 float z_cut_max = 1.f,
1693 int octaves = 8,
1694 float persistence = 0.4f,
1695 float lacunarity = 2.f,
1696 const Array *p_ctrl_param = nullptr,
1697 const Array *p_noise_x = nullptr,
1698 const Array *p_noise_y = nullptr,
1699 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1700
1750Array mountain_range_radial(Vec2<int> shape,
1751 Vec2<float> kw,
1752 uint seed,
1753 float half_width = 0.2f,
1754 float angle_spread_ratio = 0.5f,
1755 float core_size_ratio = 1.f,
1756 Vec2<float> center = {0.5f, 0.5f},
1757 int octaves = 8,
1758 float weight = 0.7f,
1759 float persistence = 0.5f,
1760 float lacunarity = 2.f,
1761 const Array *p_ctrl_param = nullptr,
1762 const Array *p_noise_x = nullptr,
1763 const Array *p_noise_y = nullptr,
1764 const Array *p_angle = nullptr,
1765 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1766
1768Array noise(NoiseType noise_type,
1769 Vec2<int> shape,
1770 Vec2<float> kw,
1771 uint seed,
1772 const Array *p_noise_x = nullptr,
1773 const Array *p_noise_y = nullptr,
1774 const Array *p_stretching = nullptr,
1775 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1776
1778Array noise_fbm(NoiseType noise_type,
1779 Vec2<int> shape,
1780 Vec2<float> kw,
1781 uint seed,
1782 int octaves = 8,
1783 float weight = 0.7f,
1784 float persistence = 0.5f,
1785 float lacunarity = 2.f,
1786 const Array *p_ctrl_param = nullptr,
1787 const Array *p_noise_x = nullptr,
1788 const Array *p_noise_y = nullptr,
1789 const Array *p_stretching = nullptr,
1790 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1791
1837Array polygon_field(Vec2<int> shape,
1838 Vec2<float> kw,
1839 uint seed,
1840 float rmin = 0.05f,
1841 float rmax = 0.8f,
1842 float clamping_dist = 0.1f,
1843 float clamping_k = 0.1f,
1844 int n_vertices_min = 3,
1845 int n_vertices_max = 16,
1846 float density = 0.5f,
1847 hmap::Vec2<float> jitter = {0.5f, 0.5f},
1848 float shift = 0.1f,
1849 const Array *p_noise_x = nullptr,
1850 const Array *p_noise_y = nullptr,
1851 const Array *p_noise_distance = nullptr,
1852 const Array *p_density_multiplier = nullptr,
1853 const Array *p_size_multiplier = nullptr,
1854 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1855
1900Array polygon_field_fbm(Vec2<int> shape,
1901 Vec2<float> kw,
1902 uint seed,
1903 float rmin = 0.05f,
1904 float rmax = 0.8f,
1905 float clamping_dist = 0.1f,
1906 float clamping_k = 0.1f,
1907 int n_vertices_min = 3,
1908 int n_vertices_max = 16,
1909 float density = 0.1f,
1910 hmap::Vec2<float> jitter = {0.5f, 0.5f},
1911 float shift = 0.1f,
1912 int octaves = 8,
1913 float persistence = 0.5f,
1914 float lacunarity = 2.f,
1915 const Array *p_noise_x = nullptr,
1916 const Array *p_noise_y = nullptr,
1917 const Array *p_noise_distance = nullptr,
1918 const Array *p_density_multiplier = nullptr,
1919 const Array *p_size_multiplier = nullptr,
1920 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
1921
1967Array vorolines(Vec2<int> shape,
1968 float density,
1969 uint seed,
1970 float k_smoothing = 0.f,
1971 float exp_sigma = 0.f,
1972 float alpha = 0.f,
1973 float alpha_span = M_PI,
1975 const Array *p_noise_x = nullptr,
1976 const Array *p_noise_y = nullptr,
1977 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
1978 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
1979
2035Array vorolines_fbm(
2036 Vec2<int> shape,
2037 float density,
2038 uint seed,
2039 float k_smoothing = 0.f,
2040 float exp_sigma = 0.f,
2041 float alpha = 0.f,
2042 float alpha_span = M_PI,
2044 int octaves = 8,
2045 float weight = 0.7f,
2046 float persistence = 0.5f,
2047 float lacunarity = 2.f,
2048 const Array *p_noise_x = nullptr,
2049 const Array *p_noise_y = nullptr,
2050 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
2051 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
2052
2092Array voronoi(Vec2<int> shape,
2093 Vec2<float> kw,
2094 uint seed,
2095 Vec2<float> jitter = {0.5f, 0.5f},
2096 float k_smoothing = 0.f,
2097 float exp_sigma = 0.f,
2099 const Array *p_ctrl_param = nullptr,
2100 const Array *p_noise_x = nullptr,
2101 const Array *p_noise_y = nullptr,
2102 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2103
2150Array voronoi_fbm(Vec2<int> shape,
2151 Vec2<float> kw,
2152 uint seed,
2153 Vec2<float> jitter = {0.5f, 0.5f},
2154 float k_smoothing = 0.f,
2155 float exp_sigma = 0.f,
2157 int octaves = 8,
2158 float weight = 0.7f,
2159 float persistence = 0.5f,
2160 float lacunarity = 2.f,
2161 const Array *p_ctrl_param = nullptr,
2162 const Array *p_noise_x = nullptr,
2163 const Array *p_noise_y = nullptr,
2164 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2165
2192Array voronoi_edge_distance(Vec2<int> shape,
2193 Vec2<float> kw,
2194 uint seed,
2195 Vec2<float> jitter = {0.5f, 0.5f},
2196 const Array *p_ctrl_param = nullptr,
2197 const Array *p_noise_x = nullptr,
2198 const Array *p_noise_y = nullptr,
2199 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2200
2237Array voronoise(Vec2<int> shape,
2238 Vec2<float> kw,
2239 float u_param,
2240 float v_param,
2241 uint seed,
2242 const Array *p_noise_x = nullptr,
2243 const Array *p_noise_y = nullptr,
2244 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2245
2273Array voronoise_fbm(Vec2<int> shape,
2274 Vec2<float> kw,
2275 float u_param,
2276 float v_param,
2277 uint seed,
2278 int octaves = 8,
2279 float weight = 0.7f,
2280 float persistence = 0.5f,
2281 float lacunarity = 2.f,
2282 const Array *p_ctrl_param = nullptr,
2283 const Array *p_noise_x = nullptr,
2284 const Array *p_noise_y = nullptr,
2285 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2286
2335Array vororand(Vec2<int> shape,
2336 float density,
2337 float variability,
2338 uint seed,
2339 float k_smoothing = 0.f,
2340 float exp_sigma = 0.f,
2342 const Array *p_noise_x = nullptr,
2343 const Array *p_noise_y = nullptr,
2344 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f},
2345 Vec4<float> bbox_points = {0.f, 1.f, 0.f, 1.f});
2346
2347Array vororand(Vec2<int> shape,
2348 const std::vector<float> &xp,
2349 const std::vector<float> &yp,
2350 float k_smoothing = 0.f,
2351 float exp_sigma = 0.f,
2353 const Array *p_noise_x = nullptr,
2354 const Array *p_noise_y = nullptr,
2355 Vec4<float> bbox = {0.f, 1.f, 0.f, 1.f});
2356
2357} // 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
Defines modular function objects for procedural generation, including noise algorithms (Perlin,...
Definition blending.hpp:151
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:472
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:726
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:853
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:818
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:422
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:383
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:534
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:328
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 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:602
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:86
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:768
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:899
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:681
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:935
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:169
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 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
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 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:133
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
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:220
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 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
Definition primitives.hpp:31
@ EDGE_DISTANCE_SQUARED
Definition primitives.hpp:38
@ F1_SQUARED
Definition primitives.hpp:32
@ CONSTANT_F2MF1_SQUARED
Definition primitives.hpp:40
@ F2_SQUARED
Definition primitives.hpp:33
@ CONSTANT
Definition primitives.hpp:39
@ F1TF2_SQUARED
Definition primitives.hpp:34
@ F2MF1_SQUARED
Definition primitives.hpp:36
@ F1DF2_SQUARED
Definition primitives.hpp:35
@ EDGE_DISTANCE_EXP
Definition primitives.hpp:37
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 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:272
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:347
NoiseType
Enumeration of various noise types used for procedural generation.
Definition functions.hpp:62
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 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:249
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:155
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:195
Vec2 class for basic manipulation of 2D vectors.
Definition algebra.hpp:40