wip(L15, side branch): extended far gate + rejected far-mesh candidates (null result)
Refine x2 at LOD4-8 saves 13.6% but breaks the 1 px rule, shading and swaps, and opens holes; station x2 and ray removal open connector gaps. Not for assembler/world. See Linux15/REPORT.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
This commit is contained in:
1 parent
a176d0743a
commit
a6185b1a3f
17 files changed
+938
-115
No files matched your search
@@ -43,9 +43,11 @@ struct FStandaloneCpuTile
|
||||
FVoxelTileKey Key;
|
||||
uint64 RequestedCrossing=0;
|
||||
std::vector<FStandaloneCpuVertex> Vertices;
|
||||
std::vector<std::array<uint8,4>> VertexColors;
|
||||
std::vector<uint32> Indices;
|
||||
std::vector<uint8> TriangleSkirtFaceMasks;
|
||||
uint32 SurfaceVertexCount=0;
|
||||
uint32 CeilingTriangleCount=0;
|
||||
uint32 SkirtTriangleCount=0;
|
||||
uint64 DensitySamples=0;
|
||||
double WorkerSeconds=0.0;
|
||||
@@ -653,12 +655,17 @@ public:
|
||||
{bProfileMesherStages=Enabled;}
|
||||
void SetUniformBlockProofAuditEnabled(bool Enabled)
|
||||
{bAuditUniformBlockProofs=Enabled;}
|
||||
void SetDisplayAttributeCaptureEnabled(bool Enabled)
|
||||
{bCaptureDisplayAttributes=Enabled;}
|
||||
FStandaloneCpuTile GenerateDiagnostic(const FVoxelTileKey& Key,
|
||||
std::uint32_t GlobalOctaveDrop=0,std::uint32_t CellStride=1,
|
||||
bool ForceGenerate=false)
|
||||
bool ForceGenerate=false,
|
||||
const VoxelForgeCore::TileGenerationOptions* FarDisplayOverride=nullptr,
|
||||
bool CaptureDisplayAttributes=false)
|
||||
{
|
||||
FStandaloneTileJob Job;Job.Key=Key;Job.StartedAt=FClock::now();Job.QueuedAt=Job.StartedAt;
|
||||
return Generate(Job,GlobalOctaveDrop,CellStride,ForceGenerate);
|
||||
return Generate(Job,GlobalOctaveDrop,CellStride,ForceGenerate,FarDisplayOverride,
|
||||
CaptureDisplayAttributes);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -778,7 +785,9 @@ private:
|
||||
}
|
||||
FStandaloneCpuTile Generate(const FStandaloneTileJob& Job,
|
||||
std::uint32_t DiagnosticGlobalOctaveDrop=0,std::uint32_t DiagnosticCellStride=1,
|
||||
bool ForceGenerate=false)
|
||||
bool ForceGenerate=false,
|
||||
const VoxelForgeCore::TileGenerationOptions* FarDisplayOverride=nullptr,
|
||||
bool CaptureDisplayAttributes=false)
|
||||
{
|
||||
const auto StartTime=Job.StartedAt;
|
||||
FStandaloneCpuTile Out;Out.Key=Job.Key;Out.RequestedCrossing=Job.RequestedCrossing;
|
||||
@@ -829,6 +838,18 @@ private:
|
||||
Options.diagnosticCellStride=std::max<std::uint32_t>(1,DiagnosticCellStride);
|
||||
Options.diagnosticColumnInterpolationStride=
|
||||
std::max<std::uint32_t>(1,DiagnosticCellStride);
|
||||
if(FarDisplayOverride)
|
||||
{
|
||||
Options.overrideFarDisplayMesh=FarDisplayOverride->overrideFarDisplayMesh;
|
||||
Options.farDisplayGeometryBudgetMillipixels=FarDisplayOverride->farDisplayGeometryBudgetMillipixels;
|
||||
Options.farRefinementGridScale=FarDisplayOverride->farRefinementGridScale;
|
||||
Options.farRefinementLodMask=FarDisplayOverride->farRefinementLodMask;
|
||||
Options.farConnectorStationScale=FarDisplayOverride->farConnectorStationScale;
|
||||
Options.farConnectorRayMask=FarDisplayOverride->farConnectorRayMask;
|
||||
Options.farConnectorReuseStationRadii=FarDisplayOverride->farConnectorReuseStationRadii;
|
||||
Options.diagnosticRemoveFarConnectorPanels=FarDisplayOverride->diagnosticRemoveFarConnectorPanels;
|
||||
Options.diagnosticAuditFarConnectorCoverage=FarDisplayOverride->diagnosticAuditFarConnectorCoverage;
|
||||
}
|
||||
std::string Error;
|
||||
auto Result=CoreWorld->generateTile(
|
||||
{{Job.Key.Coord.X,Job.Key.Coord.Y,Job.Key.Coord.Z},Job.Key.Level},Options,Error);
|
||||
@@ -842,6 +863,7 @@ private:
|
||||
Out.DensitySamples=Result->densitySampleCount;
|
||||
Out.CoreDiagnostics=Result->diagnostics;
|
||||
Out.SurfaceVertexCount=Result->groups.surfaceVertexCount;
|
||||
Out.CeilingTriangleCount=Result->groups.ceilingTriangleCount;
|
||||
Out.SkirtTriangleCount=Result->groups.skirtTriangleCount;
|
||||
Out.MeshPayloadAllocatedBytes=Result->meshPayloadAllocatedBytes;
|
||||
Out.DensityHash=Result->densityHash;Out.MeshHash=Result->meshHash;
|
||||
@@ -849,12 +871,18 @@ private:
|
||||
Out.bHasDensityHash=Result->hasDensityHash;Out.bHasMeshHash=Result->hasMeshHash;
|
||||
Out.bHasPayloadHash=Result->hasPayloadHash;Out.bHasTopologyHash=Result->hasTopologyHash;
|
||||
Out.Vertices.reserve(Result->vertices.size());
|
||||
const bool bCaptureAttributes=CaptureDisplayAttributes||bCaptureDisplayAttributes;
|
||||
if(bCaptureAttributes)Out.VertexColors.reserve(Result->vertices.size());
|
||||
for(const auto& Vertex:Result->vertices)
|
||||
{
|
||||
Out.Vertices.push_back({
|
||||
{static_cast<float>(Vertex.position.x*0.01),static_cast<float>(Vertex.position.y*0.01),
|
||||
static_cast<float>(Vertex.position.z*0.01)},
|
||||
{static_cast<float>(Vertex.normal.x),static_cast<float>(Vertex.normal.y),
|
||||
static_cast<float>(Vertex.normal.z)}});
|
||||
if(bCaptureAttributes)
|
||||
Out.VertexColors.push_back({Vertex.color.r,Vertex.color.g,Vertex.color.b,Vertex.color.a});
|
||||
}
|
||||
Out.Indices=std::move(Result->indices);
|
||||
Out.TriangleSkirtFaceMasks=std::move(Result->skirtFaceMasks);
|
||||
if(bProfile)
|
||||
@@ -1001,6 +1029,7 @@ private:
|
||||
bool bSkipUV=false;
|
||||
bool bSkipColors=false;
|
||||
bool bCaptureColumnCoordinates=false;
|
||||
bool bCaptureDisplayAttributes=false;
|
||||
bool bSharedColumnCache=true;
|
||||
int32 Lod8HorizonInteriorStepVoxels=0;
|
||||
bool bProfileMesherStages=false;
|
||||
|
||||
Reference in new issue
Block a user