wip(assembler): round S3 -- far ground from the native heightfield; LOD7/8 tiles 36-66% cheaper
Far-shell repair (81-96% of S2's LOD7/8 tile time) is skipped for certified SurfaceWorld tiles; ground and cap come from the shared planar heightfield. Near LOD0-3 hashes equal S2; far recipe version 1 salts LOD5+ identities. Cold first view 6.6 -> 3.4 s (aim 1.57 s). Not a visual sign-off: distant cap shows floating pieces, sprint streaming arrives late. 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
6ddb834b1c
commit
d0f97bf79a
26 files changed
+976
-30
No files matched your search
@@ -1688,6 +1688,8 @@ namespace
|
||||
int32 FlightObservedCrossings=0;
|
||||
uint64 FlightStartCrossingIndex=0;
|
||||
float FlightSpeedMps=16.0f;
|
||||
std::string FlightCaptureSequencePrefix;
|
||||
int32 FlightCaptureSequenceIndex=0;
|
||||
bool bFlightStarted=false;
|
||||
bool bFlightFinished=false;
|
||||
bool bFlightClosePosted=false;
|
||||
@@ -5505,6 +5507,29 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75;
|
||||
|
||||
void CaptureRenderedFrame()
|
||||
{
|
||||
// Capturer le vol dans la boucle de rendu conserve les transitions LOD.
|
||||
// Capture the flight inside the render loop to retain LOD transition frames.
|
||||
if(!FlightCaptureSequencePrefix.empty()&&bFlightStarted)
|
||||
{
|
||||
static constexpr std::array<double,5> CaptureSeconds={0.1,5.0,15.0,25.0,32.0};
|
||||
const double FlightElapsed=std::chrono::duration<double>(
|
||||
std::chrono::steady_clock::now()-FlightStartTime).count();
|
||||
if(FlightCaptureSequenceIndex<static_cast<int32>(CaptureSeconds.size())
|
||||
&&FlightElapsed>=CaptureSeconds[FlightCaptureSequenceIndex])
|
||||
{
|
||||
char Suffix[16]{};
|
||||
std::snprintf(Suffix,sizeof(Suffix),"_%02d.png",FlightCaptureSequenceIndex);
|
||||
const std::string Path=FlightCaptureSequencePrefix+Suffix;
|
||||
if(SaveBackBufferPng(Path))
|
||||
std::printf("[FlightSequenceCapture] index=%d elapsed_s=%.3f path=%s\n",
|
||||
FlightCaptureSequenceIndex,FlightElapsed,Path.c_str());
|
||||
else
|
||||
std::fprintf(stderr,"[FlightSequenceCapture] index=%d failed path=%s\n",
|
||||
FlightCaptureSequenceIndex,Path.c_str());
|
||||
++FlightCaptureSequenceIndex;
|
||||
std::fflush(stdout);
|
||||
}
|
||||
}
|
||||
const bool bReadyToCapture=bCaptureAfterClipmap?bInitialClipmapReported:IsFullDetailUploaded();
|
||||
if(CapturePath.empty()||bAutoCaptureWritten||!bReadyToCapture)return;
|
||||
bAutoCaptureWritten=SaveBackBufferPng(CapturePath);
|
||||
@@ -8964,6 +8989,9 @@ int main(int Argc,char** Argv)
|
||||
{
|
||||
const std::string_view Arg=Argv[I];
|
||||
if(Arg.starts_with("--capture="))App.CapturePath=std::string(Arg.substr(10));
|
||||
else if(Arg.starts_with("--capture-flight-sequence-prefix="))
|
||||
App.FlightCaptureSequencePrefix=std::string(
|
||||
Arg.substr(std::string_view("--capture-flight-sequence-prefix=").size()));
|
||||
else if(Arg=="--no-vsync")App.bDisableVSync=true;
|
||||
else if(Arg.starts_with("--frame-limit="))
|
||||
{FrameLimitHz=std::clamp(std::atoi(std::string(Arg.substr(14)).c_str()),1,60);bFrameLimitSpecified=true;}
|
||||
|
||||
Reference in new issue
Block a user