载入中...
搜索中...
未找到
CaveMeshRecipe.cpp
浏览该文件的文档.
2
5
6#include <utility>
7
8namespace eve::procgen {
9
11 RecipeDescriptor cave{"mesh.cave", "Limestone Cave", "Mesh", {}};
12 cave.params.push_back(ParamDescriptor::integer("seed", "Seed", 1, 0, 2147483647));
13 cave.params.push_back(ParamDescriptor::choice("style", "Cave Style", "mixed",
14 {"cavern", "tunnels", "vertical", "labyrinth", "mixed"}));
15 cave.params.push_back(
16 ParamDescriptor::choice("genesis", "Cave Genesis", "epigene", {"epigene", "hypogene", "mixed"}));
17 cave.params.push_back(ParamDescriptor::integer("resolution", "Resolution", 40, 12, 128));
18 cave.params.push_back(ParamDescriptor::floating("width", "World Width", 30.f, 1.f, 1000.f, 0.5f));
19 cave.params.push_back(ParamDescriptor::floating("height", "World Height", 12.f, 1.f, 1000.f, 0.5f));
20 cave.params.push_back(ParamDescriptor::floating("depth", "World Depth", 24.f, 1.f, 1000.f, 0.5f));
21 cave.params.push_back(ParamDescriptor::integer("chambers", "Chambers", 7, 1, 64));
22 cave.params.push_back(ParamDescriptor::integer("branches", "Branches", 4, 0, 32));
23 cave.params.push_back(ParamDescriptor::floating("tunnelRadius", "Tunnel Radius", 0.16f, 0.04f, 0.4f, 0.01f));
24 cave.params.push_back(ParamDescriptor::floating("chamberScale", "Chamber Scale", 1.f, 0.35f, 2.5f, 0.05f));
25 cave.params.push_back(
26 ParamDescriptor::floating("chamberHierarchy", "Chamber Size Hierarchy", 0.f, 0.f, 1.f, 0.01f));
27 cave.params.push_back(
28 ParamDescriptor::floating("passageVariation", "Passage Scale Variation", 0.f, 0.f, 1.f, 0.01f));
29 cave.params.push_back(
30 ParamDescriptor::floating("chamberIrregularity", "Chamber Low-frequency Relief", 0.f, 0.f, 1.f, 0.01f));
31 cave.params.push_back(ParamDescriptor::floating("roughness", "Wall Roughness", 0.12f, 0.f, 0.45f, 0.01f));
32 cave.params.push_back(
33 ParamDescriptor::floating("multiscaleRoughness", "Multi-scale Wall Relief", 0.f, 0.f, 1.f, 0.01f));
34 cave.params.push_back(ParamDescriptor::floating("erosion", "Karst Erosion", 0.55f, 0.f, 1.f, 0.01f));
35 cave.params.push_back(ParamDescriptor::floating("bedding", "Bedding Dissolution", 0.6f, 0.f, 1.f, 0.01f));
36 cave.params.push_back(
37 ParamDescriptor::floating("fractureDissolution", "Joint Dissolution", 0.55f, 0.f, 1.f, 0.01f));
38 cave.params.push_back(ParamDescriptor::floating("vadoseIncision", "Stream Incision", 0.35f, 0.f, 1.f, 0.01f));
39 cave.params.push_back(
40 ParamDescriptor::floating("waterTableCorrosion", "Water-table Corrosion", 0.f, 0.f, 1.f, 0.01f));
41 cave.params.push_back(ParamDescriptor::floating("scallopErosion", "Flow Scallops", 0.45f, 0.f, 1.f, 0.01f));
42 cave.params.push_back(ParamDescriptor::floating("scallopScale", "Scallop Scale", 0.12f, 0.04f, 0.32f, 0.01f));
43 cave.params.push_back(
44 ParamDescriptor::floating("scallopHydraulicScaling", "Flow-scaled Scallops", 0.f, 0.f, 1.f, 0.01f));
45 cave.params.push_back(
46 ParamDescriptor::floating("scallopScaleVariability", "Scallop Scale Variability", 0.f, 0.f, 1.f, 0.01f));
47 cave.params.push_back(
48 ParamDescriptor::floating("scallopFlowSeparation", "Scallop Flow Separation", 0.f, 0.f, 1.f, 0.01f));
49 cave.params.push_back(
50 ParamDescriptor::floating("scallopFlowHistory", "Multi-stage Scallop Overprint", 0.f, 0.f, 1.f, 0.01f));
51 cave.params.push_back(ParamDescriptor::floating("hydraulicErosion", "Hydraulic Erosion", 0.f, 0.f, 1.f, 0.01f));
52 cave.params.push_back(
53 ParamDescriptor::floating("mixingCorrosion", "Confluence Mixing Corrosion", 0.f, 0.f, 1.f, 0.01f));
54 cave.params.push_back(
55 ParamDescriptor::floating("lithologicHeterogeneity", "Lithologic Selective Erosion", 0.f, 0.f, 1.f, 0.01f));
56 cave.params.push_back(
57 ParamDescriptor::floating("floodAbrasion", "Sediment-laden Flood Abrasion", 0.f, 0.f, 1.f, 0.01f));
58 cave.params.push_back(
59 ParamDescriptor::floating("floodPlucking", "Fracture-controlled Flood Plucking", 0.f, 0.f, 1.f, 0.01f));
60 cave.params.push_back(
61 ParamDescriptor::floating("constrictionScour", "Constriction Pool Scour", 0.f, 0.f, 1.f, 0.01f));
62 cave.params.push_back(ParamDescriptor::floating("knickpointErosion", "Knickpoint Erosion", 0.f, 0.f, 1.f, 0.01f));
63 cave.params.push_back(ParamDescriptor::floating("streamBedKarren", "Stream-bed Karren", 0.f, 0.f, 1.f, 0.01f));
64 cave.params.push_back(ParamDescriptor::floating("eddyPotholes", "Eddy Potholes", 0.f, 0.f, 1.f, 0.01f));
65 cave.params.push_back(ParamDescriptor::floating("potholeGravelSize", "Pothole Gravel Size", 0.5f, 0.f, 1.f, 0.01f));
66 cave.params.push_back(ParamDescriptor::floating("breakdownScour", "Breakdown-block Scour", 0.f, 0.f, 1.f, 0.01f));
67 cave.params.push_back(ParamDescriptor::integer("dripstones", "Dripstone Pairs", 12, 0, 64));
68 cave.params.push_back(ParamDescriptor::floating("dripstoneScale", "Dripstone Scale", 0.7f, 0.25f, 1.5f, 0.05f));
69 cave.params.push_back(ParamDescriptor::choice("stalagmiteShape", "Stalagmite Shape", "mixed",
70 {"conical", "columnar", "flatTop", "mixed"}));
71 cave.params.push_back(ParamDescriptor::floating("normalSmoothing", "Normal Smoothing", 0.78f, 0.f, 1.f, 0.01f));
72 cave.params.push_back(ParamDescriptor::integer("flowstones", "Flowstone Patches", 7, 0, 32));
73 cave.params.push_back(ParamDescriptor::integer("curtains", "Cave Curtains", 5, 0, 32));
74 cave.params.push_back(ParamDescriptor::floating("flowstoneScale", "Flowstone Scale", 0.75f, 0.25f, 1.5f, 0.05f));
75 cave.params.push_back(ParamDescriptor::integer("surfaceRefinement", "Surface Refinement", 0, 0, 2));
76 cave.params.push_back(
77 ParamDescriptor::floating("refinementThreshold", "Refinement Error", 0.0015f, 0.0001f, 0.02f, 0.0001f));
78 auto advanced = [&cave](ParamDescriptor param) {
79 param.advanced = true;
80 cave.params.push_back(std::move(param));
81 };
82 advanced(ParamDescriptor::integer("nx", "X Resolution", 40, 8, 128));
83 advanced(ParamDescriptor::integer("ny", "Y Resolution", 24, 8, 128));
84 advanced(ParamDescriptor::integer("nz", "Z Resolution", 40, 8, 128));
85 advanced(ParamDescriptor::integer("fractureCount", "Joint Planes", 5, 0, 24));
86 advanced(ParamDescriptor::floating("waterTableLevel", "Highest Water-table Level", 0.18f, -0.8f, 0.8f, 0.01f));
87 advanced(ParamDescriptor::integer("waterTableStages", "Water-table Stages", 1, 1, 4));
88 advanced(ParamDescriptor::floating("waterTableDrop", "Water-table Stage Drop", 0.18f, 0.05f, 0.5f, 0.01f));
89 advanced(ParamDescriptor::floating("waterTableFluctuation", "Water-table Fluctuation", 0.35f, 0.f, 1.f, 0.01f));
90 advanced(
91 ParamDescriptor::floating("fractureApertureVariability", "Joint Aperture Variability", 0.f, 0.f, 1.f, 0.01f));
92 advanced(
93 ParamDescriptor::floating("fractureStressControl", "Stress-controlled Joint Branching", 0.f, 0.f, 1.f, 0.01f));
94 advanced(
95 ParamDescriptor::floating("fractureFlowFeedback", "Aperture-flow Joint Channelization", 0.f, 0.f, 1.f, 0.01f));
96 advanced(ParamDescriptor::floating("hydraulicGradient", "Hydraulic Gradient", 0.35f, 0.01f, 2.f, 0.01f));
97 advanced(ParamDescriptor::floating("recharge", "Recharge", 0.65f, 0.f, 1.f, 0.01f));
98 advanced(ParamDescriptor::floating("flowFocusing", "Flow Focusing", 0.7f, 0.f, 1.f, 0.01f));
99 advanced(ParamDescriptor::floating("damkohler", "Effective Damkohler", 0.002f, 0.00005f, 0.05f, 0.00005f));
100 advanced(ParamDescriptor::floating("transportG", "Transverse Transport G", 1.f, 0.1f, 5.f, 0.1f));
101 advanced(ParamDescriptor::floating("sedimentLoad", "Flood Sediment Load", 0.55f, 0.f, 1.f, 0.01f));
102 advanced(ParamDescriptor::floating("pluckingBlockScale", "Plucked Block Scale", 0.1f, 0.04f, 0.2f, 0.01f));
103 advanced(ParamDescriptor::floating("microstructure", "Rock Microstructure", 0.f, 0.f, 1.f, 0.01f));
104 advanced(ParamDescriptor::floating("roughnessFlowCoupling", "Rough-wall Mass Transfer", 0.f, 0.f, 1.f, 0.01f));
105 advanced(ParamDescriptor::floating("surfaceSlopeReactivity", "Geometry-controlled Surface Reactivity", 0.f, 0.f,
106 1.f, 0.01f));
107 advanced(ParamDescriptor::floating("reactivePatchiness", "Correlated Reactive Patches", 0.f, 0.f, 1.f, 0.01f));
108 advanced(ParamDescriptor::floating("condensationCorrosion", "Condensation Corrosion", 0.f, 0.f, 1.f, 0.01f));
109 advanced(ParamDescriptor::floating("biogenicCorrosion", "Biogenic Corrosion", 0.f, 0.f, 1.f, 0.01f));
110 advanced(ParamDescriptor::floating("mineralArmoring", "Secondary-mineral Armoring", 0.f, 0.f, 1.f, 0.01f));
111 advanced(ParamDescriptor::floating("condensationFaceting", "Condensation Faceting", 0.f, 0.f, 1.f, 0.01f));
112 advanced(ParamDescriptor::floating("differentialVeinErosion", "Differential Vein Erosion", 0.f, 0.f, 1.f, 0.01f));
113 advanced(ParamDescriptor::floating("breakdown", "Breakdown", 0.f, 0.f, 1.f, 0.01f));
114 advanced(ParamDescriptor::integer("breakdownEvents", "Breakdown Events", 4, 0, 16));
115 advanced(ParamDescriptor::floating("sedimentDeposition", "Sediment Deposition", 0.f, 0.f, 1.f, 0.01f));
116 advanced(ParamDescriptor::floating("paragenesis", "Sediment-driven Paragenesis", 0.f, 0.f, 1.f, 0.01f));
117 advanced(ParamDescriptor::integer("sedimentBars", "Sediment Bars", 4, 0, 16));
118 advanced(ParamDescriptor::floating("microporosityAccess", "Accessible Microporosity", 0.55f, 0.f, 1.f, 0.01f));
119 advanced(ParamDescriptor::floating("permeabilityContrast", "Permeability Contrast", 0.65f, 0.f, 1.f, 0.01f));
120 advanced(ParamDescriptor::integer("cupolas", "Ceiling Cupolas", 6, 0, 32));
121 advanced(ParamDescriptor::integer("feeders", "Rising Feeders", 4, 0, 24));
122 registry.registerRecipe(std::move(cave), caveMeshGenerator());
123}
124
125} // namespace eve::procgen
EVENGINE_API_DOMAINS public API.
void registerRecipe(const std::string &id, MeshRecipeFn fn)
Register a recipe without metadata.
MeshRecipeFn caveMeshGenerator()
Cave mesh generator.
void registerCaveMeshRecipe(MeshRecipeRegistry &registry)
Register the deterministic three-dimensional limestone cave recipe.
UI-independent metadata for one procedural recipe parameter.
Definition ParamSchema.h:14
static ParamDescriptor choice(std::string key, std::string label, std::string defaultValue, std::vector< std::string > choices)
Construct a finite-choice string descriptor.
static ParamDescriptor floating(std::string key, std::string label, float defaultValue, float minimum, float maximum, float step)
Construct a bounded floating-point descriptor.
static ParamDescriptor integer(std::string key, std::string label, int defaultValue, int minimum, int maximum, int step=1)
Construct a bounded integer descriptor.
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52
std::vector< ParamDescriptor > params
Definition ParamSchema.h:56