standalone: owner LOD0 defects -- relief blended as partition of unity (stairs gone), exposed skirts 0
- Stairs: cave, floor, strata and passage relief were effectively summed in overlaps (owner ray ~0.94 voxel of displacement); now partition-of-unity weights: -0.288 voxel there, max detail gradient 0.323 voxel/voxel. High-detail patch scan 133 -> 0; exact midpoint edge roots kept (removing them: 7,993 bad roots, 46 patches). - Fins: exposed skirt triangle scan 1,776 -> 0; thin sheets 0; coarse off-surface panels 0. - Path hash both directions equal; W1/W8 equal; routes 5642/5642; passage detail ratio 0.850; far survival passes, bad-shell fails; 30-crossing flight: nearest tile 15.1 ms median, 124 ms max. Caveats seen in the captures: the owner-ray wall has visibly less relief than before; the fin before/after captures do not show the fins (evidence is the scan only). Cold StreamFullClipmap 0.758 s vs 0.741 s (+17 ms, Luna's interleaved run). Owner to judge: bin\VoxelForgeLookCheck4.exe. 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
b3af0e589e
commit
de14f0042d
6 files changed
+213
-26
No files matched your search
@@ -1299,8 +1299,30 @@ private:
|
||||
static float DetailContrast(float CaveInfluence,float FloorInfluence)
|
||||
{
|
||||
const float Cave=std::clamp(CaveInfluence,0.0f,1.0f);
|
||||
const float Floor=std::clamp(FloorInfluence,0.0f,1.0f);
|
||||
return 1.35f-0.80f*Cave+1.85f*Floor;
|
||||
const float Floor=std::min(Cave,std::clamp(FloorInfluence,0.0f,1.0f));
|
||||
const float StrataWeight=1.0f-Cave;
|
||||
const float CaveWeight=Cave-Floor;
|
||||
const float FloorWeight=Floor;
|
||||
// The three influences are a partition of unity. Cave floors blend at the
|
||||
// cave family's amplitude instead of multiplying both family contributions.
|
||||
return 1.35f*StrataWeight+1.00f*CaveWeight+0.55f*FloorWeight;
|
||||
}
|
||||
static float BlendDetailFamilies(float Relief,float OwnerRelief,
|
||||
float CaveInfluence,float FloorInfluence,float PassageInfluence)
|
||||
{
|
||||
const float Cave=std::clamp(CaveInfluence,0.0f,1.0f);
|
||||
const float Floor=std::min(Cave,std::clamp(FloorInfluence,0.0f,1.0f));
|
||||
const float Passage=std::clamp(PassageInfluence,0.0f,1.0f);
|
||||
const float NonPassageWeight=1.0f-Passage;
|
||||
const float StrataWeight=NonPassageWeight*(1.0f-Cave);
|
||||
const float CaveWeight=NonPassageWeight*(Cave-Floor);
|
||||
const float FloorWeight=NonPassageWeight*Floor;
|
||||
const float StrataRelief=1.35f*(Relief+0.5f*OwnerRelief);
|
||||
const float CaveRelief=1.00f*Relief;
|
||||
const float FloorRelief=0.55f*Relief;
|
||||
const float PassageRelief=0.75f*Relief;
|
||||
return StrataWeight*StrataRelief+CaveWeight*CaveRelief
|
||||
+FloorWeight*FloorRelief+Passage*PassageRelief;
|
||||
}
|
||||
static constexpr float DetailBandInnerRadius=1.5f;
|
||||
static float DetailBandFade(float SignedDistance,float Edge)
|
||||
@@ -3883,8 +3905,8 @@ private:
|
||||
if(Field)
|
||||
OwnerRelief=OwnerCaveRoughnessForDetail(X,Y,Z,SurfaceSDF,*Field,
|
||||
CaveInfluence,PassageWeight,OwnerNoise);
|
||||
const float Contrast=DetailContrast(CaveInfluence,FloorInfluence);
|
||||
const float Detail=std::clamp((Relief+OwnerRelief*0.5f)*Contrast,-3.9f,3.9f);
|
||||
const float Detail=std::clamp(BlendDetailFamilies(Relief,OwnerRelief,
|
||||
CaveInfluence,FloorInfluence,PassageWeight),-3.9f,3.9f);
|
||||
return Detail;
|
||||
}
|
||||
|
||||
@@ -3920,8 +3942,8 @@ private:
|
||||
if(Profile)
|
||||
Profile->OwnerRoughnessSampleNanoseconds+=static_cast<uint64>(
|
||||
std::chrono::duration_cast<std::chrono::nanoseconds>(Clock::now()-OwnerStart).count());
|
||||
const float Contrast=DetailContrast(CaveInfluence,FloorInfluence);
|
||||
const float Detail=std::clamp((Relief+OwnerRelief*0.5f)*Contrast,-3.9f,3.9f);
|
||||
const float Detail=std::clamp(BlendDetailFamilies(Relief,OwnerRelief,
|
||||
CaveInfluence,FloorInfluence,PassageWeight),-3.9f,3.9f);
|
||||
return Detail;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.9 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.9 MiB |
Reference in new issue
Block a user