wip(assembler): M2 round 4 -- WorldAssemblerHybridV2: exact contacts, tagged tiles 1.18-1.27x MC
The round-3 'field contact error' measured hit-to-anchor distance; V2 contacts are 0 cm and on the zero isosurface. Tagged-tile cost 5.7-6.7x -> 1.175-1.270x MC; organic 0.998x. Bound, shelf-thickness and route audits rerun with negative controls; W1/W8/W16 stable; V1 and MarchingCubesV1 unchanged. 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
22a6b30494
commit
4661a445be
48 files changed
+106493
-71
No files matched your search
@@ -62,14 +62,14 @@ namespace VoxelForgeCore
|
||||
std::uint32_t skirtTriangleCount = 0;
|
||||
};
|
||||
|
||||
// Versioned render-mesher choices. marchingCubesV1 preserves the production Core path;
|
||||
// worldAssemblerHybridV1 applies feature-aware DC only to tagged type-2 plan boxes at LOD0.
|
||||
// Choix versionnes du mailleur. marchingCubesV1 conserve la voie Core actuelle;
|
||||
// worldAssemblerHybridV1 applique le DC aux boites type 2 balisees, uniquement en LOD0.
|
||||
// Versioned render-mesher choices. V1 is the original feature-aware DC path. V2 keeps MC
|
||||
// topology and snaps eligible LOD0 roots to tagged type-2 box planes.
|
||||
// Choix versionnes du mailleur. V1 est la voie DC initiale; V2 conserve MC et cale les racines.
|
||||
enum class MesherRecipe : std::uint8_t
|
||||
{
|
||||
marchingCubesV1 = 0,
|
||||
worldAssemblerHybridV1 = 1
|
||||
worldAssemblerHybridV1 = 1,
|
||||
worldAssemblerHybridV2 = 2
|
||||
};
|
||||
|
||||
struct SharpFeatureBox
|
||||
|
||||
@@ -904,10 +904,11 @@ namespace VoxelForgeCore
|
||||
const FVoxelTileKey nativeKey=ToNative(key);
|
||||
const FIntVector origin=nativeKey.OriginVoxels();
|
||||
if(options.mesherRecipe!=MesherRecipe::marchingCubesV1
|
||||
&&options.mesherRecipe!=MesherRecipe::worldAssemblerHybridV1)
|
||||
&&options.mesherRecipe!=MesherRecipe::worldAssemblerHybridV1
|
||||
&&options.mesherRecipe!=MesherRecipe::worldAssemblerHybridV2)
|
||||
{error="tile mesher recipe version is unsupported";return std::nullopt;}
|
||||
TArray<FVoxelHybridSharpFeatureBox> sharpFeatures;
|
||||
if(options.mesherRecipe==MesherRecipe::worldAssemblerHybridV1&&level==0&&impl_->worldAssembly)
|
||||
if(options.mesherRecipe!=MesherRecipe::marchingCubesV1&&level==0&&impl_->worldAssembly)
|
||||
{
|
||||
constexpr std::int64_t SubvoxelsPerVoxel=WorldAssemblySubvoxelsPerVoxel;
|
||||
const std::array<std::int64_t,3> tileMin={
|
||||
@@ -946,7 +947,10 @@ namespace VoxelForgeCore
|
||||
// Les pages analytiques omettent le plan natif ; utiliser la base uniquement pour
|
||||
// les tuiles balisees afin d'echantillonner le champ correspondant aux tags.
|
||||
tileShapeContext=impl_->shape.get();
|
||||
mesher.SetHybridSharpFeatures(MoveTemp(sharpFeatures));
|
||||
if(options.mesherRecipe==MesherRecipe::worldAssemblerHybridV2)
|
||||
mesher.SetHybridSharpFeatureSnap(MoveTemp(sharpFeatures));
|
||||
else
|
||||
mesher.SetHybridSharpFeatures(MoveTemp(sharpFeatures));
|
||||
}
|
||||
}
|
||||
const FStandaloneShapeWorld& tileShape=*tileShapeContext;
|
||||
|
||||
Reference in new issue
Block a user