载入中...
搜索中...
未找到
GtsTerrainLodPackage.cpp
浏览该文件的文档.
11Value::Array vec3(float x, float y, float z) { return {Value(double(x)), Value(double(y)), Value(double(z))}; }
22 if (plan.value().empty()) return Result<PreparedAssetImport>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS LOD set has no meshes", {}, {}, "asset.procgen.gts-lod"));
24 return Result<PreparedAssetImport>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS LOD asset count exceeds limit", {}, {}, "asset.procgen.gts-lod"));
31 return Result<PreparedAssetImport>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS LOD plan references a missing mesh", {}, {}, "asset.procgen.gts-lod"));
34 canonical.positions = mesh.positions(); canonical.normals = mesh.normals(); canonical.indices = mesh.indices();
43 if (blob.value().size() > limits.maximumDecodedBytes || totalBytes > limits.maximumDecodedBytes - blob.value().size())
44 return Result<PreparedAssetImport>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "GTS LOD package exceeds decoded byte limit", {}, {}, "asset.procgen.gts-lod"));
46 const auto id = package.packageId.child("gts-terrain:" + std::to_string(entry.tileIndex) + ":lod:" +
55 minX=std::min(minX,positions[i]); minY=std::min(minY,positions[i+1]); minZ=std::min(minZ,positions[i+2]);
56 maxX=std::max(maxX,positions[i]); maxY=std::max(maxY,positions[i+1]); maxZ=std::max(maxZ,positions[i+2]);
60 {"boundsMin",vec3(minX,minY,minZ)},{"coordinateSystem","right-handed-x-right-y-up-minus-z-forward"},
61 {"colors",mesh.hasVertexColors()},{"frontFace","counter-clockwise"},{"indexCount",int64_t(mesh.getIndexCount())},{"normals",true},
63 {"texcoordSets",std::move(uvSets)},{"unit","meter"},{"vertexCount",int64_t(mesh.getVertexCount())}});
71 const std::string key="tile-"+std::to_string(entry.tileIndex)+"-lod-"+std::to_string(entry.levelIndex);
73 if (!result.manifest.entrypoints.contains("default")) result.manifest.entrypoints.emplace("default",ref.value());
74 auto mapping=asset_import::detail::assetRef(id); if(!mapping) return Result<PreparedAssetImport>::failure(mapping.status());
79 auto report=asset_import::detail::finalizeImportReport(result,package,"Unity Pcg Pro GTS","4.2.2",
80 {{"terrainName",terrainName},{"tileCount",int64_t(lods.getTileCount())},{"lodCount",int64_t(lods.getLevelCount())}});
Canonical asset packaging for generated GTS terrain LODs.
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
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Id128 child(std::string_view role) const noexcept
Derives a deterministic child UUID for a hierarchical identity.
Definition Identity.h:192
Owned result of the GTS split-and-sequential-simplify pipeline.
Definition GtsTerrainLod.h:112
int getTileCount() const
Return the number of tiles, including empty source cells.
Definition GtsTerrainLod.h:119
const GtsTerrainLodTile * tileAt(int index) const
Return one tile or nullptr for an invalid index. @ownership The LOD set retains ownership; the caller...
Definition GtsTerrainLod.cpp:93
int getLevelCount() const
Return the common number of LOD levels per tile.
Definition GtsTerrainLod.h:121
EVENGINE_API_PLATFORM Result< void > finalizeImportReport(PreparedAssetImport &prepared, const ImportPackageIdentity &package, std::string_view sourceEngine, std::string_view sourceVersion, Value::Object options={})
Append the deterministic mandatory import report and bind it from provenance.
Definition ImportReport.cpp:21
Result< asset::EvaManifest > baseManifest(const ImportPackageIdentity &package, std::string_view importer)
Base manifest.
Definition ImportCommon.h:31
Result< asset_import::PreparedAssetImport > prepareGtsTerrainLodPackage(const asset_import::ImportPackageIdentity &package, const procgen::GtsTerrainLodSet &lods, const std::string &terrainName, const asset_import::AssetImportLimits &limits)
Prepare a complete .eva source package containing every non-empty GTS tile LOD as eve....
Definition GtsTerrainLodPackage.cpp:14
Result< std::vector< std::uint8_t > > buildEvaArchive(const EvaManifest &manifest, std::vector< EvaArchiveEntry > entries, const EvaArchiveLimits &limits)
Build a deterministic ZIP64 .eva, selecting raw Deflate only when smaller than Store.
Definition EvaArchive.cpp:408
EVENGINE_API_FOUNDATION Result< std::vector< std::uint8_t > > encodeCanonicalMesh(const CanonicalMeshData &mesh, const CanonicalMeshLimits &limits={})
Encode an owning snapshot to EVMESH v3, or v2 when no named attributes exist. Borrows input synchrono...
Definition CanonicalMeshEncode.cpp:9
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
Result< std::vector< GtsTerrainLodAssetEntry > > planGtsTerrainLodAssets(const GtsTerrainLodSet &lods, const std::string &terrainName, const std::string &meshFolder)
Build the deterministic object and mesh naming plan used by GTS terrain export.
Definition GtsTerrainLod.cpp:194
@ InvalidArgument
detail::StrongUint64< detail::SchemaVersionTag > SchemaVersion
Persistent data-format version; not a runtime replacement generation.
Definition SchemaVersion.h:13
Owning CPU mesh snapshot; UV arrays are packed ST pairs indexed by source set number....
Definition CanonicalMesh.h:18
std::vector< std::uint32_t > indices
Definition CanonicalMesh.h:23
std::map< std::uint32_t, std::vector< float > > texcoords
Definition CanonicalMesh.h:22
Allocation limits checked before decoding any vertex arrays. UV count is byte-budget bounded.
Definition CanonicalMesh.h:27
std::uint32_t maximumVertices
Definition CanonicalMesh.h:28
std::uint64_t maximumDecodedBytes
Definition CanonicalMesh.h:30
std::uint32_t maximumIndices
Definition CanonicalMesh.h:29
Parser and allocation budgets applied to untrusted importer inputs.
Definition AssetImporter.h:17
Common stable package metadata supplied by an import transaction.
Definition AssetImporter.h:33
PersistentId packageId
Definition AssetImporter.h:34