载入中...
搜索中...
未找到
TerrainEffect.cpp
浏览该文件的文档.
10 target.getHeight() == mask.getHeight() && std::all_of(mask.data().begin(), mask.data().end(), isUnit);
26Result<int> applyTerrainContrast(Heightmap& target, const Heightmap& mask, float strength, float featureSize) {
28 if (!validEffectInputs(target, mask) || !std::isfinite(strength) || strength < 0 || !std::isfinite(featureSize) ||
30 return invalid("terrain.contrast: finite matching rasters, unit mask and nonnegative strength/size required");
42 if (!isRepresentable(value)) return invalid("terrain.contrast: output exceeds finite float range");
49Result<int> applyTerrainSmooth(Heightmap& target, const Heightmap& mask, const TerrainSmoothSettings& settings) {
51 if (!validEffectInputs(target, mask) || !isUnit(settings.strength) || !std::isfinite(settings.radius) ||
52 settings.radius < 0 || !std::isfinite(settings.verticality) || std::abs(settings.verticality) > 1)
54 "terrain.smooth: matching unit mask, unit strength, nonnegative radius and verticality [-1,1] required");
64 pass == 0 ? settings.radius : double(settings.radius) * current.getHeight() / current.getWidth();
79 const double value = std::lerp(original, filtered, double(settings.strength) * mask.data()[index]);
80 if (!isRepresentable(value)) return invalid("terrain.smooth: output exceeds finite float range");
89Result<int> applyTerrainRidges(Heightmap& target, const Heightmap& mask, const TerrainRidgeSettings& settings) {
91 if (!validEffectInputs(target, mask) || !isUnit(settings.strength) || !isUnit(settings.mixStrength) ||
92 !std::isfinite(settings.exponent) || settings.exponent <= 0 || !std::isfinite(settings.minimum) ||
95 "terrain.ridges: finite matching unit mask, unit strengths, positive exponent, ordered bounds and "
125Result<int> applyTerrainTerrace(Heightmap& target, const Heightmap& mask, const TerrainTerraceSettings& settings) {
127 if (!validEffectInputs(target, mask) || !isUnit(settings.strength) || !isUnit(settings.bevel) ||
129 return invalid("terrain.terrace: finite matching unit mask, unit strength/bevel and positive count required");
135 const double value = std::lerp(original, rounded / settings.count, double(settings.strength) * mask.data()[i]);
136 if (!isRepresentable(value)) return invalid("terrain.terrace: output exceeds finite float range");
154 if (!isRepresentable(value)) return invalid("terrain.power: output exceeds finite float range");
160Result<int> applyTerrainHeightCurve(Heightmap& target, const Heightmap& mask, const Heightmap& curve, float minimum,
163 if (!validEffectInputs(target, mask) || !validRaster(curve) || curve.getHeight() != 1 || !std::isfinite(minimum) ||
165 return invalid("terrain.heightCurve: matching unit mask, one-row curve and ordered finite range required");
172 const double value = std::lerp(original, range * curveSample(curve, t), double(mask.data()[i]));
173 if (!isRepresentable(value)) return invalid("terrain.heightCurve: output exceeds finite float range");
179Result<int> applyTerrainHeightMix(Heightmap& target, const Heightmap& local, const Heightmap& global,
182 if (!validEffectInputs(target, global) || !validRaster(local) || local.getWidth() != target.getWidth() ||
184 !std::isfinite(settings.maximum) || settings.minimum > settings.maximum || !isUnit(settings.midpoint) ||
185 !std::isfinite(settings.strength) || settings.strength < 0 || !std::isfinite(settings.clipMinimum) ||
188 "terrain.heightMix: finite matching rasters, unit global/midpoint, nonnegative strength and ordered ranges "
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
double curveSample(const Heightmap &curve, double value)
Curve sample.
Definition TerrainRasterInternal.h:72
Result< int > publish(Heightmap &target, std::vector< float > candidate)
Publish.
Definition TerrainRasterInternal.h:62
Definition EvpackPointGraphLoader.h:12
Result< int > applyTerrainTerrace(Heightmap &target, const Heightmap &mask, const TerrainTerraceSettings &settings)
Terrace scalar heights using nearest-even rounding and the shader's one-sided bevel.
Definition TerrainEffect.cpp:125
Result< int > applyTerrainContrast(Heightmap &target, const Heightmap &mask, float strength, float featureSize)
Apply the nine-tap Pcg contrast equation to native scalar heights.
Definition TerrainEffect.cpp:26
Result< int > applyTerrainHeightMix(Heightmap &target, const Heightmap &local, const Heightmap &global, const TerrainHeightMixSettings &settings)
Mix centered local brush heights into terrain, then globally mask and clip.
Definition TerrainEffect.cpp:179
Result< int > applyTerrainSmooth(Heightmap &target, const Heightmap &mask, const TerrainSmoothSettings &settings)
Apply Pcg's horizontal then vertical seven-pair weighted smooth passes.
Definition TerrainEffect.cpp:49
Result< int > applyTerrainPower(Heightmap &target, const Heightmap &mask, float power)
Apply the Pcg PowerOf control: lerp(height,pow(height,4-power),mask).
Definition TerrainEffect.cpp:142
Result< int > applyTerrainRidges(Heightmap &target, const Heightmap &mask, const TerrainRidgeSettings &settings)
Apply ordered horizontal/vertical ridge powers, neighbor mixing and per-pass clipping.
Definition TerrainEffect.cpp:89
Result< int > applyTerrainHeightCurve(Heightmap &target, const Heightmap &mask, const Heightmap &curve, float minimum, float maximum)
Apply the height-transform shader's smoothstep and one-row height curve.
Definition TerrainEffect.cpp:160
Definition Container.h:602
Mix-height scalar controls; delta scale is maximum-minimum, independent of clipping bounds....
Definition TerrainEffect.h:102
Ridge controls in caller height units, with explicit clipping bounds. Defaults match the Pcg packed s...
Definition TerrainEffect.h:32
Two-pass smoothing controls; radius in texels, verticality in [-1,1], strength in [0,...
Definition TerrainEffect.h:22
Terrace frequency in inverse height units, interior bevel in [0,1], strength in [0,...
Definition TerrainEffect.h:39