research(standalone): shape world -- 64 m full detail in 0.96 s, whole view in 2.27 s, cold; look not there
Owner's rooms, tunnels, passages, landings and strate shells compiled as shapes, solved along lattice lines with packed signs; rock detail only in a band sized by its supremum; far levels from the same shapes; multithreaded meshing. 8 workers, BelowNormal, affinity 0xFF00, zero cache hits: full detail (960 tiles): 669 ms shapes + 290 ms mesh = 0.959 s (was 20.3 s) full clipmap (6,498 tiles): 870 ms + 1.398 s = 2.268 s (was 170.6 s) Checks: 5,642 passage centreline samples open; smoothed and per-voxel-noise variants both fail the detail audit; same hash across runs and 1 vs 6 workers. V toggles owner field / shape world. Look: 6-12% of lattice signs changed; captures show flat planes without detail (passage floor, a wall band), telescoping tunnel segments, blocky stair patches. Not accepted as the owner's world yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
5441c7da5c
commit
8c068ee2cd
33 files changed
+1676
-32
No files matched your search
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "VoxelGenerator.h"
|
||||
#include "StandaloneResearchTunnels.h"
|
||||
#include "StandaloneShapeWorld.h"
|
||||
#include "VoxelSettings.h"
|
||||
#include "VoxelStrateManager.h"
|
||||
#include "VoxelStrateDefinition.h"
|
||||
@@ -2849,6 +2850,12 @@ bool UVoxelGenerator::EvaluateDensityChunk(
|
||||
float UVoxelGenerator::GetDensityAt(float WorldX, float WorldY, float WorldZ,
|
||||
float* OutPreEditDensity) const
|
||||
{
|
||||
if (const FStandaloneShapeWorld* ShapeWorld=FStandaloneShapeWorldAccess::GetActive())
|
||||
{
|
||||
const float ShapeDensity=ShapeWorld->DensityAt(WorldX,WorldY,WorldZ);
|
||||
if (OutPreEditDensity) *OutPreEditDensity=ShapeDensity;
|
||||
return ShapeDensity;
|
||||
}
|
||||
#if WITH_EDITOR
|
||||
// Step 2e and step 2d are separate editor-only, default-off side paths. The owner field stays
|
||||
// authoritative unless a research commandlet or automation test explicitly selects one.
|
||||
@@ -6469,6 +6476,19 @@ EVoxelTileClass UVoxelGenerator::ClassifyTile(const FIntVector& OriginVoxels, in
|
||||
VoxelDensityProfile::AddCounter(
|
||||
VoxelDensityProfile::ECounter::TileClassifyCalls);
|
||||
|
||||
if (const FStandaloneShapeWorld* ShapeWorld=FStandaloneShapeWorldAccess::GetActive())
|
||||
{
|
||||
const EVoxelTileClass ShapeVerdict=ShapeWorld->ClassifyBox(
|
||||
OriginVoxels,NormalizedStep,NormalizedCellsPerAxis);
|
||||
if (ShapeVerdict==EVoxelTileClass::AllSolid)
|
||||
VoxelDensityProfile::AddCounter(VoxelDensityProfile::ECounter::TileClassifyAllSolid);
|
||||
else if (ShapeVerdict==EVoxelTileClass::AllAir)
|
||||
VoxelDensityProfile::AddCounter(VoxelDensityProfile::ECounter::TileClassifyAllAir);
|
||||
else
|
||||
VoxelDensityProfile::AddCounter(VoxelDensityProfile::ECounter::TileClassifyMixed);
|
||||
return ShapeVerdict;
|
||||
}
|
||||
|
||||
#if WITH_EDITOR
|
||||
// The ordinary tile classifier proves the live field's interval bounds. While the separate
|
||||
// research field is selected, decline those proofs until its own complete final-field interval
|
||||
|
||||
Reference in new issue
Block a user