载入中...
搜索中...
未找到
TerrainVegetationRuntime.cpp
浏览该文件的文档.
46 while (end < result.instances.size() && result.instances[end].prototype == result.instances[first].prototype)
86 Diagnostic::error(DiagnosticCode::NotFound, "terrain has no PCG or baked vegetation provider", {}, {},
88 if (limits.maximumGeneratedInstances == 0 || limits.maximumTotalInstances == 0 || limits.maximumGraphNodes == 0)
90 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain vegetation limits must be non-zero", {}, {},
97 Diagnostic::error(DiagnosticCode::InvalidArgument, "loaded terrain PCG graph is incomplete", {}, {},
100 std::min<std::uint32_t>(limits.maximumGraphNodes, std::uint32_t(std::numeric_limits<int>::max()))));
102 std::min<std::uint32_t>(limits.maximumGeneratedInstances, std::uint32_t(std::numeric_limits<int>::max()))));
109 Diagnostic::error(DiagnosticCode::InvalidArgument, "generated terrain vegetation exceeds budget", {},
112 result.instances.reserve(result.generatedCount + (explicitInstances ? explicitInstances->instances.size() : 0));
117 instance.prototype = points.value().getStringAttribute(static_cast<int>(index), "prototype", {});
141 if (std::uint64_t(result.instances.size()) + explicitInstances->instances.size() > limits.maximumTotalInstances)
143 Diagnostic::error(DiagnosticCode::InvalidArgument, "total terrain vegetation exceeds budget", {}, {},
163 Diagnostic::error(DiagnosticCode::InvalidArgument, "total terrain vegetation exceeds budget", {}, {},
173 if (!std::isfinite(domain.minimumX) || !std::isfinite(domain.minimumZ) || !std::isfinite(domain.maximumX) ||
174 !std::isfinite(domain.maximumZ) || domain.maximumX <= domain.minimumX || domain.maximumZ <= domain.minimumZ)
176 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain vegetation weight domain is invalid", {}, {},
180 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain material control groups are incomplete", {}, {},
184 if (material.layers[index].name.empty() || !layerIndices.emplace(material.layers[index].name, index).second)
186 Diagnostic::error(DiagnosticCode::Conflict, "terrain layer names must be non-empty and unique", {}, {},
192 if (group.firstLayer != index * 4 || group.layerCount != expected || group.control.width == 0 ||
212 Diagnostic::error(DiagnosticCode::NotFound, "vegetation rule references an unknown terrain layer",
226 Diagnostic::error(DiagnosticCode::Conflict, "terrain layer filtering culled non-procedural instances", {},
Runtime canonical terrain-layer semantics.
CPU assembly of grouped terrain material atlases.
Runtime realization of terrain vegetation assets.
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
Result< TerrainVegetationRealization > realizeTerrainVegetation(LoadedPointGraph *graph, const LoadedInstanceSet *explicitInstances, const TerrainVegetationLimits &limits)
Execute an optional terrain PCG graph and merge an optional baked instance set.
Definition TerrainVegetationRuntime.cpp:81
Result< TerrainVegetationRealization > filterTerrainVegetationByLayerWeights(const TerrainVegetationRealization &realization, const LoadedTerrainMaterial &material, const TerrainMaterialAtlases &atlases, const TerrainVegetationWeightDomain &domain)
Apply terrain RGBA layer weights to procedural instances using stable stochastic thinning.
Definition TerrainVegetationRuntime.cpp:170
std::uint64_t derivePointId(std::uint64_t namespaceId, std::uint64_t ordinal)
Deterministically derive a non-zero stable point identity.
Definition PointSet.cpp:469
@ InvalidArgument
@ NotFound
@ ParseError
@ Conflict
Definition Container.h:602
Owning exact static-instance set selected for one runtime variant.
Definition EvpackInstanceSetLoader.h:49
float wavingGrassSpeed
Definition EvpackInstanceSetLoader.h:52
std::vector< RuntimeInstance > instances
Definition EvpackInstanceSetLoader.h:56
std::array< float, 4 > wavingGrassTint
Definition EvpackInstanceSetLoader.h:54
float wavingGrassStrength
Definition EvpackInstanceSetLoader.h:53
float wavingGrassAmount
Definition EvpackInstanceSetLoader.h:51
std::vector< RuntimeInstancePrototype > prototypes
Definition EvpackInstanceSetLoader.h:55
Owning executable graph and its selected output node.
Definition EvpackPointGraphLoader.h:20
Owning capability-selected terrain material candidate.
Definition EvpackTerrainMaterialLoader.h:44
Complete terrain material image set; up to four groups cover sixteen layers.
Definition TerrainMaterialAtlas.h:28
std::vector< TerrainMaterialAtlasGroup > groups
Definition TerrainMaterialAtlas.h:29
One stable terrain vegetation transform and its source attributes.
Definition TerrainVegetationRuntime.h:26
std::array< float, 3 > position
Definition TerrainVegetationRuntime.h:30
std::array< float, 3 > scale
Definition TerrainVegetationRuntime.h:32
std::uint64_t id
Definition TerrainVegetationRuntime.h:27
std::array< float, 3 > normal
Definition TerrainVegetationRuntime.h:33
std::uint32_t seed
Definition TerrainVegetationRuntime.h:34
std::array< float, 4 > rotation
Definition TerrainVegetationRuntime.h:31
std::string prototype
Definition TerrainVegetationRuntime.h:28
std::string layer
Definition TerrainVegetationRuntime.h:29
Hard limits for one deterministic terrain vegetation realization.
Definition TerrainVegetationRuntime.h:19
Owning, prototype-sorted result plus scalability evidence.
Definition TerrainVegetationRuntime.h:45
float wavingGrassAmount
Definition TerrainVegetationRuntime.h:46
std::uint32_t weightCulledCount
Definition TerrainVegetationRuntime.h:55
std::vector< RuntimeInstancePrototype > prototypes
Definition TerrainVegetationRuntime.h:50
std::vector< TerrainVegetationInstance > instances
Definition TerrainVegetationRuntime.h:51
float wavingGrassSpeed
Definition TerrainVegetationRuntime.h:47
std::uint32_t explicitCount
Definition TerrainVegetationRuntime.h:54
double graphMilliseconds
Definition TerrainVegetationRuntime.h:57
std::uint32_t graphNodesEvaluated
Definition TerrainVegetationRuntime.h:56
std::uint32_t generatedCount
Definition TerrainVegetationRuntime.h:53
float wavingGrassStrength
Definition TerrainVegetationRuntime.h:48
std::array< float, 4 > wavingGrassTint
Definition TerrainVegetationRuntime.h:49
Explicit world-to-control-map projection for terrain layer filtering.
Definition TerrainVegetationRuntime.h:61
float maximumX
Definition TerrainVegetationRuntime.h:64
float minimumX
Definition TerrainVegetationRuntime.h:62
float minimumZ
Definition TerrainVegetationRuntime.h:63
float maximumZ
Definition TerrainVegetationRuntime.h:65
bool flipV
Reverse V for source maps whose rows oppose the canonical terrain Z axis.
Definition TerrainVegetationRuntime.h:67