From ca85e876ad582fa1a91c15c1d8586674135396ae Mon Sep 17 00:00:00 2001 From: Fr0zka Date: Sat, 24 Oct 2026 18:25:03 +0200 Subject: [PATCH] feat(core): ore vein records and a materialAt query, off by default (L50); research R18, R19 Versioned capsule vein records (stable ID, resource ID, endpoints, radius, seeded irregularity) resolved into the snapshot only when requested, placed beside the route and away from passages, landings and landmarks (forced-passage control rejected). The bound field table gains materialAt (host + two resource IDs + Q16 weights) behind a per-tile BVH; mesh export v2 carries per-vertex materials; a measurement-only yield computes removed resource volume (0 on already-air space). With veins on, every density, mesh, payload and topology hash is unchanged; demo off: owner hashes identical to L47. fast/medium/full PASS. Research R18 (cavern-graph planner) and R19 (why FloatingIslands costs ~10x SurfaceWorld). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1 --- .../include/VoxelForgeCore/VoxelForgeCore.h | 85 +++- Standalone/Core/src/ResolvedLayoutInternal.h | 429 ++++++++++++++++++ Standalone/Core/src/ShapeWorldInternal.h | 297 ++++++++++++ Standalone/Core/src/VoxelForgeCore.cpp | 105 ++++- .../WorldAssemblerM3/Linux50/REPORT.md | 51 +++ .../Linux50/captures/tunnel-approach-wide.png | Bin 0 -> 195833 bytes .../Linux50/captures/tunnel-quartz-eye.png | Bin 0 -> 128419 bytes .../WorldAssemblerM3/Research18/REPORT.md | 49 ++ .../WorldAssemblerM3/Research19/REPORT.md | 77 ++++ Standalone/Source/LinuxOffscreenCapture.cpp | 50 +- Standalone/Source/StreamBenchmarkHeadless.cpp | 181 +++++++- Standalone/Source/StreamBenchmarkPipeline.h | 105 ++++- Standalone/Source/StreamingWorld.h | 7 +- Standalone/Source/WorldMesher.h | 11 +- Standalone/Tools/verify/verify.py | 145 +++++- 15 files changed, 1573 insertions(+), 19 deletions(-) create mode 100644 Standalone/Research/WorldAssemblerM3/Linux50/REPORT.md create mode 100644 Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-approach-wide.png create mode 100644 Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-quartz-eye.png create mode 100644 Standalone/Research/WorldAssemblerM3/Research18/REPORT.md create mode 100644 Standalone/Research/WorldAssemblerM3/Research19/REPORT.md diff --git a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h index ad4171b..d1f9f51 100644 --- a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h +++ b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h @@ -81,6 +81,9 @@ namespace VoxelForgeCore Vec3d normal; Vec2f uv; ColorRgba8 color; + std::uint16_t hostMaterialId = 1; + std::array resourceMaterialIds{}; + std::array resourceWeightsQ16{}; }; struct MeshGroups @@ -163,6 +166,10 @@ namespace VoxelForgeCore double capRefinementExclusiveMilliseconds = 0.0; double meshAssemblyMilliseconds = 0.0; double meshingMilliseconds = 0.0; + double materialQueryMilliseconds = 0.0; + std::uint64_t materialQueries = 0; + std::uint64_t materialCandidateChecks = 0; + bool materialTileOutsideEveryVein = true; double featureListMilliseconds = 0.0; double farShellMilliseconds = 0.0; double farStratumShellMilliseconds = 0.0; @@ -216,7 +223,9 @@ namespace VoxelForgeCore std::uint64_t densitySampleCount = 0; std::uint64_t meshPayloadAllocatedBytes = 0; std::uint64_t densityHash = 0, meshHash = 0, payloadHash = 0, topologyHash = 0; - bool hasDensityHash = false, hasMeshHash = false, hasPayloadHash = false, hasTopologyHash = false; + std::uint64_t materialHash = 0; + bool hasDensityHash = false, hasMeshHash = false, hasPayloadHash = false, + hasTopologyHash = false, hasMaterialHash = false; }; struct WorldConfiguration @@ -708,6 +717,7 @@ namespace VoxelForgeCore inline constexpr std::uint32_t ResolvedLayoutStampVocabularyVersionV1 = 1; inline constexpr std::uint32_t ResolvedLayoutStampVocabularyVersionV2 = 2; inline constexpr std::uint32_t ResolvedLayoutCavernGraphVocabularyVersionV1 = 1; + inline constexpr std::uint32_t ResolvedLayoutOreVeinVocabularyVersionV1 = 1; enum class ResolvedLayoutValidationModeV3 : std::uint8_t { compatibility, strict }; // Stable, bounded geometry edits composed into every Core field after the shared @@ -787,6 +797,36 @@ namespace VoxelForgeCore std::array boundsMaximumMicrometres{}; }; + // Immutable material-only deposits. The capsule and its conservative bounds are in + // micrometres; bounds include irregularity and the blend envelope. + struct ResolvedLayoutOreVeinRequestV1 + { + std::string stableId; + std::int32_t strateIndex = -1; + std::uint16_t resourceMaterialId = 0; + std::array, 2> anchorEndpointsMicrometres{}; + std::int64_t placementRadiusMicrometres = 0; + std::int64_t radiusMicrometres = 0; + std::int64_t irregularityAmplitudeMicrometres = 0; + std::int64_t irregularityWavelengthMicrometres = 0; + std::int64_t blendWidthMicrometres = 0; + }; + + struct ResolvedLayoutOreVeinV1 + { + std::string stableId; + std::int32_t strateIndex = -1; + std::uint16_t resourceMaterialId = 0; + std::array, 2> endpointsMicrometres{}; + std::array boundsMinimumMicrometres{}; + std::array boundsMaximumMicrometres{}; + std::int64_t radiusMicrometres = 0; + std::int64_t irregularityAmplitudeMicrometres = 0; + std::int64_t irregularityWavelengthMicrometres = 0; + std::int64_t blendWidthMicrometres = 0; + std::uint64_t irregularitySeed = 0; + }; + struct ResolvedLayoutAnchorV2 { std::string kind; @@ -959,6 +999,9 @@ namespace VoxelForgeCore std::uint32_t cavernGraphVocabularyVersion = 0; std::vector cavernRooms; std::vector cavernEdges; + // Omitted from canonical identity when no records are present. + std::uint32_t oreVeinVocabularyVersion = 0; + std::vector oreVeins; std::string stableIdentity; bool finalize(std::string& error); @@ -1016,6 +1059,40 @@ namespace VoxelForgeCore std::span rooms, std::span edges, std::string& error); + VFCORE_API bool ResolveResolvedLayoutOreVeinsV1( + ResolvedLayoutSnapshotV3& layout, std::int32_t seed, + std::span requests, + std::string& error); + + struct ResolvedLayoutOreVeinPlacementAuditV1 + { + std::uint32_t negativeControlsRun = 0; + std::uint32_t negativeControlsRejected = 0; + bool passed = false; + }; + VFCORE_API ResolvedLayoutOreVeinPlacementAuditV1 AuditResolvedLayoutOreVeinPlacementV1( + const ResolvedLayoutSnapshotV3& layout); + + struct MaterialSampleV1 + { + std::uint16_t hostMaterialId = 1; + std::array resourceMaterialIds{}; + std::array resourceWeightsQ16{}; + }; + + struct ResourceVolumeV1 + { + std::uint16_t resourceMaterialId = 0; + std::uint64_t weightedSamplesQ16 = 0; + double volumeCubicMetres = 0.0; + }; + + struct OreMiningYieldV1 + { + std::uint64_t solidSamplesRemoved = 0; + double sampleSpacingMetres = 0.0; + std::vector resources; + }; struct FloatingIslandBoundsAuditResult { @@ -1611,6 +1688,12 @@ namespace VoxelForgeCore ShapeBuildStats buildStats() const; float densityAt(Vec3d voxelPosition) const; + // Companion material query for the bound strate evaluator; coordinates use Core voxels. + MaterialSampleV1 materialAt(Vec3d voxelPosition) const; + // Measure-only carve estimate. This does not apply an edit or grant inventory. + OreMiningYieldV1 measureOreMiningYieldForSphere( + Vec3d centerVoxel, double radiusMetres, + double sampleSpacingMetres = 0.25) const; // Audit-only view of density-field columns and short spans supporting passage voids. std::vector passageVoidCrossings() const; bool isPassageColumnSample(std::size_t passageIndex, std::size_t segmentIndex, diff --git a/Standalone/Core/src/ResolvedLayoutInternal.h b/Standalone/Core/src/ResolvedLayoutInternal.h index bf0ead6..83e4283 100644 --- a/Standalone/Core/src/ResolvedLayoutInternal.h +++ b/Standalone/Core/src/ResolvedLayoutInternal.h @@ -283,6 +283,187 @@ namespace } return true; } + double LayoutSegmentDistance(const std::array& p0, + const std::array& p1,const std::array& q0, + const std::array& q1) + { + std::array u{},v{},w{}; + double a=0.0,b=0.0,c=0.0,d=0.0,e=0.0; + for(std::size_t axis=0;axis<3;++axis) + { + u[axis]=p1[axis]-p0[axis];v[axis]=q1[axis]-q0[axis]; + w[axis]=p0[axis]-q0[axis]; + a+=u[axis]*u[axis];b+=u[axis]*v[axis]; + c+=v[axis]*v[axis];d+=u[axis]*w[axis];e+=v[axis]*w[axis]; + } + const double denominator=a*c-b*b; + double sN=0.0,sD=denominator,tN=0.0,tD=denominator; + if(denominator<1.0e-18){sN=0.0;sD=1.0;tN=e;tD=c;} + else + { + sN=b*e-c*d;tN=a*e-b*d; + if(sN<0.0){sN=0.0;tN=e;tD=c;} + else if(sN>sD){sN=sD;tN=e+b;tD=c;} + } + if(tN<0.0) + { + tN=0.0; + if(-d<0.0)sN=0.0; + else if(-d>a)sN=sD; + else{sN=-d;sD=a;} + } + else if(tN>tD) + { + tN=tD; + if(-d+b<0.0)sN=0.0; + else if(-d+b>a)sN=sD; + else{sN=-d+b;sD=a;} + } + const double s=std::abs(sN)<1.0e-18?0.0:sN/sD; + const double t=std::abs(tN)<1.0e-18?0.0:tN/tD; + double distanceSquared=0.0; + for(std::size_t axis=0;axis<3;++axis) + { + const double delta=w[axis]+s*u[axis]-t*v[axis]; + distanceSquared+=delta*delta; + } + return std::sqrt(std::max(0.0,distanceSquared)); + } + std::array LayoutOrePointUm(const std::array& point) + {return {static_cast(point[0]),static_cast(point[1]), + static_cast(point[2])};} + bool LayoutOreVeinSafe(const ResolvedLayoutSnapshotV3& layout, + const ResolvedLayoutOreVeinV1& vein,std::string* reason=nullptr) + { + const auto fail=[&](const char* text) + {if(reason)*reason=text;return false;}; + const auto strate=std::find_if(layout.strates.begin(),layout.strates.end(), + [&](const auto& value){return value.strateIndex==vein.strateIndex;}); + if(strate==layout.strates.end()||!strate->content.presentInCurrentField) + return fail("vein strate has no current content band"); + if(vein.boundsMinimumMicrometres[2]<=strate->content.bottomMicrometres + ||vein.boundsMaximumMicrometres[2]>=strate->content.topMicrometres) + return fail("vein bounds touch or cross the ceiling/bedrock content faces"); + for(const auto* band:{&strate->ceiling,&strate->bedrock}) + if(band->presentInCurrentField + &&vein.boundsMinimumMicrometres[2]topMicrometres + &&vein.boundsMaximumMicrometres[2]>band->bottomMicrometres) + return fail("vein bounds overlap a ceiling or bedrock band"); + const auto veinA=LayoutOrePointUm(vein.endpointsMicrometres[0]); + const auto veinB=LayoutOrePointUm(vein.endpointsMicrometres[1]); + const double coreRadius=static_cast(vein.radiusMicrometres + +vein.irregularityAmplitudeMicrometres+vein.blendWidthMicrometres); + const double coreMicrometres=std::max(1,layout.coreVoxelSizeMicrometres); + constexpr double RouteClearanceMicrometres=100000.0; + const auto qToUm=[&](const std::array& q) + {return std::array{q[0]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + q[1]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + q[2]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel};}; + for(const auto& passage:layout.passages) + { + if(passage.upperStrateIndex!=vein.strateIndex + &&passage.lowerStrateIndex!=vein.strateIndex)continue; + const auto upper=qToUm(passage.upperMouthSubvoxels); + const auto lower=qToUm(passage.lowerMouthSubvoxels); + const double mouthRadius=passage.mouthRadiusSubvoxels*coreMicrometres + /WorldAssemblySubvoxelsPerVoxel; + if(LayoutSegmentDistance(veinA,veinB,upper,upper) + <=coreRadius+mouthRadius+RouteClearanceMicrometres + ||LayoutSegmentDistance(veinA,veinB,lower,lower) + <=coreRadius+mouthRadius+RouteClearanceMicrometres) + return fail("vein overlaps a clear passage landing"); + for(std::size_t i=0;i+1 route; + for(const auto& anchor:strate->anchors) + { + if(anchor.values.size()<3)continue; + if(anchor.kind=="route_point")route.push_back(&anchor); + if(anchor.kind.find("landing")!=std::string::npos) + { + const std::array landing={ + anchor.values[0]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + anchor.values[1]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + anchor.values[2]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel}; + const double radius=anchor.values.size()>=4 + ?anchor.values[3]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel:3000000.0; + if(LayoutSegmentDistance(veinA,veinB,landing,landing) + <=coreRadius+radius+RouteClearanceMicrometres) + return fail("vein overlaps a resolved landing footprint"); + } + } + for(std::size_t i=0;i+1{anchor.values[0]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + anchor.values[1]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel, + anchor.values[2]*coreMicrometres/WorldAssemblySubvoxelsPerVoxel};}; + const auto a=qPoint(*route[i]),b=qPoint(*route[i+1]); + const double routeRadius=std::max(route[i]->values.size()>=4?route[i]->values[3]:0, + route[i+1]->values.size()>=4?route[i+1]->values[3]:0) + *coreMicrometres/WorldAssemblySubvoxelsPerVoxel; + if(LayoutSegmentDistance(veinA,veinB,a,b) + <=coreRadius+routeRadius+RouteClearanceMicrometres) + return fail("vein enters a clear strate route corridor"); + } + for(const auto& room:layout.cavernRooms) + if(room.strateIndex==vein.strateIndex) + for(std::size_t axis=0;axis<3;++axis) + if(vein.boundsMinimumMicrometres[axis] + <=room.boundsMaximumMicrometres[axis] + &&vein.boundsMaximumMicrometres[axis] + >=room.boundsMinimumMicrometres[axis]) + return fail("vein overlaps a cavern landmark footprint"); + for(const auto& edge:layout.cavernEdges) + { + if(edge.strateIndex!=vein.strateIndex)continue; + std::array previous{}; + const auto bezier=[&](double t) + { + const double one=1.0-t; + const std::array weights={one*one*one,3.0*one*one*t, + 3.0*one*t*t,t*t*t}; + std::array point{}; + for(std::size_t i=0;i<4;++i) + for(std::size_t axis=0;axis<3;++axis) + point[axis]+=weights[i]*edge.controlPointsMicrometres[i][axis]; + return point; + }; + previous=bezier(0.0); + for(int step=1;step<=256;++step) + { + const auto next=bezier(static_cast(step)/256.0); + if(LayoutSegmentDistance(veinA,veinB,previous,next) + <=coreRadius+edge.boreRadiusMicrometres+RouteClearanceMicrometres) + return fail("vein enters a landmark passage corridor"); + previous=next; + } + } + for(const auto& stamp:layout.stamps) + { + if(stamp.strateIndex!=vein.strateIndex + ||(stamp.kind!=ResolvedSdfStampKindV1::fillDais + &&stamp.kind!=ResolvedSdfStampKindV1::fillPillar))continue; + bool overlaps=true; + for(std::size_t axis=0;axis<3;++axis) + overlaps=overlaps&&vein.boundsMinimumMicrometres[axis] + <=stamp.boundsMaximumMicrometres[axis] + &&vein.boundsMaximumMicrometres[axis] + >=stamp.boundsMinimumMicrometres[axis]; + if(overlaps)return fail("vein overlaps a resolved landmark solid footprint"); + } + return true; + } std::string LayoutHex(std::uint64_t value) {std::ostringstream out;out<(i); @@ -1028,6 +1237,55 @@ bool ResolvedLayoutSnapshotV3::validate(ResolvedLayoutValidationModeV3 mode, } } } + if(oreVeins.empty()) + { + if(oreVeinVocabularyVersion!=0) + add("ore_vein_vocabulary_version", + "ore-vein vocabulary version is set without records"); + } + else if(oreVeinVocabularyVersion!=ResolvedLayoutOreVeinVocabularyVersionV1) + add("ore_vein_vocabulary_version", + "ore-vein records require vocabulary version 1"); + std::vector oreVeinIds; + for(const auto& vein:oreVeins) + { + if(vein.stableId.empty() + ||std::find(oreVeinIds.begin(),oreVeinIds.end(),vein.stableId)!=oreVeinIds.end()) + add("ore_vein_identity","ore vein has an empty or duplicate stable identity"); + else oreVeinIds.push_back(vein.stableId); + if(vein.resourceMaterialId==0||vein.radiusMicrometres<250000 + ||vein.radiusMicrometres>20000000 + ||vein.irregularityAmplitudeMicrometres<0 + ||vein.irregularityAmplitudeMicrometres>10000000 + ||vein.irregularityWavelengthMicrometres<0 + ||vein.irregularityWavelengthMicrometres>100000000 + ||(vein.irregularityAmplitudeMicrometres>0 + &&vein.irregularityWavelengthMicrometres<=0) + ||vein.blendWidthMicrometres<50000 + ||vein.blendWidthMicrometres>2000000 + ||vein.irregularitySeed>0x001fffffffffffffull) + add("ore_vein_parameters",vein.stableId+" has invalid or unbounded parameters"); + const std::int64_t pad=vein.radiusMicrometres + +vein.irregularityAmplitudeMicrometres+vein.blendWidthMicrometres; + for(std::size_t axis=0;axis<3;++axis) + { + if(vein.endpointsMicrometres[0][axis]<-1000000000000ll + ||vein.endpointsMicrometres[0][axis]>1000000000000ll + ||vein.endpointsMicrometres[1][axis]<-1000000000000ll + ||vein.endpointsMicrometres[1][axis]>1000000000000ll) + add("ore_vein_bounds",vein.stableId+" endpoint is outside the bounded world envelope"); + if(vein.boundsMinimumMicrometres[axis] + !=std::min(vein.endpointsMicrometres[0][axis], + vein.endpointsMicrometres[1][axis])-pad + ||vein.boundsMaximumMicrometres[axis] + !=std::max(vein.endpointsMicrometres[0][axis], + vein.endpointsMicrometres[1][axis])+pad) + add("ore_vein_bounds",vein.stableId+" conservative bounds do not match its parameters"); + } + std::string safetyReason; + if(!LayoutOreVeinSafe(*this,vein,&safetyReason)) + add("ore_vein_placement",vein.stableId+" is unsafe: "+safetyReason); + } if(strict&&!issues.empty()){error="strict resolved-layout validation rejected "+issues.front().code;return false;} return true; } @@ -1046,6 +1304,8 @@ std::optional ResolvedLayoutSnapshotV3::FromJson( s.stampVocabularyVersion=static_cast(LayoutInt(root,"stamp_vocabulary_version")); s.cavernGraphVocabularyVersion=static_cast( LayoutInt(root,"cavern_graph_vocabulary_version")); + s.oreVeinVocabularyVersion=static_cast( + LayoutInt(root,"ore_vein_vocabulary_version")); for(const auto& v:root.Get("strates").AsArray()) { ResolvedLayoutStratumV2 x;x.stableId=LayoutString(v,"stable_id"); @@ -1166,6 +1426,33 @@ std::optional ResolvedLayoutSnapshotV3::FromJson( edge.irregularitySeed=static_cast(LayoutInt(v,"irregularity_seed")); s.cavernEdges.push_back(std::move(edge)); } + for(const auto& v:root.Get("ore_veins").AsArray()) + { + ResolvedLayoutOreVeinV1 vein;vein.stableId=LayoutString(v,"stable_id"); + vein.strateIndex=static_cast(LayoutInt(v,"strate_index")); + vein.resourceMaterialId=static_cast(LayoutInt(v,"resource_material_id")); + const auto& endpoints=v.Get("endpoints_um").AsArray(); + for(std::size_t endpoint=0;endpoint<2&&endpoint& target) + { + const auto& values=v.Get(key).AsArray(); + for(std::size_t axis=0;axis<3&&axis(LayoutInt(v,"irregularity_seed")); + s.oreVeins.push_back(std::move(vein)); + } const std::string serializedIdentity=LayoutString(root,"stable_identity"); if(!s.finalize(error))return std::nullopt; if(s.stableIdentity!=serializedIdentity){error="resolved layout stable identity does not match its canonical payload";return std::nullopt;} @@ -1352,6 +1639,148 @@ bool ResolveResolvedCavernGraphV1(ResolvedLayoutSnapshotV3& layout,std::int32_t layout=std::move(candidate);return true; } +bool ResolveResolvedLayoutOreVeinsV1(ResolvedLayoutSnapshotV3& layout,std::int32_t seed, + std::span requests,std::string& error) +{ + error.clear(); + ResolvedLayoutSnapshotV3 candidate=layout; + candidate.oreVeins.clear();candidate.oreVeinVocabularyVersion=0; + if(requests.empty()) + { + if(!candidate.finalize(error))return false; + layout=std::move(candidate);return true; + } + candidate.oreVeinVocabularyVersion=ResolvedLayoutOreVeinVocabularyVersionV1; + std::vector ordered(requests.begin(),requests.end()); + std::sort(ordered.begin(),ordered.end(),[](const auto& a,const auto& b) + {return a.stableId requestIds; + candidate.oreVeins.reserve(ordered.size()); + for(const auto& request:ordered) + { + if(request.stableId.empty() + ||std::find(requestIds.begin(),requestIds.end(),request.stableId)!=requestIds.end()) + {error="ore-vein requests require non-empty unique stable IDs";return false;} + requestIds.push_back(request.stableId); + if(request.resourceMaterialId==0||request.placementRadiusMicrometres<0 + ||request.placementRadiusMicrometres>10000000 + ||request.radiusMicrometres<250000||request.radiusMicrometres>20000000 + ||request.irregularityAmplitudeMicrometres<0 + ||request.irregularityAmplitudeMicrometres>10000000 + ||request.irregularityWavelengthMicrometres<0 + ||request.irregularityWavelengthMicrometres>100000000 + ||(request.irregularityAmplitudeMicrometres>0 + &&request.irregularityWavelengthMicrometres<=0) + ||request.blendWidthMicrometres<50000 + ||request.blendWidthMicrometres>2000000) + {error="ore-vein request "+request.stableId+" has invalid or unbounded parameters";return false;} + const auto strate=std::find_if(candidate.strates.begin(),candidate.strates.end(), + [&](const auto& value){return value.strateIndex==request.strateIndex;}); + if(strate==candidate.strates.end()) + {error="ore-vein request "+request.stableId+" names an unknown strate";return false;} + + const std::uint64_t baseSeed=LayoutStampSeed(seed,request.strateIndex, + std::string("ore-vein/")+request.stableId)&0x001fffffffffffffull; + std::uint64_t state=baseSeed; + const auto randomOffset=[&](std::uint64_t bits) + { + const std::int64_t radius=request.placementRadiusMicrometres; + if(radius==0)return std::int64_t{0}; + const std::uint64_t span=static_cast(radius)*2+1; + return static_cast(bits%span)-radius; + }; + bool placed=false; + std::string lastUnsafeReason="all candidates were outside the bounded content volume"; + const std::uint32_t attempts=request.placementRadiusMicrometres==0?1u:512u; + for(std::uint32_t attempt=0;attempt offset{}; + if(request.placementRadiusMicrometres>0) + { + offset={randomOffset(LayoutStampNext(state)), + randomOffset(LayoutStampNext(state)), + randomOffset(LayoutStampNext(state))/3}; + const long double radius=request.placementRadiusMicrometres; + const long double distanceSquared=static_cast(offset[0])*offset[0] + +static_cast(offset[1])*offset[1] + +static_cast(offset[2])*offset[2]; + if(distanceSquared>radius*radius)continue; + } + ResolvedLayoutOreVeinV1 vein;vein.stableId=request.stableId; + vein.strateIndex=request.strateIndex; + vein.resourceMaterialId=request.resourceMaterialId; + vein.radiusMicrometres=request.radiusMicrometres; + vein.irregularityAmplitudeMicrometres=request.irregularityAmplitudeMicrometres; + vein.irregularityWavelengthMicrometres=request.irregularityWavelengthMicrometres; + vein.blendWidthMicrometres=request.blendWidthMicrometres; + vein.irregularitySeed=baseSeed; + for(std::size_t endpoint=0;endpoint<2;++endpoint) + for(std::size_t axis=0;axis<3;++axis) + vein.endpointsMicrometres[endpoint][axis] + =request.anchorEndpointsMicrometres[endpoint][axis]+offset[axis]; + const std::int64_t pad=vein.radiusMicrometres + +vein.irregularityAmplitudeMicrometres+vein.blendWidthMicrometres; + for(std::size_t axis=0;axis<3;++axis) + { + vein.boundsMinimumMicrometres[axis]=std::min( + vein.endpointsMicrometres[0][axis],vein.endpointsMicrometres[1][axis])-pad; + vein.boundsMaximumMicrometres[axis]=std::max( + vein.endpointsMicrometres[0][axis],vein.endpointsMicrometres[1][axis])+pad; + } + if(!LayoutOreVeinSafe(candidate,vein,&lastUnsafeReason))continue; + candidate.oreVeins.push_back(std::move(vein));placed=true;break; + } + if(!placed) + {error="ore-vein request "+request.stableId + +" has no deterministic passage-safe content placement: "+lastUnsafeReason;return false;} + } + if(!candidate.finalize(error))return false; + std::vector issues;std::string strictError; + if(!candidate.validate(ResolvedLayoutValidationModeV3::strict,issues,strictError)) + {error="strict ore-vein placement validation failed: "+strictError;return false;} + layout=std::move(candidate);return true; +} + +ResolvedLayoutOreVeinPlacementAuditV1 AuditResolvedLayoutOreVeinPlacementV1( + const ResolvedLayoutSnapshotV3& layout) +{ + ResolvedLayoutOreVeinPlacementAuditV1 result; + if(layout.passages.empty()||layout.passages.front().controlPoints.empty())return result; + const auto& passage=layout.passages.front(); + const auto& control=passage.controlPoints.front().positionSubvoxels; + ResolvedLayoutOreVeinV1 forced;forced.stableId="negative-control/forced-clear-passage"; + forced.strateIndex=passage.upperStrateIndex;forced.resourceMaterialId=1; + forced.radiusMicrometres=500000;forced.blendWidthMicrometres=500000; + forced.irregularitySeed=1; + for(std::size_t axis=0;axis<3;++axis) + { + const std::int64_t point=static_cast(std::llround( + static_cast(control[axis])*layout.coreVoxelSizeMicrometres + /WorldAssemblySubvoxelsPerVoxel)); + forced.endpointsMicrometres[0][axis]=point; + forced.endpointsMicrometres[1][axis]=point; + forced.boundsMinimumMicrometres[axis]=point-1000000; + forced.boundsMaximumMicrometres[axis]=point+1000000; + } + ResolvedLayoutSnapshotV3 candidate=layout; + candidate.oreVeinVocabularyVersion=ResolvedLayoutOreVeinVocabularyVersionV1; + candidate.oreVeins.push_back(forced); + std::string finalizeError; + ++result.negativeControlsRun; + if(candidate.finalize(finalizeError)) + { + std::vector issues;std::string validationError; + if(!candidate.validate(ResolvedLayoutValidationModeV3::strict,issues,validationError) + &&std::any_of(issues.begin(),issues.end(),[](const auto& issue) + {return issue.code=="ore_vein_placement" + &&issue.detail.find("clear passage")!=std::string::npos;})) + ++result.negativeControlsRejected; + } + result.passed=result.negativeControlsRun>0 + &&result.negativeControlsRejected==result.negativeControlsRun; + return result; +} + ResolvedLayoutStampPlacementAuditV1 AuditResolvedLayoutStampPlacementV1( const ResolvedLayoutSnapshotV3& layout) { diff --git a/Standalone/Core/src/ShapeWorldInternal.h b/Standalone/Core/src/ShapeWorldInternal.h index a2b706d..fb8c825 100644 --- a/Standalone/Core/src/ShapeWorldInternal.h +++ b/Standalone/Core/src/ShapeWorldInternal.h @@ -369,6 +369,7 @@ public: } std::sort(BoundStratumFields.begin(),BoundStratumFields.end(), [](const auto& A,const auto& B){return A.BottomChunkZ OreVeinTileCandidates( + const std::array& minimum, + const std::array& maximum) const + {return BuildOreVeinTileList(minimum,maximum);} + + VoxelForgeCore::MaterialSampleV1 EvaluateMaterialAt(float X,float Y,float Z, + std::span candidates, + std::uint64_t* candidateChecks=nullptr) const + { + if(SharedDensitySource) + return SharedDensitySource->MaterialAt(X,Y,Z,candidates,candidateChecks); + return MaterialAt(X,Y,Z,candidates,candidateChecks); + } + + VoxelForgeCore::MaterialSampleV1 MaterialAt(float X,float Y,float Z) const + { + if(SharedDensitySource)return SharedDensitySource->MaterialAt(X,Y,Z); + const auto candidates=BuildOreVeinPointList(X,Y,Z); + return EvaluateMaterialAt(X,Y,Z,candidates); + } + std::string DensityDispatchPathAt(float X,float Y,float Z) const { if(SharedDensitySource)return SharedDensitySource->DensityDispatchPathAt(X,Y,Z); @@ -3208,6 +3230,25 @@ private: std::uint64_t irregularitySeed=0; std::uint8_t quarterTurns=0; }; + struct FOreVeinSpatialBound + { + std::array minimumSubvoxels{},maximumSubvoxels{}; + }; + struct FOreVeinSpatialNode + { + std::array minimumSubvoxels{},maximumSubvoxels{}; + std::size_t first=0,end=0; + int left=-1,right=-1; + }; + struct FOreVeinRuntime + { + const VoxelForgeCore::ResolvedLayoutOreVeinV1* record=nullptr; + std::array,2> endpointsVoxels{}; + double radiusVoxels=0.0,irregularityAmplitudeVoxels=0.0; + double irregularityWavelengthVoxels=0.0,blendWidthVoxels=0.0; + std::uint64_t irregularitySeed=0; + std::uint16_t resourceMaterialId=0; + }; struct FCavernRuntimeFeature { const VoxelForgeCore::ResolvedCavernRoomV1* room=nullptr; @@ -3349,6 +3390,258 @@ private: if(!StampSpatialOrder.empty())BuildStampSpatialNode(0,StampSpatialOrder.size()); } + int BuildOreVeinSpatialNode(std::size_t first,std::size_t end) + { + FOreVeinSpatialNode node;node.first=first;node.end=end; + node.minimumSubvoxels.fill(std::numeric_limits::max()); + node.maximumSubvoxels.fill(std::numeric_limits::min()); + for(std::size_t offset=first;offset(OreVeinSpatialNodes.size()); + OreVeinSpatialNodes.push_back(node); + if(end-first>8) + { + std::size_t splitAxis=0; + for(std::size_t axis=1;axis<3;++axis) + if(static_cast(node.maximumSubvoxels[axis]) + -node.minimumSubvoxels[axis] + >static_cast(node.maximumSubvoxels[splitAxis]) + -node.minimumSubvoxels[splitAxis])splitAxis=axis; + const std::size_t middle=first+(end-first)/2; + std::nth_element(OreVeinSpatialOrder.begin()+first, + OreVeinSpatialOrder.begin()+middle,OreVeinSpatialOrder.begin()+end, + [this,splitAxis](std::uint32_t a,std::uint32_t b) + { + const auto& left=OreVeinSpatialBounds[a]; + const auto& right=OreVeinSpatialBounds[b]; + const long double leftCenter=static_cast( + left.minimumSubvoxels[splitAxis])+left.maximumSubvoxels[splitAxis]; + const long double rightCenter=static_cast( + right.minimumSubvoxels[splitAxis])+right.maximumSubvoxels[splitAxis]; + return leftCenter==rightCenter?a& minimum, + const std::array& maximum, + std::vector& result) const + { + if(nodeIndex<0)return; + const auto& node=OreVeinSpatialNodes[static_cast(nodeIndex)]; + for(std::size_t axis=0;axis<3;++axis) + if(node.maximumSubvoxels[axis]maximum[axis])return; + if(node.left<0) + { + for(std::size_t offset=node.first;offset=minimum[axis]; + if(overlap)result.push_back(index); + } + return; + } + QueryOreVeinSpatialNode(node.left,minimum,maximum,result); + QueryOreVeinSpatialNode(node.right,minimum,maximum,result); + } + + void BuildOreVeinSpatialIndex() + { + OreVeinSpatialBounds.clear();OreVeinSpatialOrder.clear();OreVeinSpatialNodes.clear(); + OreVeinRuntime.clear(); + if(!ResolvedLayout||ResolvedLayout->oreVeins.empty()||!Owner + ||Owner->CoreVoxelSizeMicrons==0)return; + constexpr long double Q=VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel; + const long double scale=Q/Owner->CoreVoxelSizeMicrons; + OreVeinSpatialBounds.reserve(ResolvedLayout->oreVeins.size()); + OreVeinRuntime.reserve(ResolvedLayout->oreVeins.size()); + for(const auto& vein:ResolvedLayout->oreVeins) + { + FOreVeinSpatialBound bound; + for(std::size_t axis=0;axis<3;++axis) + { + bound.minimumSubvoxels[axis]=static_cast(std::floor( + static_cast(vein.boundsMinimumMicrometres[axis])*scale)); + bound.maximumSubvoxels[axis]=static_cast(std::ceil( + static_cast(vein.boundsMaximumMicrometres[axis])*scale)); + } + OreVeinSpatialBounds.push_back(bound); + FOreVeinRuntime runtime;runtime.record=&vein; + for(std::size_t endpoint=0;endpoint<2;++endpoint) + for(std::size_t axis=0;axis<3;++axis) + runtime.endpointsVoxels[endpoint][axis]= + static_cast(vein.endpointsMicrometres[endpoint][axis]) + /Owner->CoreVoxelSizeMicrons; + runtime.radiusVoxels=static_cast(vein.radiusMicrometres) + /Owner->CoreVoxelSizeMicrons; + runtime.irregularityAmplitudeVoxels= + static_cast(vein.irregularityAmplitudeMicrometres) + /Owner->CoreVoxelSizeMicrons; + runtime.irregularityWavelengthVoxels= + static_cast(vein.irregularityWavelengthMicrometres) + /Owner->CoreVoxelSizeMicrons; + runtime.blendWidthVoxels=static_cast(vein.blendWidthMicrometres) + /Owner->CoreVoxelSizeMicrons; + runtime.irregularitySeed=vein.irregularitySeed; + runtime.resourceMaterialId=vein.resourceMaterialId; + OreVeinRuntime.push_back(runtime); + } + OreVeinSpatialOrder.resize(OreVeinSpatialBounds.size()); + for(std::size_t i=0;i(i); + if(!OreVeinSpatialOrder.empty())BuildOreVeinSpatialNode(0,OreVeinSpatialOrder.size()); + } + + std::vector BuildOreVeinTileList( + const std::array& minimum, + const std::array& maximum) const + { + std::vector result; + if(OreVeinSpatialBounds.empty())return result; + for(std::size_t axis=0;axis<3;++axis) + if(minimum[axis]>maximum[axis]) + { + result.resize(OreVeinSpatialBounds.size()); + for(std::size_t i=0;i(i); + return result; + } + QueryOreVeinSpatialNode(0,minimum,maximum,result); + std::sort(result.begin(),result.end()); + return result; + } + + std::vector BuildOreVeinPointList(float X,float Y,float Z) const + { + constexpr std::int64_t Q=VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel; + const auto toQ=[](float value) + { + const long double scaled=static_cast(value)*Q; + if(!std::isfinite(value)||scaled::min() + ||scaled>std::numeric_limits::max())return std::int64_t{0}; + return static_cast(std::llround(scaled)); + }; + const std::array point={toQ(X),toQ(Y),toQ(Z)}; + return BuildOreVeinTileList(point,point); + } + + VoxelForgeCore::MaterialSampleV1 MaterialAt(float X,float Y,float Z, + std::span candidates, + std::uint64_t* candidateChecks=nullptr) const + { + using namespace VoxelForgeCore; + MaterialSampleV1 result; + if(!ResolvedLayout||OreVeinRuntime.empty()||candidates.empty() + ||!std::isfinite(X)||!std::isfinite(Y)||!std::isfinite(Z))return result; + const FBoundStratumField* bound=FindBoundStratumForZ(Z); + if(!bound)return result; + const std::array point={X,Y,Z}; + const auto noiseAt=[](std::uint64_t seed,std::int64_t x,std::int64_t y,std::int64_t z) + { + std::uint64_t hash=14695981039346656037ull; + for(const std::uint64_t word:{seed,static_cast(x), + static_cast(y),static_cast(z)}) + for(int byte=0;byte<8;++byte) + {hash^=static_cast(word>>(byte*8));hash*=1099511628211ull;} + hash^=hash>>30;hash*=0xbf58476d1ce4e5b9ull; + hash^=hash>>27;hash*=0x94d049bb133111ebull;hash^=hash>>31; + return static_cast(static_cast(hash>>32))/2147483647.5-1.0; + }; + const auto fade=[](double value){return value*value*(3.0-2.0*value);}; + for(const std::uint32_t candidate:candidates) + { + if(candidateChecks)++*candidateChecks; + if(candidate>=OreVeinRuntime.size())continue; + const auto& vein=OreVeinRuntime[candidate]; + if(!vein.record||vein.record->strateIndex!=bound->StrateIndex)continue; + const double wavelength=vein.irregularityWavelengthVoxels; + double irregularity=0.0; + if(vein.irregularityAmplitudeVoxels>0.0&&wavelength>0.0) + { + std::array cell{};std::array t{}; + for(std::size_t axis=0;axis<3;++axis) + { + const double coordinate=point[axis]/wavelength; + cell[axis]=static_cast(std::floor(coordinate)); + t[axis]=fade(coordinate-cell[axis]); + } + double layer[2][2]{}; + for(int z=0;z<2;++z)for(int y=0;y<2;++y) + { + const double a=noiseAt(vein.irregularitySeed,cell[0],cell[1]+y,cell[2]+z); + const double b=noiseAt(vein.irregularitySeed,cell[0]+1,cell[1]+y,cell[2]+z); + layer[z][y]=std::lerp(a,b,t[0]); + } + irregularity=std::lerp(std::lerp(layer[0][0],layer[0][1],t[1]), + std::lerp(layer[1][0],layer[1][1],t[1]),t[2]); + } + const auto& a=vein.endpointsVoxels[0];const auto& b=vein.endpointsVoxels[1]; + double lengthSquared=0.0,dot=0.0; + for(std::size_t axis=0;axis<3;++axis) + {const double delta=b[axis]-a[axis];lengthSquared+=delta*delta;dot+=(point[axis]-a[axis])*delta;} + const double t=lengthSquared>0.0?std::clamp(dot/lengthSquared,0.0,1.0):0.0; + double distanceSquared=0.0; + for(std::size_t axis=0;axis<3;++axis) + {const double delta=point[axis]-(a[axis]+t*(b[axis]-a[axis]));distanceSquared+=delta*delta;} + const double distance=std::sqrt(distanceSquared); + const double radius=std::max(0.0,vein.radiusVoxels + +irregularity*vein.irregularityAmplitudeVoxels); + if(distance>=radius+vein.blendWidthVoxels)continue; + double weight=1.0; + if(distance>radius) + { + const double u=std::clamp((radius+vein.blendWidthVoxels-distance) + /vein.blendWidthVoxels,0.0,1.0); + weight=u*u*(3.0-2.0*u); + } + const auto weightQ16=static_cast(std::clamp( + std::llround(weight*65535.0),0ll,65535ll)); + if(weightQ16==0)continue; + std::size_t slot=2; + for(std::size_t index=0;index<2;++index) + if(result.resourceMaterialIds[index]==vein.resourceMaterialId) + {slot=index;break;} + if(slot==2) + for(std::size_t index=0;index<2;++index) + if(result.resourceMaterialIds[index]==0){slot=index;break;} + if(slot<2) + { + result.resourceMaterialIds[slot]=vein.resourceMaterialId; + const std::uint32_t sum=static_cast( + result.resourceWeightsQ16[slot])+weightQ16; + result.resourceWeightsQ16[slot]=static_cast( + std::min(65535,sum)); + } + } + const std::uint32_t total=static_cast(result.resourceWeightsQ16[0]) + +result.resourceWeightsQ16[1]; + if(total>65535) + { + result.resourceWeightsQ16[0]=static_cast( + static_cast(result.resourceWeightsQ16[0])*65535/total); + result.resourceWeightsQ16[1]=static_cast( + 65535-result.resourceWeightsQ16[0]); + } + return result; + } + std::vector BuildStampTileList( const std::array& minimum, const std::array& maximum) const @@ -9412,6 +9705,10 @@ private: std::vector StampSpatialNodes; std::vector StampSpatialOrder; std::vector StampRuntime; + std::vector OreVeinSpatialBounds; + std::vector OreVeinSpatialNodes; + std::vector OreVeinSpatialOrder; + std::vector OreVeinRuntime; std::vector CavernRuntime; std::vector PassageFeatureBounds; std::vector PassageTileFeatures; diff --git a/Standalone/Core/src/VoxelForgeCore.cpp b/Standalone/Core/src/VoxelForgeCore.cpp index a01386e..8c86c94 100644 --- a/Standalone/Core/src/VoxelForgeCore.cpp +++ b/Standalone/Core/src/VoxelForgeCore.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -216,6 +217,19 @@ namespace VoxelForgeCore return hash; } + std::uint64_t HashMaterialSamples(std::span vertices) + { + std::uint64_t hash=14695981039346656037ull; + AddWord(hash,vertices.size(),8); + for(const MeshVertex& vertex:vertices) + { + AddWord(hash,vertex.hostMaterialId,2); + for(const std::uint16_t id:vertex.resourceMaterialIds)AddWord(hash,id,2); + for(const std::uint16_t weight:vertex.resourceWeightsQ16)AddWord(hash,weight,2); + } + return hash; + } + std::uint64_t HashBrushTransaction(const EditTransaction& transaction) { std::uint64_t hash=14695981039346656037ull; @@ -1706,6 +1720,62 @@ namespace VoxelForgeCore float World::densityAt(Vec3d position) const { return impl_&&impl_->shapeReady.load(std::memory_order_acquire)&&impl_->shape?impl_->shape->DensityAt(static_cast(position.x),static_cast(position.y),static_cast(position.z)):0.0f; } + MaterialSampleV1 World::materialAt(Vec3d position) const + { + if(!impl_||!impl_->shapeReady.load(std::memory_order_acquire)||!impl_->shape) + return {}; + return impl_->shape->MaterialAt(static_cast(position.x), + static_cast(position.y),static_cast(position.z)); + } + OreMiningYieldV1 World::measureOreMiningYieldForSphere(Vec3d centerVoxel, + double radiusMetres,double sampleSpacingMetres) const + { + OreMiningYieldV1 result;result.sampleSpacingMetres=sampleSpacingMetres; + if(!impl_||!impl_->shapeReady.load(std::memory_order_acquire)||!impl_->shape + ||!std::isfinite(radiusMetres)||!std::isfinite(sampleSpacingMetres) + ||radiusMetres<=0.0||sampleSpacingMetres<0.05||sampleSpacingMetres>2.0) + return result; + const std::uint32_t voxelMicrometres=impl_->configuration.voxelSizeMicrons; + if(voxelMicrometres==0)return result; + const double voxelMetres=static_cast(voxelMicrometres)/1000000.0; + const double radiusVoxels=radiusMetres/voxelMetres; + const double spacingVoxels=sampleSpacingMetres/voxelMetres; + const int steps=static_cast(std::ceil(radiusMetres/sampleSpacingMetres)); + const double radiusSquared=radiusMetres*radiusMetres; + std::map weightedSamples; + for(int z=-steps;z<=steps;++z) + for(int y=-steps;y<=steps;++y) + for(int x=-steps;x<=steps;++x) + { + const double dx=x*sampleSpacingMetres; + const double dy=y*sampleSpacingMetres; + const double dz=z*sampleSpacingMetres; + const double distanceSquared=dx*dx+dy*dy+dz*dz; + if(distanceSquared>radiusSquared)continue; + const Vec3d point={centerVoxel.x+x*spacingVoxels, + centerVoxel.y+y*spacingVoxels,centerVoxel.z+z*spacingVoxels}; + const float before=impl_->shape->DensityAt(static_cast(point.x), + static_cast(point.y),static_cast(point.z)); + const double carveDensity=radiusVoxels + -std::sqrt(distanceSquared)/voxelMetres; + const double after=std::max(static_cast(before),carveDensity); + if(!(before<0.0f&&after>=0.0))continue; + ++result.solidSamplesRemoved; + const MaterialSampleV1 material=materialAt(point); + for(std::size_t slot=0;slot<2;++slot) + if(material.resourceMaterialIds[slot] + &&material.resourceWeightsQ16[slot]) + weightedSamples[material.resourceMaterialIds[slot]] + +=material.resourceWeightsQ16[slot]; + } + const double sampleVolume=sampleSpacingMetres*sampleSpacingMetres + *sampleSpacingMetres; + result.resources.reserve(weightedSamples.size()); + for(const auto& [id,weighted]:weightedSamples) + result.resources.push_back({id,weighted, + static_cast(weighted)/65535.0*sampleVolume}); + return result; + } std::vector World::passageVoidCrossings() const { std::vector result; @@ -2636,6 +2706,21 @@ namespace VoxelForgeCore out.skirtFaceMasks.assign(mesh.TriangleSkirtFaceMasks.begin(), mesh.TriangleSkirtFaceMasks.end()); out.skirtFaceMasks.resize(mesh.Triangles.Num()/3,0); + constexpr std::int64_t MaterialSubvoxelsPerVoxel=WorldAssemblySubvoxelsPerVoxel; + const std::array materialTileMinimum={ + (static_cast(origin.X)-step)*MaterialSubvoxelsPerVoxel, + (static_cast(origin.Y)-step)*MaterialSubvoxelsPerVoxel, + (static_cast(origin.Z)-step)*MaterialSubvoxelsPerVoxel}; + const std::array materialTileMaximum={ + (static_cast(origin.X)+extent+step)*MaterialSubvoxelsPerVoxel, + (static_cast(origin.Y)+extent+step)*MaterialSubvoxelsPerVoxel, + (static_cast(origin.Z)+extent+step)*MaterialSubvoxelsPerVoxel}; + const auto materialCandidates=tileShape.OreVeinTileCandidates( + materialTileMinimum,materialTileMaximum); + out.diagnostics.materialTileOutsideEveryVein=materialCandidates.empty(); + const double geometryVoxelSizeCm=static_cast(world.CoreVoxelSizeMicrons)/10000.0; + std::uint64_t materialQueries=0,materialCandidateChecks=0; + const auto materialQueryStart=std::chrono::steady_clock::now(); out.vertices.reserve(static_cast(mesh.Vertices.Num())); for(int32 i=0;i(p.X/geometryVoxelSizeCm), + static_cast(p.Y/geometryVoxelSizeCm), + static_cast(p.Z/geometryVoxelSizeCm),materialCandidates, + &materialCandidateChecks); + } out.vertices.push_back({{p.X,p.Y,p.Z},{normal.X,normal.Y,normal.Z},{uv.X,uv.Y}, - {color.R,color.G,color.B,color.A}}); + {color.R,color.G,color.B,color.A},material.hostMaterialId, + material.resourceMaterialIds,material.resourceWeightsQ16}); } + out.diagnostics.materialQueries=materialQueries; + out.diagnostics.materialCandidateChecks=materialCandidateChecks; + out.diagnostics.materialQueryMilliseconds=materialQueries + ?std::chrono::duration( + std::chrono::steady_clock::now()-materialQueryStart).count():0.0; out.indices.reserve(static_cast(mesh.Triangles.Num())); for(const int32 index:mesh.Triangles)out.indices.push_back(static_cast(index)); if(options.captureDensitySamples)out.debugDensitySamples=std::move(densityValues); @@ -2657,6 +2758,7 @@ namespace VoxelForgeCore { densityHash^=std::bit_cast(value);densityHash*=1099511628211ull; } out.densityHash=densityHash;out.meshHash=HashViewerMesh(mesh); out.payloadHash=HashPayload(mesh);out.topologyHash=HashTopology(mesh); + out.materialHash=HashMaterialSamples(out.vertices); if(key.lod>=4) { out.meshHash=SaltFarHorizonHash(out.meshHash,options.farHorizonVersion); @@ -2664,6 +2766,7 @@ namespace VoxelForgeCore out.topologyHash=SaltFarHorizonHash(out.topologyHash,options.farHorizonVersion); } out.hasDensityHash=out.hasMeshHash=out.hasPayloadHash=out.hasTopologyHash=true; + out.hasMaterialHash=true; } out.diagnostics.meshAssemblyMilliseconds=std::chrono::duration( std::chrono::steady_clock::now()-MeshAssemblyStart).count(); diff --git a/Standalone/Research/WorldAssemblerM3/Linux50/REPORT.md b/Standalone/Research/WorldAssemblerM3/Linux50/REPORT.md new file mode 100644 index 0000000..8855da7 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux50/REPORT.md @@ -0,0 +1,51 @@ +# VoxelForge L50: ore veins in Core, slice 1 + +Scope: Core only on `assembler/world`. The owner demo is opt-in with `--ore-veins-demo`; no Unreal integration or mining gameplay is included. + +## Representation and placement + +Vocabulary v1 currently has one shape, `capsule`. A resolved record carries its stable ID, strate index, resource material ID, two endpoints, radius, irregularity amplitude and wavelength, blend width, seed, and conservative micrometre bounds. The `ore_veins` canonical field is emitted only when records exist. Stable IDs sort canonically; irregularity seeds derive from world seed, strate, and stable ID. + +The seed-0 SW demo resolves three records in strate 1. Bounds include radius, irregularity, and blend: + +| Stable ID | Resource | Endpoints (m) | Radius | Bounds (µm, half-open x × y × z) | Irregularity seed | +|---|---:|---|---:|---|---:| +| `ore/sw-arrival-route-copper-v1` | 1 copper | (16.510, 21.173, -502.909) → (18.277, 22.940, -502.950) | 0.65 m | `[15159830,19627354) × [19822674,24290198) × [-504300299,-501558872)` | 6689110868732322 | +| `ore/sw-arrival-route-cobalt-v1` | 2 cobalt | (25.092, 21.192, -503.626) → (26.852, 22.952, -503.394) | 0.75 m | `[23641575,28301747) × [19741941,24402113) × [-505075523,-501944042)` | 2641701047127768 | +| `ore/sw-chamber-approach-quartz-v1` | 3 quartz | (1.402, 27.019, -502.525) → (1.481, 29.459, -503.062) | 0.80 m | `[-98238,2981467) × [25518936,30959266) × [-504561729,-501024663)` | 882664590774173 | + +Amplitude is 0.10 m; wavelengths are 1.4 m for copper/cobalt and 1.8 m for quartz; blend width is 0.60 m. A bounded, seeded candidate search biases capsules beside the route and toward side pockets/chamber approach. It rejects clear passage and mouth clearance, landing regions, and landmark/cavern footprints, using the resolved bounds. The forced-clear-passage control was rejected (1/1). + +## Query, mesh, yield + +The bound field table exposes deterministic `materialAt(x,y,z)`: host material, up to two resource IDs, and Q16 blend weights. A per-tile BVH narrows candidate veins; tiles with no vein bounds skip the query. Density and its sign are untouched. L44 shape-free and culling paths do not inspect veins: they depend only on density/geometry, and material lookup is a separate surface attribute query. + +Mesh export v2 stores host ID plus two resource-ID/weight pairs per surface vertex, sampled at the vertex. The standalone renderer colors copper orange, cobalt blue, and quartz turquoise; v1 export remains available without ore. + +Mining yield is measurement-only: a fixed 0.25 m grid evaluates the edit sphere before/after solid state and accumulates weighted removed resource volume by ID. The audited copper edit used a 1.25 m sphere and measured 0.000071 m³ (one removed solid sample, Q16 weight sum 296). This is a coarse-grid measurement, not a tuned reward amount. Repeating it on already-air space returned 0.000000 m³. + +## Proofs and cost + +With the demo off, owner SurfaceWorld W1/W12 hashes match L47: density `0x7dc75e2c09302258`, mesh `0x0cb34c40ceec4ce3`, payload `0x9d23e8c46b515cf1`, topology `0x2962c9464991eedd`. + +At the 125-tile ore audit camera `(19.725, 19.725, -501.566)`, enabling veins leaves all geometry hashes unchanged: + +| State | Density | Mesh | Payload | Topology | Material | +|---|---|---|---|---|---| +| Demo off | `0x5f9f1fdc0aabc8f0` | `0xed9e30865c98c2af` | `0xb8e3715300641fed` | `0x48584cc4e11c330c` | `0x58803ee275e9ba0a` | +| Demo on | `0x5f9f1fdc0aabc8f0` | `0xed9e30865c98c2af` | `0xb8e3715300641fed` | `0x48584cc4e11c330c` | `0x5bfc71cbd5615b02` | + +The random-camera and cavern sweeps ran with the demo enabled; material hash rows agreed across W1/W8/W12. Broad sweep positions outside all vein bounds recorded zero material queries. The ore audit changed six tile material hashes while preserving every density, mesh, payload, and topology tile hash. + +At this audit, the on path queried 19,396 vertices and checked 24,871 candidates in 4.562 ms. 111/125 tiles had no vein candidate and recorded 0 ms query time; demo off queried zero vertices (also 0 ms). The off audit material hash above is the new empty-material result; the four owner geometry hashes remain the L47 values. + +## Verification, captures, failures + +- Fast: PASS, 211.2 s. Medium: PASS, 589.7 s. Full: PASS, 1,639.0 s; 1,084 checks, 0 failures. All tiers used source stamp `5f0f388366a4a6e7fb842459f035679e88da6b2a20af44e90e419c35f7c2fc06`. +- Clean source stamp: `5f0f388366a4a6e7fb842459f035679e88da6b2a20af44e90e419c35f7c2fc06`; Clang 19 and GCC 14 builds passed. +- Eye-height approach-wall capture: [`tunnel-quartz-eye.png`](captures/tunnel-quartz-eye.png). Wide arrival/approach capture: [`tunnel-approach-wide.png`](captures/tunnel-approach-wide.png). Mining-yield log: `Saved/Linux/l50/ore-tunnel-export.log`. +- Failed runs: early seeded placements intersected the lower passage-mouth clearance and were rejected before moving the accepted candidate; the final demo passes the forced-clear-passage control. The first medium run caught a renderer shader-scope error, fixed before the clean rebuild and passing medium run. An initial off-angle surface capture was replaced after inspecting the exported material vertices. + +## Orchestrator review (Claude) + +Accepted, off by default. The stamp matches the final Clang and GCC builds (`5f0f3883…`). With veins on, all four geometry hashes are unchanged; only the material hash moves. Demo-off owner hashes are identical to L47. **Paused as a feature** after this slice: the owner made all-generators-at-about-1-s the priority (2026-10-24). diff --git a/Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-approach-wide.png b/Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-approach-wide.png new file mode 100644 index 0000000000000000000000000000000000000000..da12301b5a1bd60868a960a27bfc572a027b2a45 GIT binary patch literal 195833 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 J%r%dc{{X%WwSWKs literal 0 HcmV?d00001 diff --git a/Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-quartz-eye.png b/Standalone/Research/WorldAssemblerM3/Linux50/captures/tunnel-quartz-eye.png new file mode 100644 index 0000000000000000000000000000000000000000..70d14fe7714a9d732c655f0de4a6515938625e77 GIT binary patch literal 128419 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%0A6Xi1N3{ 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

