streaming: far LODs keep a share while near work is pending (L79); no more horizon starvation
L78's strict near-first order starved far LODs at 30 m/s (100% far holes, never completed). Unreal policy 2: once the collision ring is ready, LOD0-2 keep their reserve and far tiles are admitted as low-priority Horizon work; headless gives far work 1 of every 16 requests. Moving camera, far holes while moving: 1.4 m/s L77 8% / L78 29% / L79 31%; 30 m/s L77 8% / L78 100% / L79 72% (completes on dwell). Near readiness while moving at 30 m/s: 52 / 51 / 67%. Still worse than L77 for fast travel -> speed-adaptive policy next. World unchanged (v213). Fast tier PASS; Linux UE host builds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
ec20994a8e
commit
2c8a26c0d0
11 files changed
+833
-30
No files matched your search
@@ -86,6 +86,11 @@ namespace
|
||||
bool HasCameraStep=false;
|
||||
bool AutoSurfaceCamera=false;
|
||||
bool CaptureSkipWalkability=false;
|
||||
int StreamingSchedulerPolicy=-1;
|
||||
bool MovingCameraTrace=false;
|
||||
double MovingCameraSpeedMetersPerSecond=0.0;
|
||||
double MovingCameraDurationSeconds=12.0;
|
||||
double MovingCameraDwellSeconds=5.0;
|
||||
FVector CameraMeters=FVector::ZeroVector;
|
||||
FVector CameraStepMeters=FVector::ZeroVector;
|
||||
float CameraYawDegrees=0.0f;
|
||||
@@ -1409,6 +1414,8 @@ namespace
|
||||
std::printf("Usage: %s [owner_world.json] --world-assembler-prototype --stream-benchmark --stream-pipeline [options]\n"
|
||||
" --workers=N --clip-radius=N --max-clip-level=N --max-level=N\n"
|
||||
" --camera=X,Y,Z,YAW,PITCH (position in metres) --stream-hash\n"
|
||||
" --stream-scheduler-policy=0|1|2 (L77 coarse, L78 near, L79 fair share)\n"
|
||||
" --moving-camera-speed-mps=N [--moving-camera-duration-s=N] [--moving-camera-dwell-s=N]\n"
|
||||
" --stream-hash-tiles (print per-tile hashes; implies --stream-hash)\n"
|
||||
" --stream-hash-tiles-allow-skips (mesh/topology falsifier with proven uniform skips)\n"
|
||||
" --camera-step=X,Y,Z (optional second view step in metres)\n"
|
||||
@@ -1590,6 +1597,37 @@ namespace
|
||||
{std::fprintf(stderr,"Invalid --camera-step value: %.*s\n",static_cast<int>(arg.size()),arg.data());return false;}
|
||||
options.HasCameraStep=true;
|
||||
}
|
||||
else if(arg.starts_with("--stream-scheduler-policy="))
|
||||
{
|
||||
if(!readInt("--stream-scheduler-policy=",options.StreamingSchedulerPolicy)
|
||||
||options.StreamingSchedulerPolicy<0||options.StreamingSchedulerPolicy>2)
|
||||
{std::fprintf(stderr,"Invalid --stream-scheduler-policy (expected 0..2).\n");return false;}
|
||||
}
|
||||
else if(arg.starts_with("--moving-camera-speed-mps="))
|
||||
{
|
||||
const std::string value(arg.substr(std::string_view("--moving-camera-speed-mps=").size()));
|
||||
char* end=nullptr;options.MovingCameraSpeedMetersPerSecond=std::strtod(value.c_str(),&end);
|
||||
if(end==value.c_str()||*end!='\0'||!std::isfinite(options.MovingCameraSpeedMetersPerSecond)
|
||||
||options.MovingCameraSpeedMetersPerSecond<=0.0)
|
||||
{std::fprintf(stderr,"Invalid --moving-camera-speed-mps (expected positive finite value).\n");return false;}
|
||||
options.MovingCameraTrace=true;
|
||||
}
|
||||
else if(arg.starts_with("--moving-camera-duration-s="))
|
||||
{
|
||||
const std::string value(arg.substr(std::string_view("--moving-camera-duration-s=").size()));
|
||||
char* end=nullptr;options.MovingCameraDurationSeconds=std::strtod(value.c_str(),&end);
|
||||
if(end==value.c_str()||*end!='\0'||!std::isfinite(options.MovingCameraDurationSeconds)
|
||||
||options.MovingCameraDurationSeconds<=0.0)
|
||||
{std::fprintf(stderr,"Invalid --moving-camera-duration-s (expected positive finite value).\n");return false;}
|
||||
}
|
||||
else if(arg.starts_with("--moving-camera-dwell-s="))
|
||||
{
|
||||
const std::string value(arg.substr(std::string_view("--moving-camera-dwell-s=").size()));
|
||||
char* end=nullptr;options.MovingCameraDwellSeconds=std::strtod(value.c_str(),&end);
|
||||
if(end==value.c_str()||*end!='\0'||!std::isfinite(options.MovingCameraDwellSeconds)
|
||||
||options.MovingCameraDwellSeconds<0.0)
|
||||
{std::fprintf(stderr,"Invalid --moving-camera-dwell-s (expected nonnegative finite value).\n");return false;}
|
||||
}
|
||||
else if(arg.starts_with("--column-cache="))
|
||||
{
|
||||
const std::string_view mode=arg.substr(std::string_view("--column-cache=").size());
|
||||
@@ -1635,6 +1673,10 @@ namespace
|
||||
{std::fprintf(stderr,"--tls-probe-touch requires --tls-probe=N\n");return false;}
|
||||
if(options.RegionCrossing&&!options.HasCameraStep)
|
||||
{std::fprintf(stderr,"--region-crossing requires --camera-step=X,Y,Z\n");return false;}
|
||||
if(options.MovingCameraTrace&&(!options.StreamPipeline||!options.WorldAssemblerPrototype))
|
||||
{std::fprintf(stderr,"--moving-camera-speed-mps requires --world-assembler-prototype --stream-pipeline\n");return false;}
|
||||
if(options.MovingCameraTrace&&options.StreamingSchedulerPolicy<0)
|
||||
{std::fprintf(stderr,"--moving-camera-speed-mps requires --stream-scheduler-policy=0|1|2\n");return false;}
|
||||
if(options.LandmarkL45RampControl&&!options.LandmarkChamberDemo)
|
||||
{std::fprintf(stderr,"--landmark-l45-ramp-control requires --landmark-chamber-demo\n");return false;}
|
||||
if(options.AuditOreVeinYield&&!options.OreVeinsDemo)
|
||||
@@ -2228,5 +2270,8 @@ int main(int argc,char** argv)
|
||||
?options.ParallelSignEdgeRepair:options.FloatingIslandsRecipe,
|
||||
options.AuditNativeLattice,options.LatticeOrphanControl,
|
||||
options.CaptureSkipWalkability,options.ProfilePassageComposer,
|
||||
options.StreamHashAllowUniformSkips,options.Linux77Profile);
|
||||
options.StreamHashAllowUniformSkips,options.Linux77Profile,
|
||||
options.StreamingSchedulerPolicy,options.MovingCameraTrace,
|
||||
options.MovingCameraSpeedMetersPerSecond,options.MovingCameraDurationSeconds,
|
||||
options.MovingCameraDwellSeconds);
|
||||
}
|
||||
Reference in new issue
Block a user