载入中...
搜索中...
未找到
GtsTerrainLod.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
8
9#include <vector>
10#include <string>
11
12namespace eve::procgen {
13
14class GtsTerrainLodSet;
15class Heightmap;
16
19
30[[nodiscard]] EVENGINE_API_DOMAINS Result<void> buildGtsTerrainBaseMesh(MeshBuild& output, const Heightmap& heightmap,
31 GtsTerrainSaveResolution resolution,
32 float sizeX, float sizeY, float sizeZ);
33
40
43public:
45 [[nodiscard]] int getSaveResolution() const noexcept { return saveResolution_; }
47 [[nodiscard]] Result<void> setSaveResolution(int value);
49 [[nodiscard]] int getLodCount() const noexcept { return lodCount_; }
51 [[nodiscard]] Result<void> setLodCount(int value);
53 [[nodiscard]] int getSubTiles() const noexcept { return subTiles_; }
55 [[nodiscard]] Result<void> setSubTiles(int value);
57 [[nodiscard]] float getLodQuality(int index) const noexcept;
59 [[nodiscard]] Result<void> setLodQuality(int index,float percent);
61 [[nodiscard]] float getLodTransitionHeight(int index) const noexcept;
63 [[nodiscard]] Result<std::string> snapshotJson() const;
65 [[nodiscard]] Result<void> restoreJson(const std::string& json);
67 [[nodiscard]] Result<std::vector<GtsTerrainLodLevelSettings>> compileLevels() const;
68private:
69 int saveResolution_=0,lodCount_=4,subTiles_=3;
70 float lodQuality_[4]{100.f,50.f,25.f,12.5f};
71};
72
75 float offsetX = 0.0f;
76 float offsetZ = 0.0f;
77 std::vector<MeshBuild> levels;
78};
79
82 int tileIndex=0;
84 std::string objectName;
85 std::string meshName;
86 std::string relativePath;
87};
88
91public:
93 [[nodiscard]] int getEntryCount() const;
95 [[nodiscard]] int getTileIndex(int index)const;
97 [[nodiscard]] int getLevelIndex(int index)const;
99 [[nodiscard]] std::string getObjectName(int index)const;
101 [[nodiscard]] std::string getMeshName(int index)const;
103 [[nodiscard]] std::string getRelativePath(int index)const;
104private:
106 const GtsTerrainLodSet&, const std::string&,
107 const std::string&);
108 std::vector<GtsTerrainLodAssetEntry>entries_;
109};
110
113public:
115 [[nodiscard]] int getColumnCount() const { return columns_; }
117 [[nodiscard]] int getRowCount() const { return rows_; }
119 [[nodiscard]] int getTileCount() const { return static_cast<int>(tiles_.size()); }
121 [[nodiscard]] int getLevelCount() const { return static_cast<int>(settings_.size()); }
127 [[nodiscard]] const GtsTerrainLodTile* tileAt(int index) const;
133 [[nodiscard]] const GtsTerrainLodLevelSettings* levelAt(int index) const;
139 [[nodiscard]] int selectLevel(float relativeHeight) const;
147 [[nodiscard]] float getLevelSwitchDistance(int level, float worldDiameter, float verticalFovDegrees) const;
152 [[nodiscard]] int selectLevelForCamera(float distance, float worldDiameter, float verticalFovDegrees) const;
154 [[nodiscard]] Result<std::string> snapshotJson() const;
156 [[nodiscard]] Result<void> restoreJson(const std::string& json);
157
158private:
160 const MeshBuild&, int, int, GtsMeshPivot, const std::vector<GtsTerrainLodLevelSettings>&);
161 int columns_ = 0;
162 int rows_ = 0;
163 std::vector<GtsTerrainLodLevelSettings> settings_;
164 std::vector<GtsTerrainLodTile> tiles_;
165};
166
177 const MeshBuild& source, int xSplits, int zSplits, GtsMeshPivot pivot,
178 const std::vector<GtsTerrainLodLevelSettings>& levels);
179
184[[nodiscard]] Result<GtsTerrainLodSet> buildGtsTerrainLodsFromHeightmap(const Heightmap& heightmap,
185 GtsTerrainSaveResolution resolution,float sizeX,float sizeY,float sizeZ,int subTileSplits,
186 GtsMeshPivot pivot,const std::vector<GtsTerrainLodLevelSettings>& levels);
187
190 GtsTerrainLodSet& output, const Heightmap& heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY,
191 float sizeZ, int subTileSplits, GtsMeshPivot pivot = GtsMeshPivot::None);
192
195 GtsTerrainLodSet& output, const Heightmap& heightmap, const GtsTerrainMeshSettings& settings, float sizeX,
196 float sizeY, float sizeZ, GtsMeshPivot pivot = GtsMeshPivot::None);
197
199[[nodiscard]] EVENGINE_API_DOMAINS std::vector<GtsTerrainLodLevelSettings> defaultGtsTerrainLodLevels();
200
209 const GtsTerrainLodSet& lods, const std::string& terrainName, const std::string& meshFolder = "Meshes");
211[[nodiscard]] EVENGINE_API_DOMAINS Result<void> planGtsTerrainLodAssetsInto(GtsTerrainLodAssetPlan& output,
212 const GtsTerrainLodSet& lods,
213 const std::string& terrainName,
214 const std::string& meshFolder = "Meshes");
215}
double value
std::string output
#define EVENGINE_API_DOMAINS
Definition Export.h:110
float distance
int level
Move-only, checked operation results for the common layer.
TerrainThermalSettings settings
uint32_t index
const UnitySourceAsset & source
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Owned script-friendly GTS terrain LOD export manifest.
Owned result of the GTS split-and-sequential-simplify pipeline.
int getRowCount() const
Return the number of tile rows.
int getTileCount() const
Return the number of tiles, including empty source cells.
int getColumnCount() const
Return the number of tile columns.
int getLevelCount() const
Return the common number of LOD levels per tile.
Schema-versioned native counterpart of GTSMeshSettings.
int getSubTiles() const noexcept
Return the equal X/Z split-plane count in the range 0 through 5.
int getLodCount() const noexcept
Return the active LOD count in the Pcg editor range 1 through 4.
int getSaveResolution() const noexcept
Return the SaveResolution enum value in the range 0 through 4.
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
Result< void > buildDefaultGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, int subTileSplits, GtsMeshPivot pivot)
Atomically replace output with the complete default four-level GTS terrain conversion.
GtsTerrainSaveResolution
Pcg/GTS power-of-two sampling reduction used before terrain mesh export.
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.
GtsMeshPivot
Pivot translation applied independently to each GTS split mesh.
Result< GtsTerrainLodSet > buildGtsTerrainLodsFromHeightmap(const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, int subTileSplits, GtsMeshPivot pivot, const std::vector< GtsTerrainLodLevelSettings > &levels)
Execute the complete GTS heightmap-to-split-LOD conversion as one atomic operation.
Result< void > planGtsTerrainLodAssetsInto(GtsTerrainLodAssetPlan &output, const GtsTerrainLodSet &lods, const std::string &name, const std::string &folder)
Atomically replace a script-friendly export plan.
Result< void > buildGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, const GtsTerrainMeshSettings &settings, float sizeX, float sizeY, float sizeZ, GtsMeshPivot pivot)
Atomically build a complete heightmap conversion using persisted GTS mesh settings.
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.
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.
std::vector< GtsTerrainLodLevelSettings > defaultGtsTerrainLodLevels()
Return the four-level quality and transition profile used by GTSMeshSettings.
GTS mesh simplification controls supported by MeshBuild streams.
Deterministic native export identity for one GTS tile LOD mesh.
Configuration for one sequential GTS terrain mesh LOD.
GtsMeshSimplificationOptions simplification
One split terrain tile and all of its local-space LOD meshes.
std::vector< MeshBuild > levels