JaRZxsR##+sI8A4}-nt@}Z^URIHDHri2EY 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

&rd;+A;`_Dt&QJhc?kEkSDByXRq ziF>F3M3iKp_6#mKE{fRLSID(m>ZQt=hwuuFfG)-eBk2fA$R)Z$c1uUw-BYX#@@1L~ zR0QX}50RvvYK50+{)kfe)KJ9;qn{^11dNZpK@c-|_NvjRE=*1LL9SPB7?mGz+-9P1 z+mVM{2iQ-C*EC$VGp|slj+64vFc4X)z-q>3-xt0T1x+hBh|CTp&v zi-#NVSYd4`bMo;LI#HNgxHr2LMjy zHjA-_kgl|mTHygf{sB+WDNQAyH{lP0rqSg+7a2kpSHnTyzWu`R30OJxy#SCe zMX&5h&J-C*VD^Ke(xo?eRckUeCw@eFJZpL=4;fMeg-(2rrYG%>KojFG+<*O8wJKk; zX8EMxpAngJPHDVg#ozoy#xG%TPU1?k%$f_pJ&NS_C7(H?J=`y?@gmb9A`so(AVINz zC@46VJUvkM3s1^@c*p_1ZCD>kz{W)~$P%!^ei(5FmXo|V?zr-YH7{-RL@!(&IB~5C z6b$@asu|*HN**v#DAvL z5|q%b;rWZFqu+U_o?q<@4<1l=1bumcb(?$T4sJ3!YV@>`WaL~8v#0r`^(V^Km4+e>;Pewd9#SFVY>2ID>sXV$E?kEOKtC zo(BZI{*%RDTAmW2kJNC@v)=hU{bG;{2@*L-5B{0yJtQ4MN~HfeP`&ffZOZ|SW^?>t ztY^76+4XQ#X2>zkVd6#k)rWvWk0Q2tv>i`?N6cTDk4BK5C?>zJRcf|vOJWD}#^8F} zb-R*E3|x%Fbo1UvIWga*tSbPh)B@L!7_Gr!3flYyIhgIU`7nI=UCTs~&G|%K60udM z830iVfj!OfxBUQFM&P<&)89r2ATgu|u{1`Q$V8;9n#kWa0i>paj^UX9xR^Oe{n7t% zQGt5#esyX7k2cOl`d9yNe+Ni)jFb+ZhcB;(V4!JueM$!%?nSnqvkdHi2aHj~-Sl_2 z3Sc~Gmwz^>Dc)autT`H%EqKA~8?|HgD{_*eeFV?MfK^YobF=N=k535Th1L?SnFOQ- zCW;NyyT1eq9YQI3DnfGOuU<+DYBV0@@Rv4Ps7&|^sMm}|6^ z4M7j*zeo3-T6-fOjBDD+I2+h|Lw2w zdp$J7LBFpo?Y(6W-wzF1;^3wPTZoc}i#s18HTe?ng;V>5^}oZ~?uFrl9-?kDrXnVtJn!UXsJ(DpU@*x87E??d+yDU(cpm?ttROm! z^9Brg3x?XE-j6ODdlTH9tSB&ei^{o_P2&`IjW6ac{L4uiqV9jNX?NGYE5Ijd%J5s1 z4+6+$qK^6#7OnY&us=2alh+oa!D7jO=+U&~t`eg08SdcNlQd8aA`|WzBzG01g0H`Y z+t(q^RS_DukI7^Q--HpvkDe8K*C7oAAdS#=*m5zqas`14w`QCGctX=bRF!<_+GFje z65>#hga9}(*d+jx&$Gl^s?9Q8^=i)5@beUGYyddob0ua_*(ISq*OfZ>5%ynjP~5}hQmLA{^(#+fzj?+R+ zt5qb5sn*qD0jY-u@=F_r4t@8X5yRfP@7BtnNh$;q2aVLw&RO1+{W2(zP2-hMLgN}! z3vB*q0mA%4Y!+8FV))G*a_^mKPp@CF`-s&T7T`|MESbH!ex%;zxtCnX`npSK*1eB4 zKi0_r1kfe|pQ$d(bm*l^NqlZJOdw z&C(Aj4|gJ7m@o{uO>xHURaP$~G)?qn0w6*Qd~W$bLtS(5d8g8a!+CZQi%T6oi_@J? zSH8XI{=@f;0YQ03i{qX7>Uck)ySgP#r9OvCn7bOyD>S>Ber3zklfr3w_?;XD?YWF+ zlLX@=y`zPfLyH|omkG%va1`;a2x-&$)1WCk?tL^u_0^|4aCVZRF~ zEqLELH^c$!4-pMY2np+yUo z#LvjS-cI%V`JAs+0@=oHp)J?1TvAWJL6ais5P(z2g%{y(uFbWft+IsapDOIjO`_61 zCB)WN;?IDsD$SjNUWVe}FauqsN&_7IQ%uw)TJ@7IwdT1O%S6=t?GSl&{od}%I?2ro zdzver>>V@OM+3lxZ}?7>L-w^N6^*pW?0mPx?ry{qM9A291I846YABT28qP~|<4CnN z*?$(6d?J-E6OJ8cRbXnOcxn0LX_J1CyFKvLG?<@g==O^{w7JK2NH*5d`Xr9tjU&pL zhD6XB(Ba}vTGY8;NNgy1ckgb8Onc{pbD4GqSgb>Gu^B%RqvRMCinwC3BaJ8okH zybR^n24;U;s=7u}lwvi9NEgIVowSs)Eq!8{gGSvif4KbHycfGYpA)nsNBCE>IsYfFf&;v7j;xuvGAx{k{C8f9r^sAM3m!?)q}f z=r3x#aB4~7p!;~}Z1AJcn$FFEC1q^)*~!>Ho7D-F=a7MPLzyh5k|eC=T!-$Ky*PWK z%%BrJdV-AomPPMNtzF)e{piWE$R93u((#vuQ|W zW{jZT@9TN3p>rf0KU&ugAt~1iA`tO9xB_9J4Qd6!RpNQ<3u3N{w+9&+tsf@XLvoug zPE0{)!-1+9b3o?45!2%Ham5eU)(;ZwVFp(p&1oJv2eVNn3xE zJDeN6kdt<8ihRvz2T71Y%84v+MxkK@Pv+g#tJYK2-Jepw&H_5K{-8Llc+tvudX^UdI#^=ucQlUN*V5GcWx>69c^=jv3R3|=Fw{Syp z8%epm$TpPH682PSA0AEvs)sN3X6~b(K|&(T75zS2IPQDKI0lP4VAek|HpCGslde?? zGcvWUhs!L@dVhrF&W>2zUCn5M7z`Kjgs*sQA+wM*G&Y)Ui z(%`c$)B@x4)gjaOrOBJZ}p83!n324L2pviOG+`KPP9;}|ZG+XhVW4>C68JML( zA1Oh?MqG7&hB@dIS4CyP%kJDi>c6^fM%>s@0tDLft|=96d6&b@9r3TpG2kS(rut`V zV37_yqt;x@z`8iwm}kB%$6f}fF>3=Hn?+q&)=_$3O>K6MjP1IApWj_tJhbzMlP936 zRInn*&7FIltYoxv+T|(yZxeMV!o3ZfkneNYd#lH<6EkAW3XW(0dEQ_t2Pp2;jC6ax z{Cny5&W4PZRK(AzuD3sjaGWell+c2RV5*8fYG;}HC49%Ar_k1T#CMF_AXo^))jT`2 zzf{$tE^gOdbt;GGO9||LE1)qi;b@&oiyd+Nt z)T#SRc5?OiUk3MtUykUi4W&KrcuP@5|F$F?g{whX%4}O*b8YLVVNN>ACF*=J_7+B{swWoW zWr9{$b#|9be2>p4+$6B3>eH-9=dxTILX~QAChv-c#P`QHf%(a;N-8!ykH~J`j?G-A z$%#+b<~$b-*dy4N-MJ0P%Fq_CMV*7p?ykVr8aI=HPgEQ>R*#i{*1Sng5sCqq@21+F zqA}c0nZ0_{GC|dpL-!jy;%pB~o$<}l@$N-lt>vRkKSg{dmN)_C+e83$W3v|C?Or_F z;Eyw|%j{F_w&)?`dODz7&dTh5gs+#?XH4=Pn=Uaw4IN6?YW$CV^-q78Hq;?GfL+ZAW%{;hr z^|pJb+_=_M#-M#@(bvwpV9-`Ux zlQWjfKWxVTH2uWTZ+*%UnkDS8op*>~@ zwlSejJ)z;>%G%2z>&GeQ*T((gi$*dS%<=p8CKccEUU^Y19N;CeR|yE`-8Ak!em z#Cs)~FXSF28Ss(`sk(?~H-p}Q%Y zq}~2V&CE4J%7v-*FF*(8o?KxB&(Nep+NPdSUj3rTl*6zF?pEFpMrwuxU-aF)_FXh! z@}HTGBu^%P1z(wcsYbNyC@|S6e5R^~Obv&m?Y<))7ak*!MLdzeOn36+ly6PFZ;*6KQA!5d|~HzG}ZU^m7x{h4a%x4fdPiLplAfgyM9BvNZaV0 z=x0^+etMm+?muKS*qs-GT*YKtPpJOcrS?G=#xgof4|O$yLxUr`6OQ%kh1mrWw)W5a z&GuG!o;vGXuVVs#6iSTx9~+@`eE) · [R3 coil analysis]() + +If the mouths, bounds and grade limit admit no route, reject that candidate; keep the 15° limit fixed. + +## Fit with Core and the artifact + +The resolved snapshot already carries cavern rooms and edges, and includes them in canonical layout identity. The current `ResolveResolvedCavernGraphV1` copies supplied positions, derives irregularity seeds and bounds, then validates records; it does not choose room positions or routes. A separate Core planning entry point can produce those records before snapshot finalization. [Snapshot records](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h:945) · [Current resolver](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ResolvedLayoutInternal.h:1294) · [R17 finding](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research17/REPORT.md:13) + +Run planning after passages and stamps are resolved, before `Layout.finalize` and JSON export. `isTileShapeFree` already rejects tiles whose padded bounds touch graph bounds. Keep those bounds conservative: include supports, blends, relief and junctions. The graph tile-list builder currently scans graph feature bounds per tile; a graph BVH would reduce candidate work as networks grow. Keep candidate order stable after the spatial query. [Adapter order](/home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:1259) · [Shape-free proof](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/VoxelForgeCore.cpp:1396) · [Graph tile list](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3431) + +The floor/wall artifact remains unresolved. L47 found sawtooth teeth at the wall foot beyond its floor rails. L48’s rounded-cap trial still failed the whole-surface gate and increased flagged area. L48 describes L49’s next idea—build the bore and floor as one filleted SDF before stamps—but no L49 report or artifact is present in this checkout, so that remains unverified. [L47](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux47/REPORT.md:31) · [L48 results and L49 proposal](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux48/REPORT.md:13) + +For planned rooms and edges, preserve native solid under the walking floor wherever possible; make the floor part of each shape’s profile, with narrow support fallback. Build the floor, bore and rounded wall-foot as one shape. Avoid a hard post-pass floor cap, tangent-only room/edge contact, and wall relief near the walk plane. R16 gives a practical geometric fillet target of at least `2h`, preferably `3h`: at the 25 cm base spacing, 0.5–0.75 m. These are sampling targets, not guarantees; coarse LODs need separate filtering or feature-aware handling. [R16 composition and sizing](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research16/REPORT.md:3) · [Current composition order](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:1787) + +## Verification plan and implementation slices + +- **Graph:** Check endpoint IDs, connectedness, spine reachability, loop counts, room/edge clearance, and mouth joins. Treat links as undirected for reachability; current validation requires an edge’s end ID to name a same-strate room, while its start ID only has to be nonempty. +- **Walkability:** Flood-fill the final composed field from arrival to departure using the project’s player-fit capsule (0.34 m radius × 1.76 m height), support and headroom checks. Graph connectivity alone does not prove a traversable route. [R12 verification guidance](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research12/REPORT.md:51) · [Capsule dimensions](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research1/REPORT.md:10) +- **Geometry and determinism:** Sweep seeds, including tight bounds and maximum mouth-height differences. Check edge grades, ceiling/bedrock clearance, wall-foot defects and floor profiles. Extend the L48 audit from its current one-room/one-edge assumption to all graph surfaces; check LOD0 and transitions. Compare layout, density, mesh and topology hashes across worker counts and reordered inputs. +- **Cost:** Measure planner time separately from tile evaluation. Run five paired graph-off/on views with matching tiles; report total and density time, graph BVH candidates, per-feature evaluations and memory. The current edge evaluator searches the curve per sample, so track cost as room and edge counts rise. No graph-scale cost result is established by this read-only review. +- **Slices:** First, one mandatory spine with one room and no optional links. Second, Poisson room placement and connected branches. Third, loops, graph BVH and the generalized whole-surface audit. Run the seed sweep and paired cost measurements before enabling optional topology. + +**Questions for the owner:** None blocking; the R17 authoring decision settles the main open question. + +Read-only research only; no source edits, builds or tests were made. \ No newline at end of file diff --git a/Standalone/Research/WorldAssemblerM3/Research19/REPORT.md b/Standalone/Research/WorldAssemblerM3/Research19/REPORT.md new file mode 100644 index 0000000..fa0e900 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Research19/REPORT.md @@ -0,0 +1,77 @@ +# R19 — why FloatingIslands costs about 10× + +## Log evidence + +The closest same-view comparison is the unprofiled W12 pair in the L28 logs: [FloatingIslands]() and [SurfaceWorld](). Both generate **2,370 tiles**, including **960 full-detail tiles**. + +| Measure | FloatingIslands | SurfaceWorld | +|---|---:|---:| +| Plan preparation | 222 ms | 41 ms | +| Shape build | 0.891 s | 0.396 s | +| First tile ready | 1.280 s | 0.471 s | +| Near neighborhood ready | 1.556 s | 0.486 s | +| Whole view ready | 18.971 s | 1.867 s | +| Full-detail meshing worker sum | 138.139 s | 2.872 s | +| Full-detail classification worker sum | 98 ms | 9 ms | + +The shape builds have the same 138.2 million nodes and 18,420 primitives. FI’s extra shape time is mostly the surface-band stage (679 ms vs 209 ms); it does not explain the roughly 17 seconds of extra whole-view time. Later five-pair timings also retain about a 10× gap: 16.543 s FI vs 1.530 s SW ([L30 report]()). + +Per-LOD worker sums are aggregate worker time, **not wall time**: + +| LOD | Tiles, both | FI worker sum | SW worker sum | +|---:|---:|---:|---:| +| 0 | 512 | 66.31 s | 1.98 s | +| 1 | 448 | 72.76 s | 1.09 s | +| 2 | 320 | 4.60 s | 1.26 s | +| 3 | 208 | 3.81 s | 1.29 s | +| 4 | 240 | 3.21 s | 2.69 s | +| 5 | 144 | 1.14 s | 1.12 s | +| 6 | 96 | 3.40 s | 2.78 s | +| 7 | 96 | 8.98 s | 1.25 s | +| 8 | 306 | 48.43 s | 3.28 s | + +LOD0–1 accounts for most of the gap: its meshing-exclusive worker time is 138.13 s FI vs 2.87 s SW. LOD7–8 adds another large difference: 57.41 s vs 4.53 s total worker time. FI’s LOD8 log also reports 21.27 s of `column_eval_exclusive_ms`, vs 0.57 s for SW. That counter measures Heightfield2D column computation, **not** the FI island-column cache; the existing baseline logs do not split far-shell work finely enough to assign that cost further. + +FI is mostly air by design, but the logs do not count whole-view empty meshes. They do show FI with **zero whole-tile skips** and **25,536 unknown boxes** in the timed run. A separate L9 proof audit reports **21,504 FI fallback/unknown blocks and zero checked blocks**; SW checked 26,977 blocks / 35.9 million samples with zero violations ([Linux28 proof summary](), [Linux25 summary]()). So the measured problem is clear: FI’s air is not being cheaply certified and skipped. The exact whole-view empty-tile count still needs `--mesh-coverage`. + +## Cost model + +- `FloatingIslandFieldV1::interval` returns unknown whenever a box intersects any island or connector influence AABB; it proves air only outside all those bounds ([`FloatingIslandsInternal.h:interval`](), [`ShapeWorldInternal.h:ClassifyBoxDetailed`]()). Broad bounds therefore leave many actual-air boxes ambiguous. +- The owner plan has four islands. `buildFeatureTileList` disables candidate evaluation for plans of four or fewer, so the standard run does not use its per-tile group bounds to prune those island evaluations ([`FloatingIslandsInternal.h:buildFeatureTileList`](), [`WorldAssemblerInternal.h:find`]()). On the current geometry-v2+ path, each island evaluates five root lobes; four islands mean up to 20 root SDF evaluations per field query, plus connector work ([`IslandDensity` / `FieldDensity`](). +- There is also avoidable repeated work: `DensityAtLatticeX8` calls `NativeFloatingIslandDensityAt` to detect an FI lane, then calls `DensityAtLattice` for each lane, which evaluates the native FI field again. Reusing the preflight result could remove a duplicate evaluation for lanes inside the FI field ([`DensityAtLatticeX8`](), [mesher call site]()). +- The native-only shortcut is SurfaceWorld-only and limited to LOD0. FI is not eligible, but the timed run reports zero shape-free desired tiles for both recipes, so this is not the main cause of this run’s gap ([`NativeOnlyBoundsForTile` / `isTileShapeFree`]()). +- Far work is a real second target: FI’s island plan prevents the native-surface-horizon shortcut from skipping far-shell repair at LOD7+, while ground/cap refinement also runs for LOD4+. The static run’s `--far-horizon-lod8-step=0` does not remove those paths ([`generateTile`]()). Profile the shell and column sub-stages before attributing the LOD8 cost more narrowly. +- Page proofs are not on the static benchmark path: it has no region crossing. Existing page-route audits pass, but they do not explain the static whole-view timing ([`compileTileRegion`](), [Research11]()). + +## Ranked work + +1. **Tight conservative interval bounds, then coarse-to-fine proofs.** Certify empty air blocks outside actual island, helix, column, floor, ceiling and band support; refine only boxes whose bounds cross zero. This has the largest potential gain because it can avoid meshing air. Proof soundness is the main risk: preserve exact sampling for mixed boxes and validate proof audits, appearance and hashes. +2. **Reuse the X8 FI preflight samples.** This is a direct source-level duplication and should be a lower-risk exact-output optimization. It can approach a 2× reduction in FI field work on affected lanes, but cannot by itself reach 1 s. +3. **Use per-tile island-group pruning; add a BVH if plans grow.** First measure the existing group-bound path that the four-island setting currently disables. A new BVH is more useful as island/connector counts rise; for four islands, test the existing certificates first. +4. **Profile and simplify LOD7–8 far-shell work.** It may save seconds, but cannot close the full 10× gap alone; changing LOD8 representation also risks visible horizon changes. +5. **Measure before adding caches.** The shared XY column cache is already present. L7 showed a 19% SW whole-view improvement, while L29’s cache experiment did not improve cost; neither establishes a comparable FI gain ([L7 report]()). +6. **GPU later.** First remove redundant field work and skip proven air. GPU work adds dispatch, transfer and exact-parity costs without fixing loose bounds. + +## Builder measurement plan + +Run five fresh-process W12 timing pairs, alternating recipes, without hashing or profiling: + +```sh +taskset -c 0-11 env LP_NUM_THREADS=12 \ + --world-assembler-prototype --stream-benchmark --stream-pipeline \ + --force-generate --clip-radius=3 --max-clip-level=8 \ + --far-horizon-lod8-step=0 --workers=12 --recipe=floating-islands \ + Standalone/data/owner_world.json +``` + +Repeat with `--recipe=surface-world`. Then profile each recipe separately with `--profile-lod-work --mesh-coverage`; compare per-LOD density samples, MC grid/cell/gradient/interpolation work, shell calls, ground/cap columns, and non-empty mesh tiles. Profiling adds overhead, so use those runs for attribution, not headline timings. The headless parser has no generic `--profile` flag; the relevant switch is `--profile-lod-work` ([`StreamBenchmarkHeadless.cpp`]()). Heightfield column counters do not expose FI’s `IslandColumnCache` hits; use the stack sample or add a focused diagnostic for island-cache hits/misses and root/connector evaluations if needed. + +For proof coverage, rerun without `--force-generate` and add `--audit-uniform-block-proofs --mesh-coverage`; `--force-generate` disables the block audit. For travel, add `--camera-step=8,0,0` and then `--camera-step=24,0,0`, with `--profile-lod-work`. Compare entering-tile count, completion count, wall time, per-LOD work and queue backlog. Existing moving output is aggregate; smoothness also needs per-entering-tile queue wait and submit-to-complete p50/p95 latency. + +For hotspot stacks, run the same unprofiled FI and SW commands under `perf record -F 99 -g --call-graph dwarf`, then inspect with `perf report --stdio --sort symbol`. Treat this as hotspot evidence, not a timing comparison; `perf-record(1)` documents the call-graph modes ([manual](https://man7.org/linux/man-pages/man1/perf-record.1.html)). + +## What ≤1 s requires + +FI needs roughly a **94% wall-time reduction** from 16–18 s; the 12-worker LOD totals in the reference log are about 213 worker-seconds, versus roughly 12 worker-seconds for an ideal one-second budget. SW also needs about a 40% reduction from the owner’s 1.7–1.8 s. A cold FI shape build alone took 0.89 s in the reference run, so strict sub-second whole-view generation also requires reducing or overlapping shape work. + +For VR and fast travel, measure the near ring and newly entering tiles separately from completion of all 2,370 view tiles. Prioritize nearby work and let far LODs refine asynchronously; validate 8 m and 24 m movement, deterministic hashes across worker/compiler configurations, and tail tile latency. No edits, builds or binaries were run for this report. \ No newline at end of file diff --git a/Standalone/Source/LinuxOffscreenCapture.cpp b/Standalone/Source/LinuxOffscreenCapture.cpp index 03a2a3d..ec306a5 100644 --- a/Standalone/Source/LinuxOffscreenCapture.cpp +++ b/Standalone/Source/LinuxOffscreenCapture.cpp @@ -34,6 +34,7 @@ namespace float Height; float WorldPosition[3]; float TileData[4]; + float Material[4]{}; }; struct FScene @@ -121,11 +122,12 @@ namespace if(!File){Error="cannot open mesh scene";return false;} char Magic[8]{}; File.read(Magic,sizeof(Magic)); - if(!File||std::memcmp(Magic,"VFMSH001",8)!=0) + const bool HasMaterials=File&&std::memcmp(Magic,"VFMSH002",8)==0; + if(!File||(!HasMaterials&&std::memcmp(Magic,"VFMSH001",8)!=0)) {Error="mesh scene magic is invalid";return false;} std::uint32_t Version=0,ExpectedTiles=0; if(!Read(File,Version)||!Read(File,Scene.VoxelSizeMicrons)||!Read(File,ExpectedTiles) - ||Version!=1||Scene.VoxelSizeMicrons==0||ExpectedTiles>1000000) + ||Version!=(HasMaterials?2u:1u)||Scene.VoxelSizeMicrons==0||ExpectedTiles>1000000) {Error="mesh scene header is malformed";return false;} for(double& Value:Scene.CameraMeters)if(!Read(File,Value)) {Error="mesh scene camera is truncated";return false;} @@ -161,6 +163,19 @@ namespace Scene.MinimumHeight=std::min(Scene.MinimumHeight,Scene.Vertices[I].Height); Scene.MaximumHeight=std::max(Scene.MaximumHeight,Scene.Vertices[I].Height); } + if(HasMaterials) + for(std::size_t I=Base;I(Ids[0]); + Scene.Vertices[I].Material[1]=static_cast(Weights[0])/65535.0f; + Scene.Vertices[I].Material[2]=static_cast(Ids[1]); + Scene.Vertices[I].Material[3]=static_cast(Weights[1])/65535.0f; + (void)Host; + } const double TileVoxels=static_cast(32u<(TileVoxels *static_cast(Scene.VoxelSizeMicrons)/1000000.0); @@ -540,10 +555,12 @@ layout(location=1) in vec3 inNormal; layout(location=2) in float inHeight; layout(location=3) in vec3 inWorldPosition; layout(location=4) in vec4 inTileData; +layout(location=5) in vec4 inMaterial; out vec3 vNormal; out float vHeight; out vec3 vWorldPosition; out vec4 vTileData; +out vec4 vMaterial; uniform float uTanHalfHorizontal; uniform float uTanHalfVertical; uniform float uNear; @@ -558,6 +575,7 @@ void main() vHeight=inHeight; vWorldPosition=inWorldPosition; vTileData=inTileData; + vMaterial=inMaterial; })GLSL"; static constexpr char FragmentSource[]=R"GLSL(#version 300 es precision highp float; @@ -565,6 +583,7 @@ in vec3 vNormal; in float vHeight; in vec3 vWorldPosition; in vec4 vTileData; +in vec4 vMaterial; out vec4 outColor; uniform int uReadableMode; uniform int uTileEdges; @@ -582,6 +601,7 @@ void main() if(uClipEnabled!=0&&dot(vec4(vWorldPosition,1.0),uClipPlane)<0.0)discard; vec3 n=normalize(vNormal); vec3 color; + float illumination=1.0; if(uReadableMode==0) { vec3 normalColor=abs(n)*0.78+vec3(0.12); @@ -597,10 +617,32 @@ void main() ?mix(vec3(0.62,0.78,1.0),vec3(1.0,0.82,0.62),smoothHeightT) :vec3(1.0); float diffuse=max(dot(n,normalize(uLightDirection)),0.0); - float illumination=uGrazingLight!=0?0.32+1.20*diffuse: + illumination=uGrazingLight!=0?0.32+1.20*diffuse: uHeadlamp!=0?0.78+0.34*diffuse:0.62+0.38*diffuse; color=vec3(0.64,0.62,0.56)*heightTint*illumination; } + if(uReadableMode!=0) + { + vec3 resourceColor=vec3(0.0); + float resourceWeight=0.0; + if(vMaterial.x>0.5) + { + float w=clamp(vMaterial.y,0.0,1.0); + vec3 oreColor=vMaterial.x<1.5?vec3(0.94,0.36,0.12): + vMaterial.x<2.5?vec3(0.20,0.48,0.92):vec3(0.25,0.88,0.84); + resourceColor+=oreColor*w;resourceWeight+=w; + } + if(vMaterial.z>0.5) + { + float w=clamp(vMaterial.w,0.0,1.0); + vec3 oreColor=vMaterial.z<1.5?vec3(0.94,0.36,0.12): + vMaterial.z<2.5?vec3(0.20,0.48,0.92):vec3(0.25,0.88,0.84); + resourceColor+=oreColor*w;resourceWeight+=w; + } + if(resourceWeight>0.0) + color=mix(color,resourceColor/max(resourceWeight,0.001), + clamp(resourceWeight,0.0,0.95))*illumination; + } if(uTileEdges!=0&&vTileData.z>0.0) { vec2 local=mod(vWorldPosition.xy-vTileData.xy,vTileData.z); @@ -749,6 +791,8 @@ void main() reinterpret_cast(offsetof(FVertex,WorldPosition))); glEnableVertexAttribArray(4);glVertexAttribPointer(4,4,GL_FLOAT,GL_FALSE,sizeof(FVertex), reinterpret_cast(offsetof(FVertex,TileData))); + glEnableVertexAttribArray(5);glVertexAttribPointer(5,4,GL_FLOAT,GL_FALSE,sizeof(FVertex), + reinterpret_cast(offsetof(FVertex,Material))); glViewport(0,0,Width,Height);glDisable(GL_CULL_FACE);glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);glClearColor(0.035f,0.055f,0.075f,1.0f); glClearDepthf(1.0f);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); diff --git a/Standalone/Source/StreamBenchmarkHeadless.cpp b/Standalone/Source/StreamBenchmarkHeadless.cpp index 35c8717..6dd3811 100644 --- a/Standalone/Source/StreamBenchmarkHeadless.cpp +++ b/Standalone/Source/StreamBenchmarkHeadless.cpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace { @@ -57,6 +58,8 @@ namespace bool FloatingIslandsRecipe=false; bool LandmarkChamberDemo=false; bool LandmarkL45RampControl=false; + bool OreVeinsDemo=false; + bool AuditOreVeinYield=false; bool AuditLandmarkReachability=false; bool TlsProbeRequested=false; int TlsProbeWorkers=0; @@ -620,6 +623,138 @@ namespace return true; } + bool MakeOreVeinDemoRequests( + const VoxelForgeCore::ResolvedLayoutSnapshotV3& layout, + std::vector& requests, + std::string& error) + { + using namespace VoxelForgeCore; + requests.clear(); + const auto surface=std::find_if(layout.strates.begin(),layout.strates.end(), + [](const auto& value){return value.generatorKind=="SurfaceWorld";}); + if(surface==layout.strates.end()||layout.coreVoxelSizeMicrometres==0) + {error="ore-vein demo needs a SurfaceWorld strate";return false;} + constexpr double Q=static_cast(WorldAssemblySubvoxelsPerVoxel); + const double coreMicrometres=layout.coreVoxelSizeMicrometres; + const auto addCapsule=[&](std::string id,std::uint16_t resourceId, + std::array base,std::array tangent, + std::array side,double routeClearRadius, + std::int64_t radius,std::int64_t irregularity,std::int64_t blend, + std::int64_t length) + { + const auto normalize=[](std::array& value) + { + const double length=std::sqrt(value[0]*value[0]+value[1]*value[1] + +value[2]*value[2]); + if(length<=1.0e-9)return false; + for(double& component:value)component/=length; + return true; + }; + if(!normalize(tangent))return false; + const double sideLength=std::sqrt(side[0]*side[0]+side[1]*side[1]); + if(sideLength<=1.0e-9)return false; + side[0]/=sideLength;side[1]/=sideLength; + const double offset=routeClearRadius+radius+irregularity+200000.0; + base[0]+=side[0]*offset;base[1]+=side[1]*offset; + ResolvedLayoutOreVeinRequestV1 request; + request.stableId=std::move(id);request.strateIndex=surface->strateIndex; + request.resourceMaterialId=resourceId;request.placementRadiusMicrometres=1500000; + request.radiusMicrometres=radius; + request.irregularityAmplitudeMicrometres=irregularity; + request.irregularityWavelengthMicrometres=1400000; + request.blendWidthMicrometres=blend; + for(std::size_t axis=0;axis<3;++axis) + { + const double half=static_cast(length)*0.5*tangent[axis]; + request.anchorEndpointsMicrometres[0][axis]=static_cast( + std::llround(base[axis]-half)); + request.anchorEndpointsMicrometres[1][axis]=static_cast( + std::llround(base[axis]+half)); + } + requests.push_back(std::move(request));return true; + }; + std::vector route; + for(const auto& anchor:surface->anchors) + if(anchor.kind=="route_point"&&anchor.values.size()>=3)route.push_back(&anchor); + if(route.size()<12) + {error="ore-vein demo needs at least twelve resolved SurfaceWorld route points";return false;} + const auto routePoint=[&](const ResolvedLayoutAnchorV2& anchor) + { + return std::array{ + anchor.values[0]*coreMicrometres/Q, + anchor.values[1]*coreMicrometres/Q, + anchor.values[2]*coreMicrometres/Q}; + }; + const auto routeRadius=[&](const ResolvedLayoutAnchorV2& anchor) + { + return anchor.values.size()>=4?anchor.values[3]*coreMicrometres/Q:0.0; + }; + for(const auto [pointIndex,id,resourceId,sideSign]:{ + std::tuple{7, + "ore/sw-arrival-route-copper-v1",1,1.0}, + std::tuple{10, + "ore/sw-arrival-route-cobalt-v1",2,-1.0}}) + { + const auto a=routePoint(*route[pointIndex]); + const auto b=routePoint(*route[pointIndex+1]); + std::array tangent={b[0]-a[0],b[1]-a[1],b[2]-a[2]}; + std::array side={-tangent[1]*sideSign,tangent[0]*sideSign,0.0}; + std::array center={(a[0]+b[0])*0.5,(a[1]+b[1])*0.5, + (a[2]+b[2])*0.5}; + const double clearance=std::max(routeRadius(*route[pointIndex]), + routeRadius(*route[pointIndex+1])); + if(!addCapsule(id,resourceId,center,tangent,side,clearance, + resourceId==1?650000:750000,100000,600000,2500000)) + {error="ore-vein route capsule has a degenerate tangent";return false;} + } + const auto edge=std::find_if(layout.cavernEdges.begin(),layout.cavernEdges.end(), + [&](const auto& value){return value.strateIndex==surface->strateIndex;}); + if(edge!=layout.cavernEdges.end()) + { + constexpr double t=0.12,one=1.0-t; + const std::array weights={one*one*one,3.0*one*one*t, + 3.0*one*t*t,t*t*t}; + const std::array derivative={-3.0*one*one, + 3.0*one*one-6.0*one*t,6.0*one*t-3.0*t*t,3.0*t*t}; + std::array center{},tangent{}; + for(std::size_t control=0;control<4;++control) + for(std::size_t axis=0;axis<3;++axis) + { + const double point=edge->controlPointsMicrometres[control][axis]; + center[axis]+=weights[control]*point; + tangent[axis]+=derivative[control]*point; + } + center[2]+=edge->boreHeightMicrometres*0.5; + // The room lies west of the entry tangent; use the east wall for the + // approach outcrop so its conservative bounds stay outside the room. + std::array side={tangent[1],-tangent[0],0.0}; + const double wallOffset=edge->boreRadiusMicrometres+800000.0+100000.0+200000.0; + const double sideLength=std::sqrt(side[0]*side[0]+side[1]*side[1]); + if(sideLength>1.0e-9) + {side[0]*=wallOffset/sideLength;side[1]*=wallOffset/sideLength;} + ResolvedLayoutOreVeinRequestV1 request; + request.stableId="ore/sw-chamber-approach-quartz-v1"; + request.strateIndex=surface->strateIndex;request.resourceMaterialId=3; + request.placementRadiusMicrometres=1000000; + request.radiusMicrometres=800000; + request.irregularityAmplitudeMicrometres=100000; + request.irregularityWavelengthMicrometres=1800000; + request.blendWidthMicrometres=600000; + for(std::size_t axis=0;axis<3;++axis) + { + const double half=1250000.0*tangent[axis] + /std::sqrt(tangent[0]*tangent[0]+tangent[1]*tangent[1] + +tangent[2]*tangent[2]); + request.anchorEndpointsMicrometres[0][axis]=static_cast( + std::llround(center[axis]+side[axis]-half)); + request.anchorEndpointsMicrometres[1][axis]=static_cast( + std::llround(center[axis]+side[axis]+half)); + } + requests.push_back(std::move(request)); + } + return true; + } + bool OverrideTransitions(VFJson::Value& root,int mode,int widthChunks,std::string& error) { auto* object=std::get_if(&root.Data); @@ -674,6 +809,8 @@ namespace " --profile-column-overlap --far-horizon-lod8-step=N --force-generate\n" " --seed=N --recipe=surface-world|floating-islands\n" " --landmark-chamber-demo (opt-in SW cavern room and swept tunnel)\n" + " --ore-veins-demo (opt-in material-only SW capsule veins)\n" + " --audit-ore-vein-yield (measure one deterministic sphere carve)\n" " --landmark-l45-ramp-control (use the buried L45 stamp geometry as an audit control)\n" " --resolved-layout-output=FILE (canonical plan-time layout snapshot)\n" " --resolved-layout-only (exit after plan and snapshot validation)\n" @@ -744,6 +881,8 @@ namespace } else if(arg=="--landmark-chamber-demo")options.LandmarkChamberDemo=true; else if(arg=="--landmark-l45-ramp-control")options.LandmarkL45RampControl=true; + else if(arg=="--ore-veins-demo")options.OreVeinsDemo=true; + else if(arg=="--audit-ore-vein-yield")options.AuditOreVeinYield=true; else if(arg.starts_with("--resolved-layout-output=")) options.ResolvedLayoutOutputPath=std::string(arg.substr(std::string_view("--resolved-layout-output=").size())); else if(arg.starts_with("--seed=")) @@ -828,6 +967,8 @@ namespace {std::fprintf(stderr,"--region-crossing requires --camera-step=X,Y,Z\n");return false;} if(options.LandmarkL45RampControl&&!options.LandmarkChamberDemo) {std::fprintf(stderr,"--landmark-l45-ramp-control requires --landmark-chamber-demo\n");return false;} + if(options.AuditOreVeinYield&&!options.OreVeinsDemo) + {std::fprintf(stderr,"--audit-ore-vein-yield requires --ore-veins-demo\n");return false;} if(options.TlsProbeRequested)return true; if(!options.WorldAssemblerPrototype||!options.StreamBenchmark||!options.StreamPipeline) { @@ -969,6 +1110,43 @@ int main(int argc,char** argv) resolvedLayout.cavernRooms.size(),resolvedLayout.cavernEdges.size(), resolvedLayout.stamps.size(),resolvedLayout.cavernGraphVocabularyVersion); } + if(options.OreVeinsDemo) + { + std::vector requests; + if(!MakeOreVeinDemoRequests(resolvedLayout,requests,error) + ||!VoxelForgeCore::ResolveResolvedLayoutOreVeinsV1( + resolvedLayout,seed,requests,error)) + {std::fprintf(stderr,"Ore-vein demo resolution failed: %s\n",error.c_str());return 2;} + const auto audit=VoxelForgeCore::AuditResolvedLayoutOreVeinPlacementV1(resolvedLayout); + std::printf("[ResolvedOreVeinPlacementAudit] vocabulary=%u records=%zu forced_clear_passage=rejected controls=%u/%u status=%s\n", + resolvedLayout.oreVeinVocabularyVersion,resolvedLayout.oreVeins.size(), + audit.negativeControlsRejected,audit.negativeControlsRun, + audit.passed?"PASS":"FAIL"); + if(!audit.passed) + {std::fprintf(stderr,"Resolved ore-vein placement negative control failed.\n");return 2;} + for(const auto& vein:resolvedLayout.oreVeins) + std::printf("[ResolvedOreVein] id=%s strate=%d resource=%u shape=capsule endpoints_m=(%.3f,%.3f,%.3f)->(%.3f,%.3f,%.3f) radius_m=%.2f irregularity_m=%.2f/%.2f blend_m=%.2f bounds_um=[%lld,%lld)x[%lld,%lld)x[%lld,%lld) seed=%llu\n", + vein.stableId.c_str(),vein.strateIndex,vein.resourceMaterialId, + vein.endpointsMicrometres[0][0]/1000000.0, + vein.endpointsMicrometres[0][1]/1000000.0, + vein.endpointsMicrometres[0][2]/1000000.0, + vein.endpointsMicrometres[1][0]/1000000.0, + vein.endpointsMicrometres[1][1]/1000000.0, + vein.endpointsMicrometres[1][2]/1000000.0, + vein.radiusMicrometres/1000000.0, + vein.irregularityAmplitudeMicrometres/1000000.0, + vein.irregularityWavelengthMicrometres/1000000.0, + vein.blendWidthMicrometres/1000000.0, + static_cast(vein.boundsMinimumMicrometres[0]), + static_cast(vein.boundsMaximumMicrometres[0]), + static_cast(vein.boundsMinimumMicrometres[1]), + static_cast(vein.boundsMaximumMicrometres[1]), + static_cast(vein.boundsMinimumMicrometres[2]), + static_cast(vein.boundsMaximumMicrometres[2]), + static_cast(vein.irregularitySeed)); + std::printf("[ResolvedOreVeinDemo] enabled=true seed=%d records=%zu stable_seed=seed,strate,stable_id placement=side-pocket-and-chamber-approach geometry_changes=0 status=PASS\n", + seed,resolvedLayout.oreVeins.size()); + } const std::string layoutJson=resolvedLayout.ToJson(); const auto roundTrip=VoxelForgeCore::ResolvedLayoutSnapshotV3::FromJson(layoutJson,error); if(!roundTrip||roundTrip->ToJson()!=layoutJson||roundTrip->stableIdentity!=resolvedLayout.stableIdentity) @@ -1240,5 +1418,6 @@ int main(int argc,char** argv) options.DiagnosticSlowShapeCompileMs,options.AuditBasePageEquivalence, options.AuditRouteParity,options.AuditResolvedLayoutBoundaries, options.AuditResolvedLayoutPassages,options.AuditStrateTransitions, - &resolvedLayout,options.StreamHashTiles,options.AuditLandmarkReachability); + &resolvedLayout,options.StreamHashTiles,options.AuditLandmarkReachability, + options.AuditOreVeinYield); } diff --git a/Standalone/Source/StreamBenchmarkPipeline.h b/Standalone/Source/StreamBenchmarkPipeline.h index 7e55c0c..0b3187c 100644 --- a/Standalone/Source/StreamBenchmarkPipeline.h +++ b/Standalone/Source/StreamBenchmarkPipeline.h @@ -808,6 +808,7 @@ namespace StandaloneStreamBenchmark { std::ofstream File; bool bGood=true; + bool bIncludeMaterialAttributes=false; std::uint32_t TileCount=0; template void Write(const T& Value) @@ -818,7 +819,7 @@ namespace StandaloneStreamBenchmark bool Open(const std::filesystem::path& Path,std::uint32_t VoxelSizeMicrons, const FVector& CameraVoxels,float YawDegrees,float PitchDegrees, - std::uint32_t ExpectedTiles) + std::uint32_t ExpectedTiles,bool IncludeMaterialAttributes) { std::error_code Error; if(!Path.parent_path().empty()) @@ -826,9 +827,11 @@ namespace StandaloneStreamBenchmark if(Error)return false; File.open(Path,std::ios::binary|std::ios::trunc); if(!File)return false; - constexpr char Magic[8]={'V','F','M','S','H','0','0','1'}; + bIncludeMaterialAttributes=IncludeMaterialAttributes; + const char Magic[8]={'V','F','M','S','H','0','0', + static_cast(bIncludeMaterialAttributes?'2':'1')}; File.write(Magic,sizeof(Magic)); - const std::uint32_t Version=1; + const std::uint32_t Version=bIncludeMaterialAttributes?2u:1u; Write(Version);Write(VoxelSizeMicrons);Write(ExpectedTiles); const double MicronsToMeters=static_cast(VoxelSizeMicrons)/1000000.0; const double Camera[3]={CameraVoxels.X*MicronsToMeters, @@ -855,6 +858,13 @@ namespace StandaloneStreamBenchmark for(const float Value:Vertex.Position)Write(Value); for(const FStandaloneCpuVertex& Vertex:Tile.Vertices) for(const float Value:Vertex.Normal)Write(Value); + if(bIncludeMaterialAttributes) + for(const FStandaloneCpuVertex& Vertex:Tile.Vertices) + { + Write(Vertex.HostMaterialId); + for(const std::uint16_t id:Vertex.ResourceMaterialIds)Write(id); + for(const std::uint16_t weight:Vertex.ResourceWeightsQ16)Write(weight); + } if(IndexCount) File.write(reinterpret_cast(Tile.Indices.data()), static_cast(sizeof(std::uint32_t)*Tile.Indices.size())); @@ -1097,7 +1107,8 @@ namespace StandaloneStreamBenchmark bool bAuditResolvedLayoutPassages=false, bool bAuditStrateTransitions=false, const VoxelForgeCore::ResolvedLayoutSnapshotV3* ResolvedLayout=nullptr, - bool bPrintTileHashes=false,bool bAuditLandmarkReachability=false) + bool bPrintTileHashes=false,bool bAuditLandmarkReachability=false, + bool bAuditOreVeinYield=false) { using Clock=std::chrono::steady_clock; FStandaloneOwnerWorld& World=*OwnerWorld; @@ -1282,6 +1293,65 @@ namespace StandaloneStreamBenchmark Streamer.Stop(); std::fprintf(stderr,"[StreamPipeline] full shape build failed: %s\n",BuildError.c_str());return 2; } + if(bAuditOreVeinYield) + { + if(!ResolvedLayout||ResolvedLayout->oreVeins.empty()) + {std::fprintf(stderr,"[OreMiningYield] missing resolved ore-vein records\n");return 2;} + const auto vein=std::find_if(ResolvedLayout->oreVeins.begin(), + ResolvedLayout->oreVeins.end(),[](const auto& value) + {return value.stableId.find("arrival-route-copper")!=std::string::npos;}); + const auto& selected=vein==ResolvedLayout->oreVeins.end() + ?ResolvedLayout->oreVeins.front():*vein; + const auto micrometresToVoxel=[&](const std::array& point) + { + const double size=static_cast(World.CoreVoxelSizeMicrons); + return VoxelForgeCore::Vec3d{point[0]/size,point[1]/size,point[2]/size}; + }; + const std::array editCenterMicrometres={ + (selected.endpointsMicrometres[0][0]+selected.endpointsMicrometres[1][0])/2, + (selected.endpointsMicrometres[0][1]+selected.endpointsMicrometres[1][1])/2, + (selected.endpointsMicrometres[0][2]+selected.endpointsMicrometres[1][2])/2}; + const VoxelForgeCore::Vec3d editCenter=micrometresToVoxel(editCenterMicrometres); + const auto mined=Shape.measureOreMiningYieldForSphere(editCenter,1.25,0.25); + std::uint64_t weightedSamples=0;double resourceVolume=0.0; + for(const auto& resource:mined.resources) + {weightedSamples+=resource.weightedSamplesQ16;resourceVolume+=resource.volumeCubicMetres;} + const bool yieldPassed=weightedSamples>0&&resourceVolume>0.0; + std::printf("[OreMiningYield] edit=sphere record=%s center_voxel=(%.3f,%.3f,%.3f) radius_m=1.250 resolution_m=%.3f removed_solid_samples=%llu resource_volume_m3=%.6f status=%s\n", + selected.stableId.c_str(),editCenter.x,editCenter.y,editCenter.z, + mined.sampleSpacingMetres,static_cast(mined.solidSamplesRemoved), + resourceVolume,yieldPassed?"PASS":"FAIL"); + for(const auto& resource:mined.resources) + std::printf("[OreMiningYieldResource] id=%u volume_m3=%.6f weighted_samples_q16=%llu\n", + resource.resourceMaterialId,resource.volumeCubicMetres, + static_cast(resource.weightedSamplesQ16)); + VoxelForgeCore::Vec3d airCenter{}; + if(!ResolvedLayout->cavernEdges.empty()) + { + const auto& edge=ResolvedLayout->cavernEdges.front(); + airCenter=micrometresToVoxel(edge.controlPointsMicrometres[0]); + airCenter.z+=edge.boreHeightMicrometres*0.5 + /static_cast(World.CoreVoxelSizeMicrons); + } + else if(!ResolvedLayout->passages.empty()) + { + const auto& mouth=ResolvedLayout->passages.front().lowerMouthSubvoxels; + const double divisor=static_cast( + VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel); + airCenter={mouth[0]/divisor,mouth[1]/divisor,mouth[2]/divisor}; + } + const auto air=Shape.measureOreMiningYieldForSphere(airCenter,1.0,0.25); + std::uint64_t airWeightedSamples=0; + double airResourceVolume=0.0; + for(const auto& resource:air.resources) + {airWeightedSamples+=resource.weightedSamplesQ16;airResourceVolume+=resource.volumeCubicMetres;} + const bool airPassed=airWeightedSamples==0&&airResourceVolume==0.0; + std::printf("[OreMiningYieldControl] case=already-air center_voxel=(%.3f,%.3f,%.3f) radius_m=1.000 resolution_m=0.250 removed_solid_samples=%llu resource_volume_m3=%.6f status=%s\n", + airCenter.x,airCenter.y,airCenter.z, + static_cast(air.solidSamplesRemoved), + airResourceVolume,airPassed?"PASS":"FAIL"); + if(!yieldPassed||!airPassed)return 14; + } if(bAuditLandmarkReachability) { Streamer.Stop(); @@ -3956,7 +4026,8 @@ namespace StandaloneStreamBenchmark { bSceneExportPassing=SceneExport.Open(MeshExportPath,World.CoreVoxelSizeMicrons, CameraPositionVoxels,CameraYawDegrees,CameraPitchDegrees, - static_cast(Update.DesiredTiles)); + static_cast(Update.DesiredTiles), + ResolvedLayout&&!ResolvedLayout->oreVeins.empty()); if(!bSceneExportPassing) { Streamer.Stop(); @@ -3966,7 +4037,9 @@ namespace StandaloneStreamBenchmark } } - std::vector DensityRows,MeshRows,PayloadRows,TopologyRows; + std::vector DensityRows,MeshRows,PayloadRows,TopologyRows,MaterialRows; + std::uint64_t MaterialQueries=0,MaterialCandidateChecks=0,MaterialOutsideTiles=0; + double MaterialQueryMilliseconds=0.0; int32 Finished=0,NeighborhoodFinished=0,FullDetailFinished=0; int32 FullDetailExpected=0; uint64 WholeNonEmptyMeshTiles=0,WholeTriangleCount=0; @@ -4197,12 +4270,17 @@ namespace StandaloneStreamBenchmark NativeColumnComputeMilliseconds+=Tile.CoreDiagnostics.columnComputeMilliseconds; NativeMeshingMilliseconds+=Tile.CoreDiagnostics.meshingMilliseconds; } + MaterialQueries+=Tile.CoreDiagnostics.materialQueries; + MaterialCandidateChecks+=Tile.CoreDiagnostics.materialCandidateChecks; + MaterialOutsideTiles+=Tile.CoreDiagnostics.materialTileOutsideEveryVein?1u:0u; + MaterialQueryMilliseconds+=Tile.CoreDiagnostics.materialQueryMilliseconds; if(bHashDensity) { if(Tile.bHasDensityHash)DensityRows.push_back({Tile.Key,Tile.DensityHash}); if(Tile.bHasMeshHash)MeshRows.push_back({Tile.Key,Tile.MeshHash}); if(Tile.bHasPayloadHash)PayloadRows.push_back({Tile.Key,Tile.PayloadHash}); if(Tile.bHasTopologyHash)TopologyRows.push_back({Tile.Key,Tile.TopologyHash}); + if(Tile.bHasMaterialHash)MaterialRows.push_back({Tile.Key,Tile.MaterialHash}); } } if(!bFirstTileReported&&FirstTileReady.time_since_epoch().count()!=0) @@ -4580,6 +4658,11 @@ namespace StandaloneStreamBenchmark static_cast(NativeColumnMisses), NativeColumnComputeMilliseconds,NativeClassificationMilliseconds, NativeMeshingMilliseconds); + std::printf("[MaterialQueryCost] queries=%llu candidate_checks=%llu outside_vein_tiles=%llu tiles=%d elapsed_ms=%.3f outside_query_ms=0 status=%s\n", + static_cast(MaterialQueries), + static_cast(MaterialCandidateChecks), + static_cast(MaterialOutsideTiles),Finished, + MaterialQueryMilliseconds,MaterialQueries==0?"zero":"measured"); if(bAuditUniformBlockProofs) std::printf("[UniformBlockProofAudit] checked_blocks=%llu checked_samples=%llu fallback_blocks=%llu unknown_blocks=%llu violations=%llu\n", static_cast(BlockProofBlocksChecked), @@ -4594,7 +4677,8 @@ namespace StandaloneStreamBenchmark bHashesPassing=DensityRows.size()==Desired.Tiles.size() &&MeshRows.size()==Desired.Tiles.size() &&PayloadRows.size()==Desired.Tiles.size() - &&TopologyRows.size()==Desired.Tiles.size(); + &&TopologyRows.size()==Desired.Tiles.size() + &&MaterialRows.size()==Desired.Tiles.size(); if(bPrintTileHashes) { const auto makeHashIndex=[](const std::vector& rows) @@ -4607,6 +4691,7 @@ namespace StandaloneStreamBenchmark const auto MeshIndex=makeHashIndex(MeshRows); const auto PayloadIndex=makeHashIndex(PayloadRows); const auto TopologyIndex=makeHashIndex(TopologyRows); + const auto MaterialIndex=makeHashIndex(MaterialRows); const auto findHash=[](const auto& index,const FVoxelTileKey& key) { const auto found=index.find(key); @@ -4619,6 +4704,10 @@ namespace StandaloneStreamBenchmark static_cast(findHash(MeshIndex,row.Key)), static_cast(findHash(PayloadIndex,row.Key)), static_cast(findHash(TopologyIndex,row.Key))); + for(const FHashedTile& row:MaterialRows) + std::printf("[PipelineTileMaterialHash] lod=%d x=%d y=%d z=%d material=0x%016llx\n", + row.Key.Level,row.Key.Coord.X,row.Key.Coord.Y,row.Key.Coord.Z, + static_cast(row.Hash)); } std::vector FullDensity,FullMesh,FullPayload,FullTopology; for(const FHashedTile& Row:DensityRows)if(Row.Key.Level(HashTileRows(MeshRows)), static_cast(HashTileRows(PayloadRows)), static_cast(HashTileRows(TopologyRows))); + std::printf("[PipelineMaterialHash] tiles=%zu material=0x%016llx\n", + MaterialRows.size(),static_cast(HashTileRows(MaterialRows))); for(std::size_t LOD=0;LOD& Rows) diff --git a/Standalone/Source/StreamingWorld.h b/Standalone/Source/StreamingWorld.h index b27dd7e..3ea89e7 100644 --- a/Standalone/Source/StreamingWorld.h +++ b/Standalone/Source/StreamingWorld.h @@ -60,6 +60,8 @@ struct FStandaloneCpuTile bool bHasPayloadHash=false; uint64 TopologyHash=14695981039346656037ull; bool bHasTopologyHash=false; + uint64 MaterialHash=14695981039346656037ull; + bool bHasMaterialHash=false; bool bGenerationFailed=false; uint64 MeshPayloadAllocatedBytes=0; VoxelForgeCore::TileGenerationStats CoreDiagnostics{}; @@ -846,15 +848,18 @@ private: Out.MeshPayloadAllocatedBytes=Result->meshPayloadAllocatedBytes; Out.DensityHash=Result->densityHash;Out.MeshHash=Result->meshHash; Out.PayloadHash=Result->payloadHash;Out.TopologyHash=Result->topologyHash; + Out.MaterialHash=Result->materialHash; Out.bHasDensityHash=Result->hasDensityHash;Out.bHasMeshHash=Result->hasMeshHash; Out.bHasPayloadHash=Result->hasPayloadHash;Out.bHasTopologyHash=Result->hasTopologyHash; + Out.bHasMaterialHash=Result->hasMaterialHash; Out.Vertices.reserve(Result->vertices.size()); for(const auto& Vertex:Result->vertices) Out.Vertices.push_back({ {static_cast(Vertex.position.x*0.01),static_cast(Vertex.position.y*0.01), static_cast(Vertex.position.z*0.01)}, {static_cast(Vertex.normal.x),static_cast(Vertex.normal.y), - static_cast(Vertex.normal.z)}}); + static_cast(Vertex.normal.z)}, + Vertex.hostMaterialId,Vertex.resourceMaterialIds,Vertex.resourceWeightsQ16}); Out.Indices=std::move(Result->indices); Out.TriangleSkirtFaceMasks=std::move(Result->skirtFaceMasks); if(bProfile) diff --git a/Standalone/Source/WorldMesher.h b/Standalone/Source/WorldMesher.h index d344f88..43fb5c0 100644 --- a/Standalone/Source/WorldMesher.h +++ b/Standalone/Source/WorldMesher.h @@ -5,10 +5,19 @@ #include "VoxelMarchingCubesMesher.h" #include +#include #include +#include #include -struct FStandaloneCpuVertex { float Position[3]; float Normal[3]; }; +struct FStandaloneCpuVertex +{ + float Position[3]; + float Normal[3]; + std::uint16_t HostMaterialId=1; + std::array ResourceMaterialIds{}; + std::array ResourceWeightsQ16{}; +}; struct FStandaloneCpuLevel { diff --git a/Standalone/Tools/verify/verify.py b/Standalone/Tools/verify/verify.py index 8c6739e..15b504b 100644 --- a/Standalone/Tools/verify/verify.py +++ b/Standalone/Tools/verify/verify.py @@ -56,6 +56,9 @@ TILE_HASH_RE = re.compile( r"^\[PipelineTileHash\] lod=(-?\d+) x=(-?\d+) y=(-?\d+) z=(-?\d+) " r"density=(0x[0-9a-f]+) mesh=(0x[0-9a-f]+) " r"payload=(0x[0-9a-f]+) topology=(0x[0-9a-f]+)$", re.M) +TILE_MATERIAL_HASH_RE = re.compile( + r"^\[PipelineTileMaterialHash\] lod=(-?\d+) x=(-?\d+) y=(-?\d+) z=(-?\d+) " + r"material=(0x[0-9a-f]+)$", re.M) CAMERA_SWEEP_SEED = 0x4C3434 RECIPE_RE = re.compile( r"^\[WorldAssemblerRecipeAudit\] requested=([^ ]+) actual=([^ ]+).*status=([^ ]+)$", re.M) @@ -428,6 +431,115 @@ def parse_tile_hashes(output: str) -> dict[tuple[int, int, int, int], tuple[str, return rows +def parse_tile_material_hashes(output: str) -> dict[tuple[int, int, int, int], str]: + rows: dict[tuple[int, int, int, int], str] = {} + for match in TILE_MATERIAL_HASH_RE.finditer(output): + key = tuple(int(match.group(i)) for i in range(1, 5)) + rows[key] = match.group(5) + return rows + + +def ore_vein_audit_camera(layout_path: Path) -> tuple[float, float, float, float, float]: + layout = json.loads(layout_path.read_text(encoding="utf-8")) + core_um = int(layout["core_voxel_size_um"]) + route = [anchor for strate in layout["strates"] + if strate["generator_kind"] == "SurfaceWorld" + for anchor in strate["anchors"] if anchor["kind"] == "route_point"] + route.sort(key=lambda anchor: int(anchor["stable_id"].split("/")[-1])) + records = layout.get("ore_veins", []) + vein = next((row for row in records + if row["stable_id"] == "ore/sw-arrival-route-copper-v1"), None) + if len(route) < 2 or vein is None: + raise VerificationFailure(f"cannot derive ore camera from {layout_path}") + target = [sum(value) / 2_000_000.0 for value in zip(*vein["endpoints_um"])] + points = [[value * core_um / 256_000_000.0 for value in anchor["values"][:3]] + for anchor in route] + best: tuple[float, int, float, tuple[float, float, float]] | None = None + for index, (a, b) in enumerate(zip(points, points[1:])): + dx, dy = b[0] - a[0], b[1] - a[1] + length2 = dx * dx + dy * dy + t = 0.0 if length2 <= 1.0e-12 else max(0.0, min(1.0, + ((target[0] - a[0]) * dx + (target[1] - a[1]) * dy) / length2)) + point = tuple(a[axis] + t * (b[axis] - a[axis]) for axis in range(3)) + distance2 = (point[0] - target[0]) ** 2 + (point[1] - target[1]) ** 2 + candidate = (distance2, index, t, point) + if best is None or candidate[:3] < best[:3]: + best = candidate + assert best is not None + _, _, _, floor = best + camera = (floor[0], floor[1], floor[2] + 1.6) + dx, dy = target[0] - camera[0], target[1] - camera[1] + horizontal = max(math.hypot(dx, dy), 1.0e-6) + target_z = target[2] + 1.0 + yaw = math.degrees(math.atan2(dx, dy)) + pitch = math.degrees(math.atan2(target_z - camera[2], horizontal)) + return (*camera, yaw, pitch) + + +def run_ore_vein_hash_controls(runner: VerificationRunner) -> None: + camera_layout = OUT / "layouts" / "ore-vein-camera-layout.json" + row, output = runner.run_cpp("ore-vein-camera-layout", CLANG, OWNER, + "surface-world", ["--landmark-chamber-demo", "--ore-veins-demo", + "--resolved-layout-only"], + expected_style=2, expected_strate_styles={"0": 2, "1": 1}, workers=1, + max_level=0, layout_path=camera_layout) + audit = re.search(r"^\[ResolvedOreVeinPlacementAudit\].*status=PASS$", output, re.M) + runner.require("ore-vein-resolved-records", audit is not None, + f"layout={row['layout_id']} resolved={len(json.loads(camera_layout.read_text()).get('ore_veins', []))}/3") + x, y, z, yaw, pitch = ore_vein_audit_camera(camera_layout) + camera_flag = f"--camera={x:.6f},{y:.6f},{z:.6f},{yaw:.3f},{pitch:.3f}" + base_flags = ["--stream-hash-tiles", "--landmark-chamber-demo", camera_flag, + "--clip-radius=2", "--max-clip-level=0", "--max-level=0", + "--render-distance-chunks=0"] + geometry: dict[str, dict[tuple[int, int, int, int], tuple[str, ...]]] = {} + material: dict[str, dict[tuple[int, int, int, int], str]] = {} + outputs: dict[str, str] = {} + for label, enabled in (("off", False), ("on", True)): + flags = [*base_flags] + if enabled: + flags.extend(("--ore-veins-demo", "--audit-ore-vein-yield")) + _, captured = runner.run_cpp(f"ore-vein-geometry-{label}", CLANG, OWNER, + "surface-world", flags, expected_style=2, + expected_strate_styles={"0": 2, "1": 1}, workers=1, + max_level=0, layout_path=OUT / "layouts" / f"ore-vein-geometry-{label}.json") + outputs[label] = captured + geometry[label] = parse_tile_hashes(captured) + material[label] = parse_tile_material_hashes(captured) + whole = re.search(r"^\[PipelineWholeViewHash\] tiles=(\d+)", captured, re.M) + expected_rows = int(whole.group(1)) if whole else -1 + runner.require(f"ore-vein-geometry-{label}:hash-rows", + bool(geometry[label]) and len(geometry[label]) == expected_rows + and len(material[label]) == expected_rows, + f"geometry_rows={len(geometry[label])} material_rows={len(material[label])} " + f"expected={expected_rows}") + cost = re.search(r"^\[MaterialQueryCost\] queries=(\d+) candidate_checks=(\d+) " + r"outside_vein_tiles=(\d+) tiles=(\d+) elapsed_ms=([0-9.]+) " + r"outside_query_ms=0 status=([^ ]+)$", captured, re.M) + cost_ok = cost is not None and int(cost.group(1)) == 0 if not enabled else ( + cost is not None and int(cost.group(1)) > 0 and int(cost.group(3)) > 0 + and float(cost.group(5)) >= 0.0) + runner.require(f"ore-vein-material-cost-{label}", cost_ok, + f"cost_line={cost.group(0) if cost else 'MISSING'}") + differing = [key for key in set(material["off"]) | set(material["on"]) + if material["off"].get(key) != material["on"].get(key)] + runner.require("ore-vein-geometry-unchanged-with-veins", + geometry["off"] == geometry["on"], + f"camera_m=({x:.3f},{y:.3f},{z:.3f}) density/mesh/payload/topology " + f"tile_hashes_match={geometry['off']==geometry['on']} " + f"material_tiles_changed={len(differing)}") + runner.require("ore-vein-material-hash-changes", + bool(differing) and material["off"] != material["on"], + f"changed_tiles={len(differing)} camera_m=({x:.3f},{y:.3f},{z:.3f})") + mined = re.search(r"^\[OreMiningYield\].*resource_volume_m3=([0-9.]+) status=PASS$", + outputs["on"], re.M) + air = re.search(r"^\[OreMiningYieldControl\] case=already-air.*" + r"resource_volume_m3=0\.000000 status=PASS$", outputs["on"], re.M) + runner.require("ore-vein-yield-positive", mined is not None and float(mined.group(1)) > 0, + "fixed 0.25 m sample spacing measured positive removed resource volume") + runner.require("ore-vein-yield-already-air-zero", air is not None, + "the same sphere measurement on the already-air chamber tunnel returned zero") + + def cavern_audit_cameras(layout_path: Path) -> list[tuple[float, float, float, float, float]]: layout = json.loads(layout_path.read_text(encoding="utf-8")) edges = layout.get("cavern_edges", []) @@ -473,6 +585,7 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. label = (f"random-camera-{compiler}-{recipe}-s{CAMERA_SWEEP_SEED:06x}" f"-p{camera_index:02d}-r{clip_radius}-c{max_clip_level}-m{max_level}") signatures: dict[int, dict[tuple[int, int, int, int], tuple[str, ...]]] = {} + material_signatures: dict[int, dict[tuple[int, int, int, int], str]] = {} for workers in (1, 8, 12): name = f"{label}-w{workers}" flags = ["--stream-hash-tiles", camera_flag, @@ -480,7 +593,7 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. f"--max-clip-level={max_clip_level}", f"--max-level={max_level}", "--render-distance-chunks=0"] if recipe == "surface-world": - flags.append("--landmark-chamber-demo") + flags.extend(("--landmark-chamber-demo", "--ore-veins-demo")) row, output = runner.run_cpp(name, binary, OWNER, recipe, flags, expected_style=2, expected_strate_styles={"0": 2, "1": 1}, @@ -496,11 +609,17 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. } current = parse_tile_hashes(output) signatures[workers] = current + material_signatures[workers] = parse_tile_material_hashes(output) whole = re.search(r"^\[PipelineWholeViewHash\] tiles=(\d+)", output, re.M) expected_rows = int(whole.group(1)) if whole else -1 runner.require(f"{name}:tile-hash-rows", bool(current) and len(current) == expected_rows, f"rows={len(current)} expected={expected_rows} settings={settings}") + if recipe == "surface-world": + material_rows = material_signatures[workers] + runner.require(f"{name}:material-hash-rows", + bool(material_rows) and len(material_rows) == expected_rows, + f"rows={len(material_rows)} expected={expected_rows} settings={settings}") camera_text = (f"seed=0x{CAMERA_SWEEP_SEED:06x} camera_m=" f"({x:.3f},{y:.3f},{z:.3f}) recipe={recipe} settings={settings}") for left, right in ((1, 8), (1, 12), (8, 12)): @@ -517,12 +636,19 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. topology_diff = [key for key in keys if left_rows.get(key, (None, None, None, None))[3] != right_rows.get(key, (None, None, None, None))[3]] + material_left=material_signatures[left] + material_right=material_signatures[right] + material_diff=([key for key in set(material_left)|set(material_right) + if material_left.get(key)!=material_right.get(key)] + if recipe=="surface-world" else []) detail = (f"{camera_text} W{left}=W{right} " f"density_tiles={len(density_diff)} mesh_tiles={len(mesh_diff)} " f"payload_tiles={len(payload_diff)} topology_tiles={len(topology_diff)} " + f"material_tiles={len(material_diff)} " f"sample_coords={sorted(density_diff or mesh_diff)[:6]}") runner.require(f"{label}:W{left}-W{right}", - left_rows == right_rows, detail) + left_rows == right_rows and + (recipe != "surface-world" or material_left == material_right), detail) # Keep a pair of fixed cameras on the current owner graph: one in the bore and # one beside its curved wall. Their tile hashes join the seeded W1/W8/W12 sweep. @@ -536,10 +662,12 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. camera_flag = f"--camera={x:.6f},{y:.6f},{z:.6f},{yaw:.3f},{pitch:.3f}" label = f"cavern-camera-{compiler}-s{CAMERA_SWEEP_SEED:06x}-p{camera_index:02d}" signatures: dict[int, dict[tuple[int, int, int, int], tuple[str, ...]]] = {} + material_signatures: dict[int, dict[tuple[int, int, int, int], str]] = {} for workers in (1, 8, 12): name = f"{label}-w{workers}" row, output = runner.run_cpp(name, binary, OWNER, "surface-world", ["--stream-hash-tiles", camera_flag, "--landmark-chamber-demo", + "--ore-veins-demo", "--clip-radius=3", "--max-clip-level=0", "--max-level=0", "--render-distance-chunks=0"], expected_style=2, @@ -548,17 +676,24 @@ def run_random_camera_sweep(runner: VerificationRunner, binaries: tuple[Path, .. row["camera_position_m"] = [round(value, 6) for value in camera[:3]] row["camera_region"] = "inside-tunnel" if camera_index == 0 else "near-tunnel-wall" signatures[workers] = parse_tile_hashes(output) + material_signatures[workers] = parse_tile_material_hashes(output) whole = re.search(r"^\[PipelineWholeViewHash\] tiles=(\d+)", output, re.M) expected_rows = int(whole.group(1)) if whole else -1 runner.require(f"{name}:tile-hash-rows", bool(signatures[workers]) and len(signatures[workers]) == expected_rows, f"rows={len(signatures[workers])} expected={expected_rows} camera={camera[:3]}") + runner.require(f"{name}:material-hash-rows", + bool(material_signatures[workers]) + and len(material_signatures[workers]) == expected_rows, + f"rows={len(material_signatures[workers])} expected={expected_rows} " + f"camera={camera[:3]}") for left, right in ((1, 8), (1, 12), (8, 12)): runner.require(f"{label}:W{left}-W{right}", - signatures[left] == signatures[right], + signatures[left] == signatures[right] + and material_signatures[left] == material_signatures[right], f"camera_m=({x:.3f},{y:.3f},{z:.3f}) " f"region={'inside' if camera_index == 0 else 'near'}-tunnel " - f"W{left}=W{right} density/mesh/payload/topology tile hashes match") + f"W{left}=W{right} density/mesh/payload/topology/material tile hashes match") def run_ring(runner: VerificationRunner, *, full: bool) -> None: @@ -904,6 +1039,7 @@ def run_medium_suite(runner: VerificationRunner, *, both_compilers: bool = False run_transitions_and_invariants(runner, binaries) run_ring(runner, full=True) run_captures_and_mesh_audits(runner) + run_ore_vein_hash_controls(runner) run_random_camera_sweep(runner, (CLANG,), 5, ((3, 0, 0), (2, 1, 1), (3, 2, 1))) @@ -939,6 +1075,7 @@ def main() -> int: run_landmark_reachability(runner, (CLANG,)) run_regression_controls(runner) run_hash_pairs(runner, owners) + run_ore_vein_hash_controls(runner) run_random_camera_sweep(runner, (CLANG,), 3, ((3, 0, 0),)) run_ring(runner, full=False) elif ARGS.tier == "medium":