载入中...
搜索中...
未找到
TerrainMask.cpp
浏览该文件的文档.
12Result<int> smoothTerrainMask(Heightmap& target, const Heightmap& input, float verticality, float blurRadius) {
14 target.getHeight() != input.getHeight() || !std::isfinite(verticality) || std::abs(verticality) > 1 ||
16 return invalid("terrain.smoothMask: matching finite rasters, verticality [-1,1] and radius >= 0 required");
29Result<int> configureTerrainBrushWorld(TerrainBrushBlendSettings& target, const TerrainStampSettings& w,
32 if (contextWidth <= 0 || contextHeight <= 0 || h.width <= 0 || h.height <= 0 || !positive(w.spacingX) ||
35 return invalid("terrain.paintContext: positive dimensions, spacing, footprint and finite strength required");
37 if (!std::isfinite(v)) return invalid("terrain.paintContext: finite world coordinates required");
40 if (!std::isfinite(spanX) || !std::isfinite(spanZ) || !std::isfinite(heightSpanX) || !std::isfinite(heightSpanZ))
43 const double bx = (w.originX - w.centerX) - 0.5 * w.spacingX, bz = (w.originZ - w.centerZ) - 0.5 * w.spacingZ;
56 if (!std::all_of(std::begin(values), std::end(values), [](double v) { return isRepresentable(v); }))
73Result<int> generateTerrainConcavityMask(Heightmap& target, const Heightmap& input, const Heightmap& heights,
76 if (!validRaster(target) || !validRaster(input) || !validRaster(heights) || !validRaster(curve) ||
77 target.getWidth() != input.getWidth() || target.getHeight() != input.getHeight() || curve.getHeight() != 1 ||
79 !std::isfinite(s.concavity) || mode < TerrainMaskBlend::Multiply || mode > TerrainMaskBlend::Subtract)
80 return invalid("terrain.concavity: finite compatible rasters and valid feature controls required");
84 const uint32_t width = heights.getWidth(), height = heights.getHeight(), offset = uint32_t(s.featureSize);
92 (sample(r, u) + 2 * sample(r, z) + sample(r, d) - sample(l, u) - 2 * sample(l, z) - sample(l, d)) / 8;
94 (sample(l, d) + 2 * sample(x, d) + sample(r, d) - sample(l, u) - 2 * sample(x, u) - sample(r, u)) / 8;
96 return length == 0 ? std::array<double, 2>{0, 0} : std::array<double, 2>{dx / length, dz / length};
125 if (!isRepresentable(result)) return invalid("terrain.concavity: result exceeds finite float range");
147Result<int> generateTerrainCurvatureMask(Heightmap& target, const Heightmap& input, const Heightmap& heights,
150 if (!validRaster(target) || !validRaster(input) || !validRaster(heights) || !validRaster(curve) ||
151 curve.getHeight() != 1 || target.getWidth() != input.getWidth() || target.getHeight() != input.getHeight() ||
152 !std::isfinite(s.radius) || s.radius < 0 || !std::isfinite(s.worldUnits) || !std::isfinite(s.intensity) ||
154 s.steps > (std::numeric_limits<int>::max() - 1) / s.directions || mode < TerrainMaskBlend::Multiply ||
156 return invalid("terrain.curvature: finite compatible rasters, curve and valid radial controls required");
172 return invalid("terrain.curvature: negative base with fractional intensity has no real result");
186 if (!isRepresentable(result)) return invalid("terrain.curvature: result exceeds finite float range");
192Result<int> generateTerrainErosionMask(Heightmap& target, const Heightmap& oldHeights, const Heightmap& erosion,
203Result<int> growShrinkTerrainMask(Heightmap& target, const Heightmap& source, const Heightmap& curve, float distance) {
205 if (!validRaster(target) || !validRaster(source) || !validRaster(curve) || curve.getHeight() != 1 ||
209 "terrain.growShrink: matching finite rasters, one-row curve and indexable finite radius required");
219 const auto firstX = std::max(0LL, static_cast<long long>(std::floor((radius - u) * width)) - 1);
220 const auto lastX = std::min(last, static_cast<long long>(std::ceil((radius + 1 - u) * width)) + 1);
221 const auto firstZ = std::max(0LL, static_cast<long long>(std::floor((radius - v) * width)) - 1);
222 const auto lastZ = std::min(last, static_cast<long long>(std::ceil((radius + 1 - v) * width)) + 1);
234 if (!isRepresentable(transformed)) return invalid("terrain.growShrink: result exceeds finite float range");
239Result<int> applyTerrainStrength(Heightmap& target, const Heightmap& source, const Heightmap& curve,
241 if (!validRaster(target) || !validRaster(source) || !validRaster(curve) || curve.getHeight() != 1 ||
243 !std::isfinite(strength) || strength < 0 || strength > 1 || mode < TerrainStrengthMode::Replace ||
246 "terrain.strength: matching finite rasters, one-row curve, valid mode and unit strength required");
260 if (!isRepresentable(value)) return invalid("terrain.strength: output exceeds finite float range");
265Result<int> blendTerrainBrush(Heightmap& target, const Heightmap& oldHeights, const Heightmap& newHeights,
270 if (!validRaster(target) || !validRaster(oldHeights) || !validRaster(newHeights) || !validRaster(brush) ||
271 !std::all_of(std::begin(coefficients), std::end(coefficients), [](float v) { return std::isfinite(v); }))
285 if (!isRepresentable(result)) return invalid("terrain.brush: result exceeds finite float range");
292 return validRaster(a) && validRaster(b) && a.getWidth() == b.getWidth() && a.getHeight() == b.getHeight();
305Result<int> transformTerrainMask(Heightmap& target, const Heightmap& source, const Heightmap& curve) {
309 for (size_t i = 0; i < result.size(); ++i) result[i] = float(curveSample(curve, source.data()[i]));
313Result<int> generateTerrainRangeMask(Heightmap& target, const Heightmap& source, float minimum, float maximum,
327Result<int> deriveTerrainSlope(Heightmap& target, const Heightmap& heights, float spacingX, float spacingZ,
354 s.axis < TerrainDistanceAxis::Circle || s.axis > TerrainDistanceAxis::RoundedSquare || s.scaleX == 0 ||
356 return invalid("terrain.mask.distance: valid raster, curves, axis, scales and roundness required");
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
double textureSample(const Heightmap &map, double u, double v)
Texture sample.
Definition TerrainRasterInternal.h:38
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
TerrainStrengthMode
StrengthTransform pass order; source pass 0 named Multiply actually replaces with the curve value.
Definition TerrainMask.h:82
Result< int > generateTerrainDistanceMask(Heightmap &target, const TerrainDistanceMaskSettings &s, const Heightmap &filterCurve, const Heightmap &strengthCurve)
Generate a transformed distance mask using circle, X, Z or rounded-square coordinates.
Definition TerrainMask.cpp:351
Result< int > transformTerrainMask(Heightmap &target, const Heightmap &source, const Heightmap &curve)
Transform scalar input through a clamped bilinear one-row curve texture.
Definition TerrainMask.cpp:305
Result< int > generateTerrainRangeMask(Heightmap &target, const Heightmap &source, float minimum, float maximum, const Heightmap &filterCurve, const Heightmap &strengthCurve)
Generate height/range fitness with smoothstep followed by filter and strength curves.
Definition TerrainMask.cpp:313
Result< int > generateTerrainCurvatureMask(Heightmap &target, const Heightmap &input, const Heightmap &heights, const Heightmap &curve, const TerrainCurvatureSettings &s, TerrainMaskBlend mode)
Radially blur heights, derive source curvature, transform its curve and combine with an input mask.
Definition TerrainMask.cpp:147
Result< int > configureTerrainBrushWorld(TerrainBrushBlendSettings &target, const TerrainStampSettings &w, int contextWidth, int contextHeight, const TerrainSampleGrid &h)
Configure paint-context UV matrices from world sample centers and a rotated stamp footprint.
Definition TerrainMask.cpp:29
Result< int > blendTerrainBrush(Heightmap &target, const Heightmap &oldHeights, const Heightmap &newHeights, const Heightmap &brush, const TerrainBrushBlendSettings &s)
Blend an erosion scalar output with old heights through transformed brush UVs.
Definition TerrainMask.cpp:265
TerrainMaskBlend
Ordered scalar-mask arithmetic; intermediate values are not clamped.
Definition TerrainStamp.h:9
@ Subtract
@ Multiply
Result< int > smoothTerrainMask(Heightmap &target, const Heightmap &input, float verticality, float blurRadius)
Apply Pcg's two-pass Smooth ImageMask operation to a scalar mask.
Definition TerrainMask.cpp:12
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 > applyTerrainStrength(Heightmap &target, const Heightmap &source, const Heightmap &curve, TerrainStrengthMode mode, float strength, bool invert)
Apply the reference strength curve, inversion, mode and final interpolation.
Definition TerrainMask.cpp:239
Result< int > deriveTerrainSlope(Heightmap &target, const Heightmap &heights, float spacingX, float spacingZ, float heightScale)
Derive the shader's slope metric 1-normal.y from world-scaled height gradients.
Definition TerrainMask.cpp:327
Result< int > generateTerrainErosionMask(Heightmap &target, const Heightmap &oldHeights, const Heightmap &erosion, const Heightmap &brush, const TerrainBrushBlendSettings &spatial, const Heightmap &curve, TerrainStrengthMode mode, float strength, bool userInvert)
Compose spatial erosion-output blending and the source's inverted strength filter atomically.
Definition TerrainMask.cpp:192
Result< int > generateTerrainConcavityMask(Heightmap &target, const Heightmap &input, const Heightmap &heights, const Heightmap &curve, const TerrainConcavitySettings &s, TerrainMaskBlend mode)
Generate source normalized-gradient concavity with border attenuation and indexed curve lookup.
Definition TerrainMask.cpp:73
@ RoundedSquare
Result< int > growShrinkTerrainMask(Heightmap &target, const Heightmap &source, const Heightmap &curve, float distance)
Ordered radial Grow/Shrink followed by the reference strength curve.
Definition TerrainMask.cpp:203
Definition Container.h:602
Paint-context affine UV mappings, evaluated at destination pixel centers.
Definition TerrainMask.h:116
float heightOffsetZ
Definition TerrainMask.h:118
float heightOffsetX
Definition TerrainMask.h:118
Concavity source controls; featureSize is in height texels, concavity is signed.
Definition TerrainMask.h:11
Radial curvature controls; radius is UV distance, worldUnits scales signed height-minus-blur.
Definition TerrainMask.h:37
Value-only UV transform; distances are relative to the target raster, rotation in radians.
Definition TerrainMask.h:192
World X/Z positions of height sample centers, with positive spacing and dimensions.
Definition TerrainMask.h:125
Two-pass smoothing controls; radius in texels, verticality in [-1,1], strength in [0,...
Definition TerrainEffect.h:22
Value configuration for a rectangular stamp in world X/Z coordinates.
Definition TerrainStamp.h:22