wip(assembler): M2 round 3 -- opt-in hybrid sharp mesher (WorldAssemblerHybridV1) in the Unreal Core route

Default MarchingCubesV1 unchanged (W1/W8/W16 = round-6 hashes). Hybrid DC only in LOD0 interior cells
with tagged features; tile-border cells and LOD1+ stay MC. BuildHost: fixtures repeat exactly, cooked
collision bounds = render bounds, same-LOD borders pass, sampled SurfaceWorld cliff bit-identical to MC.
Open: tagged tiles cost 5.7-6.7x MC; corner-top field contact error 20 cm; 5 MC doorway LOD cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-10 09:53:04 +02:00
1 parent a3b7d2015e
commit 22a6b30494
21 files changed
+3009 -23

No files matched your search

+15
View File
@@ -72,6 +72,15 @@ enum class EVoxelAnchorPolicy : uint8
FullVisual UMETA(DisplayName = "Full Visual") // rendered too (a second local viewpoint)
};
/** Versioned Core mesh recipe. Hybrid requires tagged sharp plan features and affects only Core meshes.
* Recette de maillage Core versionnee. Hybrid exige des fonctions planaires balisees et ne touche qu'au Core. */
UENUM(BlueprintType)
enum class EVoxelForgeCoreMesherRecipe : uint8
{
MarchingCubesV1 UMETA(DisplayName = "Marching Cubes V1"),
WorldAssemblerHybridV1 UMETA(DisplayName = "World Assembler Hybrid V1")
};
/** A non-player streaming center: keep a small box of level-0 tiles loaded around Actor so it has
* collision wherever it is. Plain internal struct (weak ptr is GC-safe without reflection). */
struct FVoxelStreamingAnchor
@@ -269,6 +278,11 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Voxel World|Core", meta = (DisplayName = "Use VoxelForge Core"))
bool bUseVoxelForgeCore = false;
/** Core-only, versioned mesher selection. Default keeps the existing Core hashes and geometry.
* Recette reservee au Core; la valeur par defaut conserve les hachages et la geometrie actuels. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Voxel World|Core", meta = (DisplayName = "Core Mesher Recipe"))
EVoxelForgeCoreMesherRecipe CoreMesherRecipe = EVoxelForgeCoreMesherRecipe::MarchingCubesV1;
/** Core-only clipmap radius, in level-0 Core tiles. Does not read Settings->ClipRadius. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Voxel World|Core", meta = (ClampMin = "1", ClampMax = "64"))
int32 CoreClipRadius = 3;
@@ -330,6 +344,7 @@ public:
uint64 CollisionSubmittedCycles = 0;
uint64 CollisionSubmittedFrame = 0;
bool bBodyUpdatedEventSeen = false;
bool bPooledComponent = false;
uint64 BodyUpdatedEventCycles = 0;
uint64 BodyUpdatedEventFrame = 0;
bool bPhysicsStateReadyAtBodyUpdate = false;