46 const Array *p_noise_x =
nullptr,
47 const Array *p_noise_y =
nullptr,
48 glm::vec2 center = {0.5f, 0.5f},
49 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
80 const Array &array_after,
84 const Array &array_after,
189void equalize(Array &array,
const Array *p_mask);
212void expand(Array &array,
int ir,
const Array *p_mask,
int iterations = 1);
226void expand(Array &array,
int ir,
int iterations = 1);
239void expand(Array &array,
const Array &kernel,
int iterations = 1);
292 float anisotropy = 1.f,
293 const Array *p_mask =
nullptr);
300 float noise_ratio = 0.2f);
328Array
faceted(
const Array &array,
330 const Array *p_noise_x =
nullptr,
331 const Array *p_noise_y =
nullptr);
368 float noise_ratio = 0.2f,
369 const Array *p_seed_mask =
nullptr);
375 float noise_ratio = 0.2f,
376 const Array *p_seed_mask =
nullptr);
416 glm::ivec2 shape_coarse,
420 float noise_ratio = 0.2f);
450void fold(Array &array,
473void fold(Array &array,
int iterations = 3,
float k = 0.05f);
498void gain(Array &array,
float factor,
const Array *p_mask);
512void gain(Array &array,
float factor);
637void kuwahara(Array &array,
int ir,
float mix_ratio = 1.f);
667void kuwahara(Array &array,
int ir,
const Array *p_mask,
float mix_ratio = 1.f);
698void laplace(Array &array,
float sigma = 0.125f,
int iterations = 3);
723 float sigma = 0.125f,
740void laplace1d(std::vector<float> &v,
float sigma = 0.5f,
int iterations = 1);
842void make_binary(Array &array,
float threshold = 0.f);
946 bool talus_weighted =
true);
953 bool talus_weighted =
true);
974void median_3x3(Array &array,
const Array *p_mask);
1097 float amount = 0.1f,
1099 bool reverse =
false);
1102 const Array *p_mask,
1103 float amount = 0.1f,
1105 bool reverse =
false);
1131void plateau(Array &array,
const Array *p_mask,
int ir,
float factor);
1133void plateau(Array &array,
int ir,
float factor);
1185void recast_canyon(Array &array,
const Array &vcut,
float gamma = 4.f);
1189 const Array *p_mask,
1194 const Array *p_mask,
1196 const Array *p_noise =
nullptr);
1201 const Array *p_noise =
nullptr);
1242 const Array *p_mask,
1289 const Array *p_mask,
1293 float cut_min = 0.05f,
1294 float cut_max = 0.5f,
1295 float k_smoothing = 0.01f,
1339 bool reverse =
false,
1340 bool transpose_effect =
false,
1341 float global_scaling = 0.f);
1382 const Array *p_mask,
1386 bool reverse =
false,
1387 bool transpose_effect =
false,
1388 float global_scaling = 0.f);
1421void recast_peak(Array &array,
int ir,
float gamma = 2.f,
float k = 0.1f);
1425 const Array *p_mask,
1480 const Array *p_noise =
nullptr,
1481 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1489 const Array *p_mask,
1491 const Array *p_noise =
nullptr,
1492 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
1521void recast_sag(Array &array,
float vref,
float k);
1526 const Array *p_mask);
1554 const std::vector<float> &t,
1555 const std::vector<float> &v);
1558 const std::vector<float> &t,
1559 const std::vector<float> &v,
1560 const Array *p_mask);
1592 const Array *p_mask,
1625 const Array *p_mask,
1658 const Array *p_mask);
1713 const Array *p_mask);
1744 const Array &threshold,
1745 float scaling = 1.f,
1746 float transition_extent = 0.f);
1750 float scaling = 1.f,
1751 float transition_extent = 0.f);
1754 const Array &threshold,
1755 const Array *p_mask,
1756 float scaling = 1.f,
1757 float transition_extent = 0.f);
1761 const Array *p_mask,
1762 float scaling = 1.f,
1763 float transition_extent = 0.f);
1792void saturate(
Array &array,
float vmin,
float vmax,
float k = 0.f);
1821 const Array *p_mask,
1852 const Array *p_mask,
1854 float scale = 0.5f);
1884void shrink(
Array &array,
int ir,
int iterations = 1);
1887 const Array *p_mask,
1888 int iterations = 1);
1890 const Array &kernel,
1891 int iterations = 1);
1893 const Array &kernel,
1894 const Array *p_mask,
1895 int iterations = 1);
1930 float anisotropy = 1.f,
1931 const Array *p_mask =
nullptr);
2082 Array *p_deposition_map =
nullptr);
2086 const Array *p_mask,
2088 Array *p_deposition_map =
nullptr);
2116 const Array *p_mask);
2144 const Array *p_mask);
2214 const Array *p_mask,
2253 const Array *p_mask,
2295 float noise_ratio = 0.f,
2296 const Array *p_noise =
nullptr,
2343 const Array *p_mask,
2345 float noise_ratio = 0.f,
2346 const Array *p_noise =
nullptr,
2376 float node_density = 0.001f,
2377 const Array *p_weight =
nullptr);
2416 float wrinkle_amplitude,
2417 const Array *p_mask,
2418 float wrinkle_angle = 0.f,
2419 float displacement_amplitude = 1.f,
2424 float weight = 0.7f,
2425 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2428 float wrinkle_amplitude,
2429 float wrinkle_angle = 0.f,
2430 float displacement_amplitude = 1.f,
2435 float weight = 0.7f,
2436 glm::vec4 bbox = {0.f, 1.f, 0.f, 1.f});
2444void expand(Array &array,
int ir,
int iterations = 1);
2447 const Array *p_mask,
2448 int iterations = 1);
2450 const Array &kernel,
2451 int iterations = 1);
2453 const Array &kernel,
2454 const Array *p_mask,
2455 int iterations = 1);
2462 const Array *p_mask,
2466void laplace(Array &array,
float sigma = 0.2f,
int iterations = 3);
2468 const Array *p_mask,
2470 int iterations = 3);
2483 bool talus_weighted =
true);
2488 const Array *p_mask,
2490 bool talus_weighted =
true);
2494void median_3x3(Array &array,
const Array *p_mask);
2507 float amount = 0.1f,
2509 bool reverse =
false);
2511 const Array *p_mask,
2512 float amount = 0.1f,
2514 bool reverse =
false);
2517void plateau(Array &array,
const Array *p_mask,
int ir,
float factor);
2518void plateau(Array &array,
int ir,
float factor);
2548 const Array *p_mask,
2552void shrink(Array &array,
int ir,
int iterations = 1);
2555 const Array *p_mask,
2556 int iterations = 1);
2558 const Array &kernel,
2559 int iterations = 1);
2561 const Array &kernel,
2562 const Array *p_mask,
2563 int iterations = 1);
2569void smooth_cpulse(Array &array,
int ir,
const Array *p_mask);
2581 Array *p_deposition_map =
nullptr);
2584 const Array *p_mask,
2586 Array *p_deposition_map =
nullptr);
2592 const Array *p_mask);
2598 const Array *p_mask);
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
unsigned int uint
Definition array.hpp:14
Array class, helper to manipulate 2D float array with "(i, j)" indexing.
Definition array.hpp:32
Definition blending.hpp:186
Array minimum_local_disk(const Array &array, int ir)
See hmap::minimum_local_disk.
Definition filters_gpu.cpp:301
Array project_talus_along_direction(const Array &array, float talus, int direction=0)
Projects array values along a given direction using talus attenuation.
Definition filters_gpu.cpp:392
void laplace(Array &array, float sigma=0.2f, int iterations=3)
See hmap::laplace.
Definition filters_gpu.cpp:144
Array maximum_local(const Array &array, int ir)
See hmap::maximum_local.
Definition filters_gpu.cpp:183
Array median_pseudo(const Array &array, int ir)
See hmap::median_pseudo.
Definition filters_gpu.cpp:289
void expand(Array &array, int ir, int iterations=1)
See hmap::expand.
Definition filters_gpu.cpp:16
void smooth_fill_smear_peaks(Array &array, int ir)
See hmap::smooth_fill_smear_peaks.
Definition filters_gpu.cpp:681
void smooth_cpulse_edge_removing(Array &array, float talus, float talus_width, int ir)
See hmap::smooth_cpulse_edge_removing.
Definition filters_gpu.cpp:618
void smooth_fill_holes(Array &array, int ir)
See hmap::smooth_fill_holes.
Definition filters_gpu.cpp:653
Array mean_shift(const Array &array, int ir, float talus, int iterations=1, bool talus_weighted=true)
See hmap::mean_shift.
Definition filters_gpu.cpp:214
void shrink(Array &array, int ir, int iterations=1)
See hmap::shrink.
Definition filters_gpu.cpp:452
void gamma_correction_local(Array &array, float gamma, int ir, float k=0.1f)
See hmap::gamma_correction_local.
Definition filters_gpu.cpp:95
void smooth_cpulse(Array &array, int ir)
See hmap::smooth_cpulse.
Definition filters_gpu.cpp:546
void normal_displacement(Array &array, float amount=0.1f, int ir=0, bool reverse=false)
See hmap::normal_displacement.
Definition filters_gpu.cpp:309
void smooth_fill(Array &array, int ir, float k=0.1f, Array *p_deposition_map=nullptr)
See hmap::smooth_fill.
Definition filters_gpu.cpp:629
Array maximum_local_disk(const Array &array, int ir)
See hmap::maximum_local_disk.
Definition filters_gpu.cpp:206
void plateau(Array &array, const Array *p_mask, int ir, float factor)
See hmap::plateau.
Definition filters_gpu.cpp:359
void median_3x3(Array &array)
See hmap::median_3x3.
Definition filters_gpu.cpp:264
Array minimum_local(const Array &array, int ir)
See hmap::minimum_local.
Definition filters_gpu.cpp:296
Definition algebra.hpp:22
void expand_talus(Array &z, const Array &mask, float talus, uint seed, int ir=1, float noise_ratio=0.2f)
Definition expand_talus.cpp:18
void laplace_edge_preserving(Array &array, float talus, float sigma=0.2f, int iterations=3)
Apply a low-pass anisotropic Laplace filter to the input array.
Definition filters.cpp:379
Array median_pseudo(const Array &array, int ir)
Computes a fast pseudo-median approximation of a local neighborhood in an array.
Definition filters.cpp:599
void equalize(Array &array)
Apply histogram equalization to the array values.
Definition filters.cpp:30
void smooth_fill_holes(Array &array, int ir)
Apply smoothing to fill holes (elliptic concave surfaces).
Definition filters.cpp:1030
void directional_blur(Array &array, int ir, float angle, float intensity, float stretch=1.f, float spread=1.f)
Applies a directional blur to a 2D array based on a spatially varying angle field.
Definition directional_blur.cpp:55
Array maximum_local_disk(const Array &array, int ir)
Return the local maxima based on a maximum filter using a disk kernel.
Definition range.cpp:301
void fill_talus_fast(Array &z, glm::ivec2 shape_coarse, float talus, uint seed, int ir=1, float noise_ratio=0.2f)
Fill terrain values with a given downslope talus, optimized using a coarse mesh for faster computatio...
Definition fill_talus.cpp:107
Array minimum_local_disk(const Array &array, int ir)
Return the local minima based on a maximum filter using a disk kernel.
Definition range.cpp:385
void fold(Array &array, float vmin, float vmax, int iterations=3, float k=0.05f)
Apply a "folding" filter (successive absolute values) to the array elements.
Definition filters.cpp:159
void saturate(Array &array, float vmin, float vmax, float from_min, float from_max, float k=0.f)
Saturate the array values based on the input interval [vmin, vmax] (the output amplitude is not modif...
Definition recurve.cpp:178
void wrinkle(Array &array, float wrinkle_amplitude, const Array *p_mask, float wrinkle_angle=0.f, float displacement_amplitude=1.f, int ir=0, float kw=2.f, uint seed=1, int octaves=8, float weight=0.7f, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Apply wrinkle effect to the array, creating wrinkled or bumpy features.
Definition filters.cpp:1308
void steepen(Array &array, float scale, int ir=8)
Steepen (or flatten) the array map.
Definition filters.cpp:1114
Array tessellate(Array &array, uint seed, float node_density=0.001f, const Array *p_weight=nullptr)
Apply tessellation to the array with random node placement.
Definition tesselate.cpp:18
void make_binary(Array &array, float threshold=0.f)
Convert array values to binary using a threshold.
Definition filters.cpp:456
void smooth_gaussian(Array &array, int ir)
Apply Gaussian filtering to the array.
Definition filters.cpp:955
void fill_talus(Array &z, float talus, uint seed, int ir=1, float noise_ratio=0.2f, const Array *p_seed_mask=nullptr)
Modifies a terrain array by filling it with talus slopes.
Definition fill_talus.cpp:97
Array maximum_local(const Array &array, int ir)
Return the local maxima based on a maximum filter with a square kernel.
Definition range.cpp:264
PrimitiveType
Defines the primitive shape used for synthesis.
Definition primitives.hpp:53
void plateau(Array &array, const Array *p_mask, int ir, float factor)
Apply a plateau-shape filter to the input array.
Definition filters.cpp:670
void terrace(Array &array, uint seed, int nlevels, float gain=0.9f, float noise_ratio=0.f, const Array *p_noise=nullptr, float vmin=0.f, float vmax=-1.f)
Applies a terrace effect to the values in an array.
Definition filters.cpp:1187
void recast_cliff(Array &array, float talus, int ir, float amplitude, float gain=2.f)
Transform heightmap to add cliffs where gradients are steep enough.
Definition recast.cpp:96
void shrink_directional(Array &array, int ir, float angle, float aspect_ratio, float anisotropy=1.f, const Array *p_mask=nullptr)
Apply directional shrinking, or "deflating", to emphasize the ridges in the terrain.
Definition filters.cpp:841
void sharpen_cone(Array &array, int ir, float intensity=0.5f)
Apply a sharpening filter based on a smooth cone filter.
Definition filters.cpp:779
void laplace(Array &array, float sigma=0.125f, int iterations=3)
Applies an iterative 8-neighbor Laplacian smoothing filter on an array.
Definition filters.cpp:331
void recurve_exp(Array &array, float tau=0.5f)
Apply a curve adjustment filter using a "sharp exponential-shape" curve.
Definition recurve.cpp:76
void sharpen(Array &array, float ratio=1.f)
Apply a sharpening filter based on the Laplace operator.
Definition filters.cpp:753
void smooth_flat(Array &array, int ir)
Applies a smoothing average filter to the given 2D array in both dimensions.
Definition filters.cpp:942
void low_pass_high_order(Array &array, int order=9, float sigma=1.f)
Apply a low-pass high-order filter to the input array.
Definition filters.cpp:415
void steepen_convective(Array &array, float angle, int iterations=1, int ir=0, float dt=0.1f)
Steepen array values by applying a nonlinear convection operator in a given direction.
Definition filters.cpp:1137
Array mean_shift(const Array &array, int ir, float talus, int iterations=1, bool talus_weighted=true)
Applies the mean shift algorithm to the input array.
Definition filters.cpp:475
void match_histogram(Array &array, const Array &array_reference)
Transform the input array elevation to match the histogram of a reference array.
Definition filters.cpp:466
void median_3x3(Array &array, const Array *p_mask)
Apply a 3x3 median filter to the input array.
Definition filters.cpp:587
void smooth_cpulse(Array &array, int ir)
Apply filtering to the array using convolution with a cubic pulse kernel.
Definition filters.cpp:893
void recurve(Array &array, const std::vector< float > &t, const std::vector< float > &v)
Apply a curve adjustment filter to the array.
Definition recurve.cpp:20
neighborhood
Enum representing different types of neighborhood lattices.
Definition filters.hpp:34
@ VON_NEUMANN
Von Neumann neighborhood: includes only the four.
Definition filters.hpp:36
@ CROSS
Cross-shaped neighborhood: includes only the diagonal.
Definition filters.hpp:38
@ MOORE
Moore neighborhood: includes all eight surrounding cells.
Definition filters.hpp:35
void smoothstep_local(Array &array, int ir)
Applies a localized smoothstep operation to the provided array.
Definition filters.cpp:1086
void recurve_s(Array &array)
Apply a curve adjustment filter using a smooth "S-shape" curve.
Definition recurve.cpp:126
void smooth_cpulse_edge_removing(Array &array, float talus, float talus_width, int ir)
Smooths an array while attenuating edges using a gradient-based pulse.
Definition filters.cpp:931
float angle(const Point &p1, const Point &p2)
Computes the angle between two points relative to the x-axis.
Definition points.cpp:42
void normal_displacement(Array &array, float amount=0.1f, int ir=0, bool reverse=false)
Apply a displacement to the terrain along the normal direction.
Definition filters.cpp:606
void gain(Array &array, float factor, const Array *p_mask)
Apply a gain correction to the array elements.
Definition filters.cpp:189
Array diffusion_retargeting(const Array &array_before, const Array &array_after, int ir)
Applies diffusion retargeting by detecting local maxima and adjusting based on the difference between...
Definition diffusion_retargeting.cpp:17
void reverse_above_theshold(Array &array, const Array &threshold, float scaling=1.f, float transition_extent=0.f)
Applies a smooth reversal of values above a given threshold.
Definition filters.cpp:682
void gamma_correction(Array &array, float gamma, const Array *p_mask)
Apply gamma correction to the input array.
Definition filters.cpp:211
void smooth_cone(Array &array, int ir)
Apply a convolution filter with a cone kernel to smooth the array.
Definition filters.cpp:855
void recast_sag(Array &array, float vref, float k)
Transform heightmap to give a "cliff" like appearance.
Definition recast.cpp:412
void laplace1d(std::vector< float > &v, float sigma=0.5f, int iterations=1)
Apply a low-pass Laplace filter to a vector.
Definition vector.cpp:32
void recast_peak(Array &array, int ir, float gamma=2.f, float k=0.1f)
Transform heightmap to give a "peak" like appearance.
Definition recast.cpp:308
void shrink(Array &array, int ir, int iterations=1)
Apply shrinking, or "deflating", to emphasize the ridges in the heightmap.
Definition filters.cpp:798
void recast_cliff_directional(Array &array, float talus, int ir, float amplitude, float angle, float gain=2.f)
Transform heightmap to add directional cliffs where gradients are steep enough.
Definition recast.cpp:146
void gamma_correction_local(Array &array, float gamma, int ir, float k=0.1f)
Apply a "local" gamma correction to the input array.
Definition filters.cpp:223
Array faceted(const Array &array, int neighborhood=0, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr)
Generate a faceted heightmap that retains the main features of the input heightmap.
Definition faceted.cpp:17
void recast_billow(Array &array, float vref, float k)
Transform heightmap to give a "billow" like appearance.
Definition recast.cpp:22
void kuwahara(Array &array, int ir, float mix_ratio=1.f)
Applies the Kuwahara filter to an array with optional per-pixel masking.
Definition filters.cpp:272
void recast_escarpment(Array &array, int ir=16, float ratio=0.1f, float scale=1.f, bool reverse=false, bool transpose_effect=false, float global_scaling=0.f)
Applies an escarpment effect to the given 2D array, modifying its values based on cumulative displace...
Definition recast.cpp:231
Array minimum_local(const Array &array, int ir)
Return the local minima based on a maximum filter with a square kernel.
Definition range.cpp:380
void expand(Array &array, int ir, const Array *p_mask, int iterations=1)
Apply expansion, or "inflation", to emphasize the bulk of the terrain.
Definition filters.cpp:79
Array bulkify(const Array &z, const PrimitiveType &primitive_type, float amp=1.f, const Array *p_noise_x=nullptr, const Array *p_noise_y=nullptr, glm::vec2 center={0.5f, 0.5f}, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Definition bulkify.cpp:11
void recast_canyon(Array &array, const Array &vcut, float gamma=4.f)
Transform heightmap to give a "canyon" like appearance.
Definition recast.cpp:27
void recast_rocky_slopes(Array &array, float talus, int ir, float amplitude, uint seed, float kw, float gamma=0.5f, const Array *p_noise=nullptr, glm::vec4 bbox={0.f, 1.f, 0.f, 1.f})
Transform heightmap by adding "rock-like" features at higher slopes.
Definition recast.cpp:333
void smooth_fill(Array &array, int ir, float k=0.1f, Array *p_deposition_map=nullptr)
Apply cubic pulse smoothing to fill lower flat regions while preserving some sharpness.
Definition filters.cpp:995
void recurve_kura(Array &array, float a, float b)
Apply a curve adjustment filter using Kumaraswamy's cumulative distribution function (CDF).
Definition recurve.cpp:101
void recast_cracks(Array &array, float cut_min=0.05f, float cut_max=0.5f, float k_smoothing=0.01f, float vmin=0.f, float vmax=-1.f)
Definition recast.cpp:207
void recurve_bexp(Array &array, float tau=0.5f)
Apply a curve adjustment filter using a "bumpy exponential-shape" curve.
Definition recurve.cpp:51
void smooth_fill_smear_peaks(Array &array, int ir)
Apply smoothing to smear peaks (elliptic convex surfaces).
Definition filters.cpp:1058
void recurve_smoothstep_rational(Array &array, float n)
Apply a curve adjustment filter using an nth-order smoothstep curve.
Definition recurve.cpp:150
void expand_directional(Array &array, int ir, float angle, float aspect_ratio, float anisotropy=1.f, const Array *p_mask=nullptr)
Apply expansion, or "inflation", to emphasize the bulk of the terrain, using a directional kernel.
Definition filters.cpp:140
Core procedural primitives for heightmap generation, including noise functions (Perlin,...