载入中...
搜索中...
未找到
GtsTerrainExportSettings.cpp
浏览该文件的文档.
103 if (!object || !exact(*object, {"aggressiveness", "enableSmartLink", "maxIterationCount", "preserveBorderEdges",
115 if (!aggressiveness || !distance || !iterations || !smart || !border || !curvature || !foldover || !seam)
171 if (!alpha || *alpha < 0 || *alpha > 1 || !mask || *mask < 0 || *mask > std::numeric_limits<std::uint32_t>::max() ||
172 !lighting || *lighting < 0 || *lighting > 1 || !shader || *shader < 0 || *shader > 1 || !mode || *mode < 0 ||
173 *mode > 2 || !edge || *edge < 0 || *edge > 1 || !resolution || *resolution < 0 || *resolution > 4 ||
174 !textureMethod || *textureMethod < 0 || *textureMethod > 1 || !textureResolution || *textureResolution < 32 ||
175 *textureResolution > 8192 || !smoothing || *smoothing < 0 || *smoothing > 128 || !transition || !quality ||
176 !prefix || prefix->size() > 256 || !vertexColors || !capture || !materials || !normals || !splats ||
200bool decodeWorkflow(const Value& encoded, GtsTerrainExportWorkflow& output, bool legacyV2 = false) {
224 exact(*object, {"action", "addMeshColliderToImpostor", "addObjectColliders", "addTerrainCollider",
232 auto *action = integer("action"), *resolution = integer("colliderResolution"), *type = integer("colliderType"),
238 auto * addImpostor = boolean("addMeshColliderToImpostor"), *addObjects = boolean("addObjectColliders"),
242 *copyImpostor = boolean("copyPcgObjectsToImpostor"), *colliderScenes = boolean("createColliderScenes"),
244 if (!action || *action < 0 || *action > 2 || !resolution || *resolution < 0 || *resolution > 4 || !type ||
245 *type < 0 || *type > 1 || !selection || *selection < 0 || *selection > 1 || !treatment || *treatment < 0 ||
246 *treatment > 3 || !face || *face < 0 || *face > 1 || !quality || !range || !std::isfinite(*quality) ||
247 *quality < 0 || *quality > 1 || !std::isfinite(*range) || *range < 0 || !addImpostor || !addObjects ||
276 if (!enumRange(int(saveResolution), 4) || !enumRange(int(normalEdgeMode), 1) || !enumRange(int(mode), 2) ||
284 screenRelativeTransitionHeight >= 1.0f || vertexColorSmoothing < 0 || vertexColorSmoothing > 128 ||
303 Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS impostor LOD index must be non-negative",
332 Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS low-poly LOD index must be non-negative",
337 value.saveResolution = level == 0 ? GtsTerrainSaveResolution::Eighth : GtsTerrainSaveResolution::Sixteenth;
349Result<GtsTerrainExportLodSettings> preset(int mode, int level, float quality, float transition) {
365Result<void> GtsTerrainExportSettings::appendSourcePreset(int mode, int level, float quality, float transitionHeight) {
380Result<void> GtsTerrainExportSettings::setSourceLods(std::vector<GtsTerrainExportLodSettings> levels) {
386Result<void> GtsTerrainExportSettings::configureWorkflow(const GtsTerrainExportWorkflow& workflow) {
399GtsTerrainExportWorkflow GtsTerrainExportSettings::getWorkflow() const noexcept { return workflow_; }
400Result<void> GtsTerrainExportSettings::setImpostorLods(std::vector<GtsTerrainExportLodSettings> levels) {
406int GtsTerrainExportSettings::getSourceLodCount() const noexcept { return int(sourceLods_.size()); }
407int GtsTerrainExportSettings::getImpostorLodCount() const noexcept { return int(impostorLods_.size()); }
408const GtsTerrainExportLodSettings* GtsTerrainExportSettings::sourceLodAt(int index) const noexcept {
411const GtsTerrainExportLodSettings* GtsTerrainExportSettings::impostorLodAt(int index) const noexcept {
414Result<std::vector<GtsTerrainLodLevelSettings>> GtsTerrainExportSettings::compileSourceLevels() const {
419 Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS source export requires at least one LOD",
453 if (!root || !root->contains("schema") || !root->contains("version") || !root->contains("sourceLods") ||
462 (*version >= 2 && !exact(*root, {"impostorLods", "schema", "sourceLods", "version", "workflow"})))
507Result<void> buildGtsTerrainExportLodsFromHeightmapInto(GtsTerrainLodSet& output, const Heightmap& heightmap,
518 auto built = buildGtsTerrainBaseMesh(base, heightmap, first->saveResolution, sizeX, sizeY, sizeZ);
525Result<void> buildGtsTerrainColliderMeshFromHeightmapInto(MeshBuild& output, const Heightmap& heightmap,
536 auto built = buildGtsTerrainBaseMesh(base, heightmap, workflow.colliderResolution, sizeX, sizeY, sizeZ);
545Result<std::string> encodeGtsTerrainObj(const Heightmap& heightmap, GtsTerrainSaveResolution resolution, float sizeX,
564 stream << "v " << (-v * sizeZ) << ' ' << (heightmap.height(x * stride, y * stride) * sizeY) << ' '
578 stream << "f " << a << '/' << a << ' ' << b << '/' << b << ' ' << d << '/' << d << "\nf " << b << '/'
581 stream << "f " << a << '/' << a << ' ' << b << '/' << b << ' ' << c << '/' << c << ' ' << d << '/' << d
587 DiagnosticCode::InvalidArgument, "GTS terrain OBJ exceeds size limit", "procgen.gtsTerrainExportSettings"));
591Result<std::string> encodeGtsMaskedTerrainObj(const Heightmap& heightmap, const Heightmap& maskmap,
595 if (!enumRange(int(faceMode), 1) || !std::isfinite(threshold) || threshold < 0.f || threshold > 1.f)
607 std::vector<int> vertexIndices(std::size_t(terrainResolution) * std::size_t(terrainResolution), -1);
638 const float z0 = float(z) / float(terrainResolution), z1 = float(z + stride) / float(terrainResolution);
640 const float x0 = float(x) / float(terrainResolution), x1 = float(x + stride) / float(terrainResolution);
658 for (const auto& vertex : vertices) stream << "v " << vertex.x << ' ' << vertex.y << ' ' << vertex.z << '\n';
681 if (!enumRange(int(edgeMode), 1) || smoothingIterations < 0 || smoothingIterations > 128 || source.empty() ||
689 if (!pixelSize || std::size_t(bakedTexture.getWidth()) * std::size_t(bakedTexture.getHeight()) >
750 candidate.addVertex(source.getPositionX(src), source.getPositionY(src), source.getPositionZ(src), 0, 0,
765 const auto a = candidate.indices()[std::size_t(i)], b = candidate.indices()[std::size_t(i + 1)],
767 const float abx = positions[b * 3] - positions[a * 3], aby = positions[b * 3 + 1] - positions[a * 3 + 1],
769 const float acx = positions[c * 3] - positions[a * 3], acy = positions[c * 3 + 1] - positions[a * 3 + 1],
790 candidate.setMeta("gts.vertexColors", edgeMode == GtsTerrainNormalEdgeMode::Sharp ? "sharp" : "smooth");
Owning, renderer-independent dynamic values.
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
const T & value() const &
Borrow the value from a const lvalue after checking success.
Definition Result.h:308
const Status & status() const noexcept
Inspect the structured operation status.
Definition Result.h:269
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Result< Value > fromJson(std::string_view json)
Parse one strict JSON value into an owning Value.
Definition Value.cpp:57
void getPixel(int x, int y, Colorf &c) const
Gets the pixel at location (x,y).
Definition ImageData.cpp:535
PixelGetFunction getPixelGetFunction() const
Definition ImageData.h:174
Schema-versioned source/impostor terrain export profile.
Definition GtsTerrainExportSettings.h:97
Result< void > appendSourcePreset(int mode, int level, float quality, float transitionHeight)
Append one source preset after validating the complete resulting sequence.
Definition GtsTerrainExportSettings.cpp:365
const GtsTerrainExportLodSettings * sourceLodAt(int index) const noexcept
Return an immutable source LOD record, or nullptr for an invalid index. @ownership The export setting...
Definition GtsTerrainExportSettings.cpp:408
Result< void > setImpostorLods(std::vector< GtsTerrainExportLodSettings > levels)
Replace impostor LOD records only after every record validates.
Definition GtsTerrainExportSettings.cpp:400
int getImpostorLodCount() const noexcept
Return the number of impostor LOD records.
Definition GtsTerrainExportSettings.cpp:407
Result< std::vector< GtsTerrainLodLevelSettings > > compileSourceLevels() const
Compile source records for the existing sequential LOD mesh builder.
Definition GtsTerrainExportSettings.cpp:414
GtsTerrainExportWorkflow getWorkflow() const noexcept
Return a value copy of the current validated workflow.
Definition GtsTerrainExportSettings.cpp:399
Result< void > configureWorkflow(const GtsTerrainExportWorkflow &workflow)
Atomically configure all top-level conversion and collider workflow controls.
Definition GtsTerrainExportSettings.cpp:386
Result< void > restoreJson(const std::string &json)
Atomically restore a strict version-1 terrain export profile.
Definition GtsTerrainExportSettings.cpp:445
const GtsTerrainExportLodSettings * impostorLodAt(int index) const noexcept
Return an immutable impostor LOD record, or nullptr for an invalid index. @ownership The export setti...
Definition GtsTerrainExportSettings.cpp:411
Result< std::string > snapshotJson() const
Serialize as strict eve.procgen.gts-terrain-export-settings version 1 JSON.
Definition GtsTerrainExportSettings.cpp:430
Result< void > setSourceLods(std::vector< GtsTerrainExportLodSettings > levels)
Replace source-terrain LOD records only after every record validates.
Definition GtsTerrainExportSettings.cpp:380
int getSourceLodCount() const noexcept
Return the number of source-terrain LOD records.
Definition GtsTerrainExportSettings.cpp:406
Result< void > appendImpostorPreset(int mode, int level, float quality, float transitionHeight)
Append one impostor preset after validating the complete resulting sequence.
Definition GtsTerrainExportSettings.cpp:372
Owned result of the GTS split-and-sequential-simplify pipeline.
Definition GtsTerrainLod.h:112
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
float sampleBilinear(float x, float y) const
Bilinear height at continuous coordinate within [0, w) x [0, h).
Definition Heightmap.cpp:37
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
void addVertex(float px, float py, float pz, float nx, float ny, float nz, float u, float v)
Adds vertex.
Definition MeshBuild.cpp:33
void setMeta(const std::string &key, const std::string &value)
Sets the meta.
Definition MeshBuild.cpp:244
int setActiveGroup(const std::string &name)
Select/create the named group assigned to subsequently added triangles.
Definition MeshBuild.cpp:53
eve::Result< void > setVertexColors(std::vector< float > colors)
Atomically replace the optional packed RGBA stream; empty removes it.
Definition MeshBuild.cpp:214
Definition EvpackPointGraphLoader.h:12
GtsTerrainSaveResolution
Pcg/GTS power-of-two sampling reduction used before terrain mesh export.
Definition GtsTerrainLod.h:18
GtsTerrainAlphaChannel
Optional channel placed in the exported texture alpha channel.
Definition GtsTerrainExportSettings.h:24
Result< GtsTerrainExportLodSettings > makeGtsTerrainLowPolyLod(int level)
Construct the exact GTS low-poly preset for a zero-based LOD index.
Definition GtsTerrainExportSettings.cpp:329
Result< void > buildGtsTerrainBaseMesh(MeshBuild &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ)
Build the local-space base mesh consumed by the GTS split and LOD pipeline.
Definition GtsTerrainLod.cpp:12
Result< int > simplifyGtsMesh(MeshBuild &output, const MeshBuild &source, float quality, const GtsMeshSimplificationOptions &o)
Simplify a mesh with deterministic quadric edge collapse.
Definition GtsMeshSimplifier.cpp:34
GtsTerrainExportShader
Native material family created for an exported terrain level.
Definition GtsTerrainExportSettings.h:26
@ VertexColor
GtsMeshPivot
Pivot translation applied independently to each GTS split mesh.
Definition GtsMeshSplitter.h:11
GtsTerrainConversionAction
Operation performed for the selected source terrain.
Definition GtsTerrainExportSettings.h:28
GtsTerrainColliderType
Collider representation requested by the export workflow.
Definition GtsTerrainExportSettings.h:34
GtsTerrainBakeLighting
Lighting state used while baking exported textures.
Definition GtsTerrainExportSettings.h:22
Result< void > buildGtsTerrainExportLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, const GtsTerrainExportSettings &settings, float sizeX, float sizeY, float sizeZ, int subTiles, GtsMeshPivot pivot)
Build source-terrain LODs using the first export record's SaveResolution and the complete sequential ...
Definition GtsTerrainExportSettings.cpp:507
GtsTerrainExportSelection
Source selection scope used by a terrain export.
Definition GtsTerrainExportSettings.h:32
GtsSourceTerrainTreatment
Treatment applied to a source terrain after a successful conversion commit.
Definition GtsTerrainExportSettings.h:30
GtsTerrainTextureExportMethod
Texture source used by a terrain export level.
Definition GtsTerrainExportSettings.h:20
@ OrthographicBake
@ BaseMapExport
GtsTerrainLodMode
Purpose assigned to one exported terrain LOD.
Definition GtsTerrainExportSettings.h:16
Result< void > buildGtsTerrainColliderMeshFromHeightmapInto(MeshBuild &output, const Heightmap &heightmap, const GtsTerrainExportWorkflow &workflow, float sizeX, float sizeY, float sizeZ)
Build the independently sampled and simplified MeshCollider geometry requested by a workflow.
Definition GtsTerrainExportSettings.cpp:525
Result< int > bakeGtsTerrainVertexColorsInto(MeshBuild &output, const MeshBuild &source, const image::ImageData &bakedTexture, GtsTerrainNormalEdgeMode edgeMode, int smoothingIterations, float terrainSizeX, float terrainSizeZ, bool linearize)
Apply Pcg low-poly edge processing and baked texture vertex colors atomically.
Definition GtsTerrainExportSettings.cpp:677
Result< std::string > encodeGtsMaskedTerrainObj(const Heightmap &heightmap, const Heightmap &maskmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, GtsTerrainObjFaceMode faceMode, float threshold, bool invert)
Encode Pcg's cell-classified masked terrain OBJ convention.
Definition GtsTerrainExportSettings.cpp:591
Result< std::string > encodeGtsTerrainObj(const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, GtsTerrainObjFaceMode faceMode)
Encode the original Pcg unmasked terrain OBJ coordinate, UV and face convention.
Definition GtsTerrainExportSettings.cpp:545
Result< GtsTerrainLodSet > buildGtsTerrainLods(const MeshBuild &source, int xSplits, int zSplits, GtsMeshPivot pivot, const std::vector< GtsTerrainLodLevelSettings > &levels)
Split a terrain mesh and generate each tile's sequential GTS LOD chain.
Definition GtsTerrainLod.cpp:250
GtsTerrainNormalEdgeMode
Edge-normal treatment requested for an exported terrain mesh.
Definition GtsTerrainExportSettings.h:18
Result< GtsTerrainExportLodSettings > makeGtsTerrainImpostorLod(int level)
Construct the exact GTS impostor preset for a zero-based LOD index.
Definition GtsTerrainExportSettings.cpp:300
GtsTerrainObjFaceMode
Polygon representation written by the Pcg terrain OBJ exporter.
Definition GtsTerrainExportSettings.h:36
@ InvalidArgument
glm::vec4 Color
Render-neutral RGBA color shared by graphics-facing modules.
Definition RenderTypes.h:8
int maxIterationCount
Definition GtsMeshSimplifier.h:10
double aggressiveness
Definition GtsMeshSimplifier.h:9
double vertexLinkDistance
Definition GtsMeshSimplifier.h:9
Complete native counterpart of one GTSExportTerrainLODSettings record.
Definition GtsTerrainExportSettings.h:63
float simplifyQuality
Definition GtsTerrainExportSettings.h:65
GtsTerrainSaveResolution saveResolution
Definition GtsTerrainExportSettings.h:64
GtsTerrainTextureExportMethod textureExportMethod
Definition GtsTerrainExportSettings.h:77
GtsMeshSimplificationOptions simplification
Definition GtsTerrainExportSettings.h:66
int textureExportResolution
Definition GtsTerrainExportSettings.h:79
Result< void > validate() const
Validate all persisted and executable values in this record.
Definition GtsTerrainExportSettings.cpp:275
GtsTerrainAlphaChannel alphaChannel
Definition GtsTerrainExportSettings.h:78
GtsTerrainNormalEdgeMode normalEdgeMode
Definition GtsTerrainExportSettings.h:67
Result< GtsTerrainLodLevelSettings > compileLevel() const
Convert this export record to the sequential mesh-LOD contract.
Definition GtsTerrainExportSettings.cpp:294
float screenRelativeTransitionHeight
Definition GtsTerrainExportSettings.h:83
GtsTerrainLodMode mode
Definition GtsTerrainExportSettings.h:68
GtsTerrainBakeLighting bakeLighting
Definition GtsTerrainExportSettings.h:80
GtsTerrainExportShader materialShader
Definition GtsTerrainExportSettings.h:73
std::string namePrefix
Definition GtsTerrainExportSettings.h:81
Validated execution plan compiled from top-level Pcg terrain export controls.
Definition GtsTerrainExportSettings.h:39
double impostorRange
Definition GtsTerrainExportSettings.h:59
GtsTerrainColliderType colliderType
Definition GtsTerrainExportSettings.h:45
GtsTerrainConversionAction action
Definition GtsTerrainExportSettings.h:40
GtsSourceTerrainTreatment sourceTreatment
Definition GtsTerrainExportSettings.h:41
GtsTerrainSaveResolution colliderResolution
Definition GtsTerrainExportSettings.h:52
GtsTerrainObjFaceMode objFaceMode
Definition GtsTerrainExportSettings.h:43
GtsTerrainExportSelection selection
Definition GtsTerrainExportSettings.h:42
bool addTerrainCollider
Definition GtsTerrainExportSettings.h:44
float colliderSimplifyQuality
Definition GtsTerrainExportSettings.h:53