diff --git a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h index dc4ca32..cb2b2dd 100644 --- a/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h +++ b/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h @@ -494,7 +494,10 @@ namespace VoxelForgeCore // Version 223 projects the floor onto one continuous arc-length profile and groups // dense passage samples into coarse tile candidates. Version 224 keeps the same // continuous floor while relaxing the spline chord tolerance and bounding shell work. - inline constexpr std::uint32_t WorldAssemblyEvaluatorVersion = 225; + // Version 226 unifies the passage influence reach in metres and converts it to core + // voxels for every broadphase and proof bound. Version 227 uses the exact smooth-max + // support width/6 when deriving that reach. + inline constexpr std::uint32_t WorldAssemblyEvaluatorVersion = 227; enum class FieldChannel : std::uint32_t { diff --git a/Standalone/Core/src/ShapeWorldInternal.h b/Standalone/Core/src/ShapeWorldInternal.h index 517f375..0032e03 100644 --- a/Standalone/Core/src/ShapeWorldInternal.h +++ b/Standalone/Core/src/ShapeWorldInternal.h @@ -72,11 +72,28 @@ static bool VF_IsL98PassagePrepareTraceEnabled() return bEnabled; } -static double VF_L93PassageCarveReachMetres() +static bool VF_IsL130PassageReachProofAuditEnabled() { - // The generated world uses a fixed bounded tube influence. An explicit diagnostic - // option can still select the legacy point-evaluation path for comparisons. - return 4.0; + static const bool bEnabled=VF_IsL88DiagnosticSwitchEnabled( + "VOXELFORGE_L130_PASSAGE_REACH_PROOF_AUDIT"); + return bEnabled; +} + +static constexpr double VF_PassageShellThicknessMetres=0.75; +static constexpr double VF_PassageWallReliefMetres=0.21; +static constexpr double VF_PassageCornerBlendMetres=0.50; +static constexpr double VF_PassageReachMarginMetres=0.01; +// Radial support in metres: shell + maximum relief + the smooth-max support +// (corner-blend width / 6) + a 1 cm guard for float and bound rounding. +static constexpr double VF_PassageInfluenceReachMetres= + VF_PassageShellThicknessMetres+VF_PassageWallReliefMetres + +VF_PassageCornerBlendMetres/6.0+VF_PassageReachMarginMetres; + +static double VF_PassageInfluenceReachCoreVoxels( + std::uint32_t coreVoxelSizeMicrometres) +{ + return VF_PassageInfluenceReachMetres*1000000.0 + /std::max(1,coreVoxelSizeMicrometres); } enum class EPassageDensityQueryCaller : std::size_t @@ -306,7 +323,7 @@ public: profileStats_(profileStats),profileLod_(profileLod), passageCarveReachMetres_(std::isfinite(passageCarveReachMetres) &&passageCarveReachMetres>=0.0?passageCarveReachMetres - :VF_L93PassageCarveReachMetres()) + :VF_PassageInfluenceReachMetres) { mayContainResolvedBoundaryBand_=shape.ResolvedBoundaryBandsIntersectSubvoxelRange( minimumSubvoxels_[2],maximumSubvoxels_[2]); @@ -1204,8 +1221,8 @@ public: if(!ResolvedLayout||ResolvedLayout->passages.empty()||!std::isfinite(X) ||!std::isfinite(Y)||!std::isfinite(Z))return density; constexpr double Q=static_cast(VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel); - constexpr double FloorShellThicknessMetres=0.75; - constexpr double WallReliefMetres=0.21; + constexpr double FloorShellThicknessMetres=VF_PassageShellThicknessMetres; + constexpr double WallReliefMetres=VF_PassageWallReliefMetres; constexpr double OpenAirSideWallHeightMetres=1.0; constexpr double MouthShellBlendMetres=5.0; const double qPerMetre=Q*1000000.0/ @@ -1630,8 +1647,8 @@ public: { constexpr double Q=static_cast( VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel); - const double qPerMetre=Q*1000000.0/ - std::max(1,ResolvedLayout->coreVoxelSizeMicrometres); + const double reachCoreVoxels=VF_PassageInfluenceReachCoreVoxels( + ResolvedLayout->coreVoxelSizeMicrometres); const auto overlaps=[&](const double low[3],const double high[3]) { for(int axis=0;axis<3;++axis) @@ -1648,7 +1665,8 @@ public: const auto& p3=passage.controlPoints[ std::min(segment+2,passage.controlPoints.size()-1)]; const double radius=std::max(static_cast(a.radiusSubvoxels), - static_cast(b.radiusSubvoxels))/Q+1.0; + static_cast(b.radiusSubvoxels))/Q + +reachCoreVoxels+0.01; double low[3]{},high[3]{}; for(int axis=0;axis<3;++axis) { @@ -3499,7 +3517,7 @@ private: double centerZSubvoxels,double queryZSubvoxels,double floorDepthSubvoxels, double qPerMetre) { - constexpr double CornerBlendMetres=0.50; + constexpr double CornerBlendMetres=VF_PassageCornerBlendMetres; const float floorDistance=static_cast(centerZSubvoxels -floorDepthSubvoxels-queryZSubvoxels); return SmoothMaxDistance(roundDistanceSubvoxels,floorDistance, @@ -4811,13 +4829,9 @@ private: PassageNearestNodes.resize(ResolvedLayout?ResolvedLayout->passages.size():0); if(!ResolvedLayout||ResolvedLayout->passages.empty())return; constexpr double Q=static_cast(VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel); - constexpr double PassageShellMetres=0.75; - constexpr double ReliefMetres=0.21; - constexpr double SweepReachMetres=4.0; - constexpr double CornerBlendMetres=0.50; constexpr std::size_t CandidateFineSamplesPerSpan=5; - const double requiredReach=std::max(SweepReachMetres+ReliefMetres - +CornerBlendMetres*0.25,PassageShellMetres+ReliefMetres); + const double requiredReachCoreVoxels=VF_PassageInfluenceReachCoreVoxels( + ResolvedLayout->coreVoxelSizeMicrometres); for(std::size_t passageIndex=0;passageIndexpassages.size(); ++passageIndex) { @@ -4854,7 +4868,7 @@ private: routeMinimum[axis]=std::min(routeMinimum[axis],localMinimum[axis]); routeMaximum[axis]=std::max(routeMaximum[axis],localMaximum[axis]); } - const double localExtent=requiredReach + const double localExtent=requiredReachCoreVoxels +std::max(prepared.radiusA,prepared.radiusB)/Q+0.01; FPassageProofBound proof; for(std::size_t axis=0;axis<3;++axis) @@ -4872,7 +4886,8 @@ private: std::ceil((localMaximum[axis]+localExtent)*Q)); } } - const double routeExtent=maximumRadiusSubvoxels/Q+requiredReach+0.01; + const double routeExtent=maximumRadiusSubvoxels/Q + +requiredReachCoreVoxels+0.01; const double tileExtent=routeExtent; std::array featureMinimum{},featureMaximum{}; for(std::size_t axis=0;axis<3;++axis) @@ -4899,6 +4914,113 @@ private: BuildPassageFeatureNode(0,PassageFeatureOrder.size()); if(!PassageProofBounds.empty()) BuildPassageProofNode(0,PassageProofBounds.size()); + + if(VF_IsL130PassageReachProofAuditEnabled()) + { + constexpr double Q=static_cast( + VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel); + constexpr std::array,8> RadialDirections={{ + {1.0,0.0},{0.7071067811865475,0.7071067811865475}, + {0.0,1.0},{-0.7071067811865475,0.7071067811865475}, + {-1.0,0.0},{-0.7071067811865475,-0.7071067811865475}, + {0.0,-1.0},{0.7071067811865475,-0.7071067811865475}}}; + constexpr std::array CrestHeightsMetres={0.625,0.875}; + const double qPerMetre=Q*1000000.0/ + std::max(1,ResolvedLayout->coreVoxelSizeMicrometres); + const std::array shellOffsetsMetres={0.70,0.78,0.86,0.94, + VF_PassageInfluenceReachMetres-0.005, + VF_PassageInfluenceReachMetres+0.005}; + std::uint64_t sampled=0,signRelevant=0,proofMisses=0,featureMisses=0; + for(std::size_t passageIndex=0; + passageIndex(1, + (segments.size()+127)/128); + for(std::size_t segmentIndex=0;segmentIndex(sampleVoxel[0]), + static_cast(sampleVoxel[1]), + static_cast(sampleVoxel[2])); + ++sampled; + if(std::abs(contribution)<=1.0e-6f)continue; + ++signRelevant; + if(PassageProofNodes.empty() + ||!PassageProofBoundsOverlapNode(0,sampleVoxel, + sampleVoxel)) + ++proofMisses; + std::array sampleMinimum{},sampleMaximum{}; + for(std::size_t axis=0;axis<3;++axis) + { + sampleMinimum[axis]=static_cast( + std::floor(sampleQ[axis])); + sampleMaximum[axis]=static_cast( + std::ceil(sampleQ[axis])); + } + const auto candidates=BuildPassageFeatureTileList( + sampleMinimum,sampleMaximum); + const bool featureContainsSample=std::any_of( + candidates.begin(),candidates.end(), + [&](std::uint32_t featureIndex) + { + return featureIndex0&&signRelevant>0 + &&proofMisses==0&&featureMisses==0; + std::printf("[L130PassageReachProofAudit] reach_m=%.3f sampled=%llu sign_relevant=%llu proof_misses=%llu feature_misses=%llu status=%s\n", + VF_PassageInfluenceReachMetres, + static_cast(sampled), + static_cast(signRelevant), + static_cast(proofMisses), + static_cast(featureMisses), + auditPassed?"PASS":"FAIL"); + if(!auditPassed)std::abort(); + } } bool PassageProofBoundsOverlapNode(int nodeIndex,const double minimum[3], @@ -11442,10 +11564,9 @@ inline void FStandaloneShapeWorld::FScopedPassageTileQueries::prepareSweptTubeBa const FIntVector& origin,std::int32_t step,std::int32_t cells,std::uint32_t seed) { constexpr std::int64_t Q=VoxelForgeCore::WorldAssemblySubvoxelsPerVoxel; - constexpr double InfluenceMetres=4.0; constexpr double OpenAirSideWallHeightMetres=1.0; if(!shape_||step<=0||cells<=0||!std::isfinite(passageCarveReachMetres_) - ||std::abs(passageCarveReachMetres_-InfluenceMetres)>1.0e-9)return; + ||std::abs(passageCarveReachMetres_-VF_PassageInfluenceReachMetres)>1.0e-9)return; const bool profile=profileStats_!=nullptr; const auto prepareStart=profile?std::chrono::steady_clock::now() :std::chrono::steady_clock::time_point{}; @@ -11459,7 +11580,7 @@ inline void FStandaloneShapeWorld::FScopedPassageTileQueries::prepareSweptTubeBa sweep->dimension=cells+3; const std::size_t gridSampleCount=static_cast(sweep->dimension) *static_cast(sweep->dimension)*static_cast(sweep->dimension); - sweep->influenceSubvoxels=InfluenceMetres*static_cast(Q)*1000000.0 + sweep->influenceSubvoxels=passageCarveReachMetres_*static_cast(Q)*1000000.0 /std::max(1,shape_->ResolvedLayout ?shape_->ResolvedLayout->coreVoxelSizeMicrometres:250000); sweep->passageToSweep.assign(passageRouteSegments_.size(),-1); @@ -11473,7 +11594,7 @@ inline void FStandaloneShapeWorld::FScopedPassageTileQueries::prepareSweptTubeBa const double qPerMetre=static_cast(Q)*1000000.0/ std::max(1,shape_->ResolvedLayout ?shape_->ResolvedLayout->coreVoxelSizeMicrometres:250000); - const double shellThickness=0.75*qPerMetre; + const double shellThickness=VF_PassageShellThicknessMetres*qPerMetre; const double stampedOutsideDistance=sweep->influenceSubvoxels+1.0; constexpr double MouthShellBlendMetres=5.0; const double wallReliefShell=0.41*qPerMetre; @@ -11633,7 +11754,7 @@ inline void FStandaloneShapeWorld::FScopedPassageTileQueries::prepareSweptTubeBa // more than cornerWidth/6. Skip its work for pairs outside this exact // support, with a small subvoxel guard for float rounding. The final // shell union only consumes negative distances. - constexpr double CornerBlendMetres=0.50; + constexpr double CornerBlendMetres=VF_PassageCornerBlendMetres; const float roundDistanceFloat=static_cast(signedDistance); const float floorDistanceFloat=static_cast(floorCenterZ-floorDepth-qz); const double flatDistanceLowerBound=std::max( diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/REPORT.md b/Standalone/Research/WorldAssemblerM3/Linux130/REPORT.md new file mode 100644 index 0000000..5623083 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/REPORT.md @@ -0,0 +1,9 @@ +# Linux130 — passage reach + +On `wip/l130-reach-units` from `b96dd73`, passage influence is now **1.0533 m**: 0.75 m shell + 0.21 m relief + 0.50 m smooth-max support (`width/6`) + 0.01 m margin. One metres-to-core-voxels conversion feeds proof, feature, fallback and off-grid bounds; the sweep cutoff uses the same metre value. The dead 4 m cutoff is removed. Evaluator version is 227. + +The debug shell/crest audit sampled 25,728 points, including 5 mm inside and outside the reach; 18,993 had sign-relevant passage contribution. Proof and feature bounds missed none. The nine-station floor probe still peaks at **7.884 mm**, matching L125. The 23 L125 views and six L129 mouth close-ups are byte-identical. Fast verification, walkability and shell audits pass; the seam audit found 0 mismatches across 4 pairs / 4,900 shared samples. + +Clang/GCC W1/W8/W12 hashes agree across all 18 runs. Versus v225, hashes changed for owner4 full-detail, whole-view and LOD0–3; owner2 surface-world and floating-islands whole-view and LOD2–3. Exact-query hashes stayed unchanged. The v227 canonical baselines are recorded; changed hashes reflect the shorter density influence halo, while sampled sign-relevant bounds and captured surfaces remain covered. + +L80 timing used 10 interleaved pairs per stratum/worker count. Across the eight case medians, the weighted deltas were +0.33% for LOD0–2 and +0.31% whole-view. Across 80 paired runs, mean deltas were +0.26% (95% interval −0.44% to +0.96%) and +0.47% (−0.06% to +1.00%); both intervals include zero. No measurable timing change; UE movement was skipped. The Linux UE host build succeeded in 76.30 s with `-NoUBA -MaxParallelActions=4`, without `prlimit`. `ARCHITECTURE.md` and `CODEMAP.md` had no note for this optimized influence reach, so they were unchanged. diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/RunL130HashMatrix.py b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130HashMatrix.py new file mode 100644 index 0000000..dd88298 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130HashMatrix.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +"""Run Clang/GCC owner hashes at W1/W8/W12 and compare with b96dd73.""" +from __future__ import annotations + +import json +import re +import subprocess +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[4] +OUT = ROOT / "Saved/Linux/l130/hashes" +BASELINE = json.loads((ROOT / "Saved/Linux/l125/hashes/summary.json").read_text()) +DATASETS = { + "owner4": ROOT / "Standalone/data/owner_world.json", + "owner2": ROOT / "Standalone/data/regression/owner_world_2strate_l61.json", +} +RECIPES = {"owner4": ("surface-world",), + "owner2": ("surface-world", "floating-islands")} +BINARIES = { + "clang": ROOT / "Saved/Linux/l130/bin/VoxelForgeCoreHeadless-l130-clang", + "gcc": ROOT / "Saved/Linux/l130/bin/VoxelForgeCoreHeadless-l130-gcc", +} +HASH_RE = re.compile(r"^\[Pipeline(?:FullDetailHash|WholeViewHash|LODHash|ExactQueryHash)\].*$", re.M) +STAMP_RE = re.compile(r"^\[VoxelForgeSourceStamp\] sha256=(\S+)$", re.M) + + +def run(dataset: str, recipe: str, workers: int, compiler: str) -> dict: + OUT.mkdir(parents=True, exist_ok=True) + label = f"{dataset}-{recipe}-w{workers}-{compiler}" + log = OUT / f"{label}.log" + layout = OUT / f"{label}.layout.json" + command = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--", + "timeout", "1740s", str(BINARIES[compiler]), str(DATASETS[dataset]), + f"--workers={workers}", "--world-assembler-prototype", "--stream-benchmark", + "--stream-pipeline", "--force-generate", "--clip-radius=3", + "--max-clip-level=8", "--max-level=8", f"--recipe={recipe}", + "--stream-hash", f"--resolved-layout-output={layout}"] + started = time.monotonic() + with log.open("w", encoding="utf-8") as stream: + result = subprocess.run(command, cwd=ROOT, stdout=stream, + stderr=subprocess.STDOUT, check=False, timeout=1740) + output = log.read_text(encoding="utf-8", errors="replace") + hashes = HASH_RE.findall(output) + if result.returncode or len(hashes) != 12: + raise SystemExit(f"hash run failed: {label}; exit={result.returncode} " + f"hashes={len(hashes)} log={log}") + stamp = STAMP_RE.search(output) + row = {"dataset": dataset, "recipe": recipe, "workers": workers, + "compiler": compiler, "exit_code": result.returncode, "hashes": hashes, + "source_stamp": stamp.group(1) if stamp else None, + "elapsed_s": round(time.monotonic() - started, 3), + "log": str(log.relative_to(ROOT))} + print("[L130HashRun] " + json.dumps(row, sort_keys=True), flush=True) + return row + + +def main() -> int: + if any(not path.is_file() for path in (*DATASETS.values(), *BINARIES.values())): + raise SystemExit("missing L130 hash input") + old = {(row["dataset"], row["recipe"], row["workers"], row["compiler"]): row + for row in BASELINE["runs"]} + rows = [] + for dataset, recipes in RECIPES.items(): + for recipe in recipes: + for workers in (1, 8, 12): + for compiler in ("clang", "gcc"): + rows.append(run(dataset, recipe, workers, compiler)) + (OUT / "runs-partial.json").write_text( + json.dumps(rows, indent=2) + "\n", encoding="utf-8") + groups = {} + for dataset, recipes in RECIPES.items(): + for recipe in recipes: + group = [row for row in rows if row["dataset"] == dataset + and row["recipe"] == recipe] + key = f"{dataset}/{recipe}" + stable = all(row["hashes"] == group[0]["hashes"] for row in group) + baseline = old[(dataset, recipe, 12, "clang")]["hashes"] + changed = [i for i, (before, after) in enumerate(zip(baseline, + group[0]["hashes"])) if before != after] + groups[key] = {"all_workers_and_compilers_match": stable, + "matches_b96dd73_v225": not changed, + "changed_hash_rows_from_v225": changed, + "source_stamps": sorted({row["source_stamp"] for row in group})} + if not stable: + raise SystemExit(f"worker/compiler hash mismatch: {key}") + (OUT / "summary.json").write_text( + json.dumps({"baseline_source": "b96dd73", "runs": rows, + "groups": groups}, indent=2) + "\n", encoding="utf-8") + print("[L130HashSummary] " + json.dumps(groups, sort_keys=True), flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/RunL130MouthCloseups.py b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130MouthCloseups.py new file mode 100644 index 0000000..a4c3e5e --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130MouthCloseups.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +"""Render the six L129 b96dd73 mouth views against the L130 meshes.""" +from __future__ import annotations + +import hashlib +import html +import json +import re +import subprocess +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[4] +SOURCE = ROOT / "Saved/Linux/l129/captures/mouth-closeups/before" +SAVED = ROOT / "Saved/Linux/l130/captures/mouth-closeups" +CAPTURES = ROOT / "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups" +DATA = ROOT / "Standalone/data/owner_world.json" +HEADLESS = ROOT / "Saved/Linux/l130/bin/VoxelForgeCoreHeadless-l130-clang" +RENDERER = ROOT / "Saved/Linux/l130/bin/VoxelForgeOffscreenCapture-l130-clang" +HEADLESS_CONFIG = re.compile( + r"^\[HeadlessConfig\].*?camera_m=\(([^)]*)\) camera_rotation_deg=\(([^)]*)\)", re.M) +SCENE = re.compile(r"^\[OffscreenScene\].*?height_center_m=(-?[\d.]+)", re.M) +DRAWN = re.compile(r"drawn_triangles=(\d+)") + + +def wrapped(command: list[str]) -> list[str]: + return ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--", + "timeout", "1740s", *map(str, command)] + + +def run(label: str, command: list[str], log: Path) -> str: + started = time.monotonic() + log.parent.mkdir(parents=True, exist_ok=True) + with log.open("w", encoding="utf-8") as output: + result = subprocess.run(wrapped(command), cwd=ROOT, stdout=output, + stderr=subprocess.STDOUT, check=False, timeout=1740) + content = log.read_text(encoding="utf-8", errors="replace") + if result.returncode: + raise SystemExit(f"{label} failed exit={result.returncode}: {log}") + print(f"[L130MouthProcess] {label} elapsed_s={time.monotonic()-started:.2f}", + flush=True) + return content + + +def parse_vector(text: str) -> tuple[float, ...]: + return tuple(float(value) for value in text.split(",")) + + +def sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def main() -> int: + if any(not path.is_file() for path in (DATA, HEADLESS, RENDERER)): + raise SystemExit("missing L130 mouth capture input") + (CAPTURES / "b96dd73").mkdir(parents=True, exist_ok=True) + (CAPTURES / "L130").mkdir(parents=True, exist_ok=True) + rows = [] + for source_log in sorted(SOURCE.glob("*-mouth-mesh.log")): + name = source_log.name.removesuffix("-mesh.log") + source_render = SOURCE / f"{name}-render.log" + baseline_mesh = SOURCE / f"{name}.vfmesh" + if not all(path.is_file() for path in (source_render, baseline_mesh)): + raise SystemExit(f"missing b96dd73 source artifact for {name}") + config = HEADLESS_CONFIG.search(source_log.read_text()) + scene = SCENE.search(source_render.read_text()) + if config is None or scene is None: + raise SystemExit(f"missing camera metadata for {name}") + camera = parse_vector(config.group(1)) + yaw, pitch = parse_vector(config.group(2)) + height_center = float(scene.group(1)) + camera_arg = ",".join(f"{value:.6f}" for value in (*camera, yaw, pitch)) + candidate_mesh = SAVED / "L130" / f"{name}.vfmesh" + candidate_mesh.parent.mkdir(parents=True, exist_ok=True) + run(f"{name}-mesh", [HEADLESS, DATA, "--world-assembler-prototype", + "--stream-benchmark", "--stream-pipeline", "--workers=12", + "--clip-radius=3", "--max-clip-level=0", "--max-level=0", + "--force-generate", "--recipe=surface-world", f"--camera={camera_arg}", + "--render-distance-chunks=1", f"--mesh-export={candidate_mesh}"], + SAVED / "L130" / f"{name}-mesh.log") + if not candidate_mesh.is_file() or candidate_mesh.stat().st_size == 0: + raise SystemExit(f"empty L130 mesh for {name}") + + render_args = ["--size=1920x1080", + f"--camera-m={','.join(f'{value:.6f}' for value in camera)}", + f"--yaw-deg={yaw:.6f}", f"--pitch-deg={pitch:.6f}", + "--shade=readable", "--headlamp=on", "--height-tint=on", + f"--height-center-m={height_center:.6f}", "--height-range-m=32"] + images = {} + draw_counts = {} + for variant, mesh in (("b96dd73", baseline_mesh), ("L130", candidate_mesh)): + image = CAPTURES / variant / f"{name}.png" + render_log = SAVED / variant / f"{name}-render.log" + content = run(f"{name}-{variant}-render", + [RENDERER, mesh, image, *render_args], render_log) + drawn = DRAWN.search(content) + if drawn is None or int(drawn.group(1)) <= 0 or not image.is_file(): + raise SystemExit(f"render has no visible triangles for {name}/{variant}") + images[variant] = image + draw_counts[variant] = int(drawn.group(1)) + equal = images["b96dd73"].read_bytes() == images["L130"].read_bytes() + row = {"name": name, "camera_m": camera, "yaw_deg": yaw, + "pitch_deg": pitch, "height_center_m": height_center, + "source_mesh": str(baseline_mesh.relative_to(ROOT)), + "candidate_mesh": str(candidate_mesh.relative_to(ROOT)), + "baseline_png": str(images["b96dd73"].relative_to(ROOT)), + "candidate_png": str(images["L130"].relative_to(ROOT)), + "baseline_sha256": sha256(images["b96dd73"]), + "candidate_sha256": sha256(images["L130"]), + "byte_identical": equal, "drawn_triangles": draw_counts} + rows.append(row) + print(f"[L130MouthCompare] {name} byte_identical={equal} " + f"sha256={row['candidate_sha256']}", flush=True) + + if len(rows) != 6: + raise SystemExit(f"expected six L129 mouth views, found {len(rows)}") + (CAPTURES / "summary.json").write_text(json.dumps(rows, indent=2) + "\n") + sections = [] + for row in rows: + name = html.escape(row["name"]) + sections.append(f"

{name}

byte identical: " + f"{str(row['byte_identical']).lower()}

" + f"
b96dd73 source mesh
" + f"
L130 reach units
" + "
") + page = ("L130 mouth closeups" + "" + "

L129 mouth closeups: b96dd73 vs L130

" + "\n".join(sections)) + (CAPTURES / "COMPARE.html").write_text(page) + return 0 if all(row["byte_identical"] for row in rows) else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/RunL130PoseCaptures.py b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130PoseCaptures.py new file mode 100644 index 0000000..827053f --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130PoseCaptures.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +"""Render the 23 L125 camera poses with the L130 evaluator and compare them.""" +from __future__ import annotations + +import html +import importlib.util +import json +import shutil +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[4] +RESEARCH = Path(__file__).resolve().parent +CAPTURES = RESEARCH / "captures" +SAVED = ROOT / "Saved/Linux/l130/captures" +BASELINE_INDEX = (ROOT / "Standalone/Research/WorldAssemblerM3/Linux119" + / "captures/L119/capture-index.json") +REFERENCE = ROOT / "Standalone/Research/WorldAssemblerM3/Linux125/captures/L125" +LAYOUT = ROOT / "Saved/Linux/l130/hashes/owner4-surface-world-w12-clang.layout.json" +HEADLESS = ROOT / "Saved/Linux/l130/bin/VoxelForgeCoreHeadless-l130-clang" +RENDERER = ROOT / "Saved/Linux/l130/bin/VoxelForgeOffscreenCapture-l130-clang" +HELPER_PATH = ROOT / "Standalone/Research/WorldAssemblerM3/Linux113/RunL113Captures.py" + + +def main() -> int: + if any(not path.is_file() for path in + (BASELINE_INDEX, REFERENCE / "passage-0-1-0-rock-floor-station-1.png", + LAYOUT, HEADLESS, RENDERER)): + raise SystemExit("missing pose, layout, or L130 capture input") + spec = importlib.util.spec_from_file_location("l125_capture_runner", + ROOT / "Standalone/Research/WorldAssemblerM3/Linux125/RunL125Captures.py") + if spec is None or spec.loader is None: + raise SystemExit("cannot load the verified L125 pose set") + runner = importlib.util.module_from_spec(spec) + spec.loader.exec_module(runner) + runner.RESEARCH = RESEARCH + runner.CAPTURES = CAPTURES + runner.SAVED = SAVED + runner.LAYOUT = LAYOUT + runner.CLANG = HEADLESS + runner.RENDERER = RENDERER + runner.HELPERS.RESEARCH = RESEARCH + runner.HELPERS.CAPTURES = CAPTURES + runner.HELPERS.SAVED = SAVED + runner.HELPERS.BINARIES = {"L125": HEADLESS} + runner.HELPERS.RENDERERS = {"L125": RENDERER} + if runner.main() != 0: + raise SystemExit("L130 pose generation failed") + + new_captures = CAPTURES / "L125" + new_saved = SAVED / "L125" + index_path = new_captures / "capture-index.json" + data = json.loads(index_path.read_text()) + if len(data["captures"]) != 23: + raise SystemExit(f"expected 23 poses, found {len(data['captures'])}") + identical = 0 + sections = [] + for row in data["captures"]: + name = row["name"] + old_image = REFERENCE / f"{name}.png" + new_image = new_captures / f"{name}.png" + if not old_image.is_file() or not new_image.is_file(): + raise SystemExit(f"missing comparison image for {name}") + same = old_image.read_bytes() == new_image.read_bytes() + identical += int(same) + row["variant"] = "L130-v227" + row["capture"] = row["capture"].replace("captures/L125/", "captures/L130/") + row["scene"] = row["scene"].replace("captures/L125/", "captures/L130/") + row["logs"] = [path.replace("captures/L125/", "captures/L130/") + for path in row.get("logs", [])] + sections.append(f"

{html.escape(row['passage'])} — " + f"{html.escape(row.get('station', ''))}

{html.escape(row['kind'])} · " + f"byte identical: {str(same).lower()}

" + f"
L125 v225
" + f"
L130 v227
" + "
") + if identical != 23: + raise SystemExit(f"only {identical}/23 L125 pose captures are byte-identical") + + index_path.write_text(json.dumps(data, indent=2) + "\n") + old_captures, old_saved = CAPTURES / "L130", SAVED / "L130" + if old_captures.exists(): + shutil.rmtree(old_captures) + if old_saved.exists(): + shutil.rmtree(old_saved) + new_captures.rename(old_captures) + new_saved.rename(old_saved) + page = ("L130 passage captures" + "" + "

L125 v225 vs L130 v227: passage captures

" + "\n".join(sections)) + (CAPTURES / "COMPARE.html").write_text(page) + print(f"[L130PoseCapture] poses=23 byte_identical={identical}/23", flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/RunL130Timing.py b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130Timing.py new file mode 100644 index 0000000..30803bf --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/RunL130Timing.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +"""Five interleaved L80 near-ready runs per stratum/worker vs b96dd73.""" +from __future__ import annotations + +import json +import os +import re +import statistics +import subprocess +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[4] +OUT = ROOT / "Saved/Linux/l130/timing" +PASS_ID = int(os.environ.get("VOXELFORGE_L130_TIMING_PASS", "1")) +REPLICATE_FIRST = (PASS_ID - 1) * 5 + 1 +DATA = ROOT / "Standalone/data/owner_world.json" +BINARIES = { + "b96dd73": ROOT / "Saved/Linux/l125/bin/VoxelForgeCoreHeadless-l125-clang", + "L130": ROOT / "Saved/Linux/l130/bin/VoxelForgeCoreHeadless-l130-clang", +} +CAMERAS = { + 0: (8.0, 16.0, -372.2626953125), + 1: (25.8369140625, 3.19921875, -737.0), + 2: (19.166015625, -14.2001953125, -753.3740234375), + 3: (-20.0625, -5.068359375, -900.353515625), +} +PIPELINE_RE = re.compile(r"^\[StreamPipeline\] (.*)$", re.M) +FIELDS_RE = re.compile(r"([a-zA-Z0-9_]+)=([^ ]+)") +NEAR_RE = re.compile( + r"^\[WorldAssemblerNearLODReady\] lods=0-2 tiles=(\d+)/(\d+) cold_ready_s=([0-9.]+)$", + re.M) + + +def run(strate: int, workers: int, version: str, phase: str, replicate: int) -> dict: + OUT.mkdir(parents=True, exist_ok=True) + pass_suffix = "" if PASS_ID == 1 else f"-p{PASS_ID}" + label = f"s{strate}-w{workers}-{version}-{phase}{replicate}-l130-v227{pass_suffix}" + log = OUT / f"{label}.log" + camera = ",".join(f"{value:.12f}" for value in CAMERAS[strate]) + ",0,0" + command = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--", + "timeout", "1740s", str(BINARIES[version]), str(DATA), + "--world-assembler-prototype", "--stream-benchmark", "--stream-pipeline", + f"--workers={workers}", "--clip-radius=3", "--max-clip-level=8", + "--max-level=8", f"--camera={camera}", "--profile-lod-work", + "--stream-scheduler-policy=3"] + started = time.monotonic() + with log.open("w", encoding="utf-8") as output: + result = subprocess.run(command, cwd=ROOT, stdout=output, + stderr=subprocess.STDOUT, check=False, timeout=1740) + content = log.read_text(encoding="utf-8", errors="replace") + pipeline, near = PIPELINE_RE.search(content), NEAR_RE.search(content) + if result.returncode or pipeline is None or near is None: + raise SystemExit(f"timing run failed: {log}; exit={result.returncode}") + fields = dict(FIELDS_RE.findall(pipeline.group(1))) + row = {"strate": strate, "workers": workers, "version": version, + "phase": phase, "replicate": replicate, "exit_code": result.returncode, + "wall_s": round(time.monotonic() - started, 3), + "lod02_ready_s": float(near.group(3)), + "whole_view_ready_s": float(fields["whole_view_ready"].removesuffix("s")), + "log": str(log.relative_to(ROOT))} + print("[L130TimingRun] " + json.dumps(row, sort_keys=True), flush=True) + return row + + +def main() -> int: + if any(not path.is_file() for path in (DATA, *BINARIES.values())): + raise SystemExit("missing L130 timing input") + OUT.mkdir(parents=True, exist_ok=True) + load_1m = __import__("os").getloadavg()[0] + def cpu_idle(interval: float = 2.0) -> float: + def totals() -> tuple[int, int]: + fields = Path("/proc/stat").read_text().splitlines()[0].split() + values = [int(value) for value in fields[1:]] + return sum(values), values[3] + (values[4] if len(values) > 4 else 0) + before = totals() + time.sleep(interval) + after = totals() + return 100.0 * (after[1] - before[1]) / max(1, after[0] - before[0]) + idle = cpu_idle() + pass_suffix = "" if PASS_ID == 1 else f"-p{PASS_ID}" + (OUT / f"machine-load-v227{pass_suffix}-before.txt").write_text( + f"1-minute load: {load_1m:.2f}\n2-second CPU idle: {idle:.1f}%\n") + print(f"[L130TimingGate] load_1m={load_1m:.2f} cpu_idle_2s={idle:.1f}%", + flush=True) + if load_1m >= 0.9 or idle < 97.0: + raise SystemExit("timing refused: machine is above the quiet-load gate") + + rows = [] + for strate in range(4): + for workers in (8, 12): + for version in BINARIES: + run(strate, workers, version, "warmup", 0) + for replicate in range(REPLICATE_FIRST, REPLICATE_FIRST + 5): + order = tuple(BINARIES) if replicate % 2 else tuple(reversed(BINARIES)) + for version in order: + rows.append(run(strate, workers, version, "measured", replicate)) + (OUT / f"runs-v227{pass_suffix}-partial.json").write_text( + json.dumps(rows, indent=2) + "\n", encoding="utf-8") + prior_runs = [] + if PASS_ID > 1: + previous = OUT / ("v227-summary.json" if PASS_ID == 2 + else "v227-combined-summary.json") + if previous.is_file(): + prior_runs = json.loads(previous.read_text(encoding="utf-8")).get("runs", []) + all_rows = prior_runs + rows + measured_rows = [row for row in all_rows if row["phase"] == "measured"] + summary = [] + for strate in range(4): + for workers in (8, 12): + group_size = sum(row["strate"] == strate and row["workers"] == workers + for row in measured_rows) // 2 + item = {"strate": strate, "workers": workers, + "replicates_per_version": group_size} + medians = {} + for version in BINARIES: + group = [row for row in measured_rows if row["strate"] == strate + and row["workers"] == workers and row["version"] == version] + medians[version] = {} + for key in ("lod02_ready_s", "whole_view_ready_s"): + values = [row[key] for row in group] + medians[version][key] = statistics.median(values) + item[f"{version}_{key}_values"] = values + item[f"{version}_{key}_median"] = medians[version][key] + for key in ("lod02_ready_s", "whole_view_ready_s"): + item[f"L130_vs_b96dd73_{key}_delta_pct"] = round( + 100.0*(medians["L130"][key]/medians["b96dd73"][key]-1.0), 2) + summary.append(item) + summary_path = OUT / ("v227-summary.json" if PASS_ID == 1 + else f"v227-combined-summary.json") + summary_path.write_text(json.dumps( + {"runs": all_rows, "summary": summary}, indent=2) + "\n", encoding="utf-8") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/COMPARE.html b/Standalone/Research/WorldAssemblerM3/Linux130/captures/COMPARE.html new file mode 100644 index 0000000..1ce8f6d --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/captures/COMPARE.html @@ -0,0 +1,23 @@ +L130 passage captures

L125 v225 vs L130 v227: passage captures

passage/0-1/0 — rock-floor/401.7m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — rock-floor/792.8m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — rock-floor/1634.5m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — rock-floor/27.0m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — rock-floor/52.9m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — rock-floor/78.9m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — rock-floor/323.4m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — rock-floor/333.4m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — rock-floor/343.4m

rock-floor-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-1/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-1/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-2/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-2/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-3/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/0-1/0 — section-3/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — section-1/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — section-1/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — section-2/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/1-2/0 — section-2/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — section-1/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — section-1/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — section-2/4m-outside

open-air-close · byte identical: true

L125 v225
L130 v227
+

passage/2-3/0 — section-2/4m-interior-wall

open-air-close · byte identical: true

L125 v225
L130 v227
\ No newline at end of file diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/capture-index.json b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/capture-index.json new file mode 100644 index 0000000..fd465d5 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/capture-index.json @@ -0,0 +1,1562 @@ +{ + "captures": [ + { + "name": "passage-0-1-0-rock-floor-station-1", + "passage": "passage/0-1/0", + "kind": "rock-floor-close", + "station": "rock-floor/401.7m", + "camera": [ + -9.24648786798055, + 19.798675033837775, + -443.9636296749357 + ], + "target": [ + -7.026884524505579, + 20.857335392121104, + -445.66373993191075 + ], + "yaw": 64.50075976736525, + "pitch": -34.65771934187305, + "focus": [ + -7.026884524505579, + 20.857335392121104, + -445.66373993191075 + ], + "center_z": -445.66373993191075, + "route_distance_m": 401.6612010038529, + "requested_route_distance_m": 401.6612010038529, + "route_length_m": 2026.6238040154117, + "planned_floor_m": -445.66373993191075, + "planned_grade_deg": 10.372328677972732, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-rock-floor-station-1.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-1.vfmesh", + "drawn_triangles": 122294, + "source_triangles": 146798, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 401.6612010038529, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -9.24648786798055, + 19.798675033837775, + -443.9636296749357 + ], + "target_actual_m": [ + -7.026884524505579, + 20.857335392121104, + -445.66373993191075 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-1-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-1-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-1-quality.log" + ], + "floor_anchor_position_m": [ + -7.026885053959959, + 20.857335155432953, + -445.66374310012867 + ], + "floor_anchor_normal": [ + 0.16438021494383692, + 0.07357583212203939, + 0.9836491965444629 + ], + "closeup_camera_to_floor_distance_m": 2.989612610955708, + "closeup_floor_normal_alignment": 0.9836491965444629, + "verified_upward_floor_normal": true + }, + { + "name": "passage-0-1-0-rock-floor-station-2", + "passage": "passage/0-1/0", + "kind": "rock-floor-close", + "station": "rock-floor/792.8m", + "camera": [ + -0.021280083711839648, + -26.43771312964049, + -514.3617561596035 + ], + "target": [ + -2.4714859241065525, + -26.227784739959716, + -516.0616688299093 + ], + "yaw": -85.10297944703369, + "pitch": -34.654210347383824, + "focus": [ + -2.4714859241065525, + -26.227784739959716, + -516.0616688299093 + ], + "center_z": -516.0616688299093, + "route_distance_m": 792.8284020077059, + "requested_route_distance_m": 792.8284020077059, + "route_length_m": 2026.6238040154117, + "planned_floor_m": -516.0616688299093, + "planned_grade_deg": 10.367725129664787, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-rock-floor-station-2.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-2.vfmesh", + "drawn_triangles": 586092, + "source_triangles": 626196, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 792.8284020077059, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -0.021280083711839648, + -26.43771312964049, + -514.3617561596035 + ], + "target_actual_m": [ + -2.4714859241065525, + -26.227784739959716, + -516.0616688299093 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-2-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-2-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-2-quality.log" + ], + "floor_anchor_position_m": [ + -2.471476828908, + -26.227785976319144, + -516.0617189697925 + ], + "floor_anchor_normal": [ + -0.179115780575022, + 0.024140888419756926, + 0.9835317761289187 + ], + "closeup_camera_to_floor_distance_m": 2.9895496409822853, + "closeup_floor_normal_alignment": 0.9835317761289187, + "verified_upward_floor_normal": true + }, + { + "name": "passage-0-1-0-rock-floor-station-3", + "passage": "passage/0-1/0", + "kind": "rock-floor-close", + "station": "rock-floor/1634.5m", + "camera": [ + 15.717287112180728, + 19.71739973195528, + -665.8352816543407 + ], + "target": [ + 17.336220092016376, + 17.86620742417785, + -667.5348848643227 + ], + "yaw": 138.82915885966676, + "pitch": -34.64871452830556, + "focus": [ + 17.336220092016376, + 17.86620742417785, + -667.5348848643227 + ], + "center_z": -667.5348848643227, + "route_distance_m": 1634.4566030115589, + "requested_route_distance_m": 1634.4566030115589, + "route_length_m": 2026.6238040154117, + "planned_floor_m": -667.5348848643227, + "planned_grade_deg": 10.360515186362372, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-rock-floor-station-3.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-3.vfmesh", + "drawn_triangles": 137288, + "source_triangles": 166736, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 1634.4566030115589, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 15.717287112180728, + 19.71739973195528, + -665.8352816543407 + ], + "target_actual_m": [ + 17.336220092016376, + 17.86620742417785, + -667.5348848643227 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-3-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-3-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-rock-floor-station-3-quality.log" + ], + "floor_anchor_position_m": [ + 17.33622182815858, + 17.866205324064538, + -667.534869956066 + ], + "floor_anchor_normal": [ + 0.11463807621472542, + -0.13864390562764303, + 0.9836848981834071 + ], + "closeup_camera_to_floor_distance_m": 2.9893930396931125, + "closeup_floor_normal_alignment": 0.9836848981834071, + "verified_upward_floor_normal": true + }, + { + "name": "passage-1-2-0-rock-floor-station-1", + "passage": "passage/1-2/0", + "kind": "rock-floor-close", + "station": "rock-floor/27.0m", + "camera": [ + 15.990262769683945, + 2.495369317804175, + -736.4846720823747 + ], + "target": [ + 15.354493464592624, + 4.868558240151556, + -738.1970266319915 + ], + "yaw": -14.99718988160138, + "pitch": -34.875140724394136, + "focus": [ + 15.354493464592624, + 4.868558240151556, + -738.1970266319915 + ], + "center_z": -738.1970266319915, + "route_distance_m": 26.963657939523273, + "requested_route_distance_m": 26.963657939523273, + "route_length_m": 114.99063175809309, + "planned_floor_m": -738.1970266319915, + "planned_grade_deg": 10.657740387934142, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-rock-floor-station-1.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-1.vfmesh", + "drawn_triangles": 652056, + "source_triangles": 719660, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 26.963657939523273, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 15.990262769683945, + 2.495369317804175, + -736.4846720823747 + ], + "target_actual_m": [ + 15.354493464592624, + 4.868558240151556, + -738.1970266319915 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-1-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-1-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-1-quality.log" + ], + "floor_anchor_position_m": [ + 15.354124807038394, + 4.869920275450426, + -738.1895881032126 + ], + "floor_anchor_normal": [ + -0.047307387705878, + 0.17883124580074233, + 0.9827417751341397 + ], + "closeup_camera_to_floor_distance_m": 2.9916387475909154, + "closeup_floor_normal_alignment": 0.9827417751341397, + "verified_upward_floor_normal": true + }, + { + "name": "passage-1-2-0-rock-floor-station-2", + "passage": "passage/1-2/0", + "kind": "rock-floor-close", + "station": "rock-floor/52.9m", + "camera": [ + -2.48434493546405, + 15.983647301702653, + -741.2835409028854 + ], + "target": [ + -4.76517685476837, + 15.070128626649932, + -742.995373541633 + ], + "yaw": -111.82708648318167, + "pitch": -34.86587426337977, + "focus": [ + -4.76517685476837, + 15.070128626649932, + -742.995373541633 + ], + "center_z": -742.995373541633, + "route_distance_m": 52.927315879046546, + "requested_route_distance_m": 52.927315879046546, + "route_length_m": 114.99063175809309, + "planned_floor_m": -742.995373541633, + "planned_grade_deg": 10.645569354114926, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-rock-floor-station-2.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-2.vfmesh", + "drawn_triangles": 636162, + "source_triangles": 700558, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 52.927315879046546, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -2.48434493546405, + 15.983647301702653, + -741.2835409028854 + ], + "target_actual_m": [ + -4.76517685476837, + 15.070128626649932, + -742.995373541633 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-2-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-2-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-2-quality.log" + ], + "floor_anchor_position_m": [ + -4.766428465537912, + 15.069671584786441, + -742.988228337538 + ], + "floor_anchor_normal": [ + -0.1744301807701029, + -0.061608715063684795, + 0.9827402903436447 + ], + "closeup_camera_to_floor_distance_m": 2.9915240428933867, + "closeup_floor_normal_alignment": 0.9827402903436447, + "verified_upward_floor_normal": true + }, + { + "name": "passage-1-2-0-rock-floor-station-3", + "passage": "passage/1-2/0", + "kind": "rock-floor-close", + "station": "rock-floor/78.9m", + "camera": [ + -13.44544511010513, + -3.995230772069307, + -746.0839041050349 + ], + "target": [ + -12.287009401722694, + -6.161841337747165, + -747.7963166548619 + ], + "yaw": 151.8676321960706, + "pitch": -34.87617050502889, + "focus": [ + -12.287009401722694, + -6.161841337747165, + -747.7963166548619 + ], + "center_z": -747.7963166548619, + "route_distance_m": 78.89097381856982, + "requested_route_distance_m": 78.89097381856982, + "route_length_m": 114.99063175809309, + "planned_floor_m": -747.7963166548619, + "planned_grade_deg": 10.659092990906162, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-rock-floor-station-3.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-3.vfmesh", + "drawn_triangles": 580472, + "source_triangles": 639376, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 78.89097381856982, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -13.44544511010513, + -3.995230772069307, + -746.0839041050349 + ], + "target_actual_m": [ + -12.287009401722694, + -6.161841337747165, + -747.7963166548619 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-3-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-3-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-rock-floor-station-3-quality.log" + ], + "floor_anchor_position_m": [ + -12.283352972838873, + -6.167679829029396, + -747.554756449892 + ], + "floor_anchor_normal": [ + 0.09692807602747124, + -0.15782686841357624, + 0.9826981366036961 + ], + "closeup_camera_to_floor_distance_m": 2.8693901200350096, + "closeup_floor_normal_alignment": 0.9826981366036961, + "verified_upward_floor_normal": true + }, + { + "name": "passage-2-3-0-rock-floor-station-1", + "passage": "passage/2-3/0", + "kind": "rock-floor-close", + "station": "rock-floor/323.4m", + "camera": [ + 6.997568341188331, + -14.934306981606339, + -869.3796844648476 + ], + "target": [ + 9.102823911740126, + -13.661883549736208, + -871.0755965556104 + ], + "yaw": 58.85109570948622, + "pitch": -34.583159686285406, + "focus": [ + 9.102823911740126, + -13.661883549736208, + -871.0755965556104 + ], + "center_z": -871.0755965556104, + "route_distance_m": 323.4481319239866, + "requested_route_distance_m": 323.4481319239866, + "route_length_m": 494.0722798830563, + "planned_floor_m": -871.0755965556104, + "planned_grade_deg": 10.274530613220444, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-rock-floor-station-1.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-1.vfmesh", + "drawn_triangles": 474964, + "source_triangles": 502362, + "verified": true, + "pixel_quality_status": "low_contrast_geometry_visible", + "route_distance_actual_m": 323.4481319239866, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 6.997568341188331, + -14.934306981606339, + -869.3796844648476 + ], + "target_actual_m": [ + 9.102823911740126, + -13.661883549736208, + -871.0755965556104 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-1-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-1-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-1-quality.log" + ], + "floor_anchor_position_m": [ + 9.103799793973732, + -13.661094033901383, + -871.068656948616 + ], + "floor_anchor_normal": [ + 0.14021616794161246, + 0.11018123609139711, + 0.9839713011369495 + ], + "closeup_camera_to_floor_distance_m": 2.9849472681829123, + "closeup_floor_normal_alignment": 0.9839713011369495, + "verified_upward_floor_normal": true + }, + { + "name": "passage-2-3-0-rock-floor-station-2", + "passage": "passage/2-3/0", + "kind": "rock-floor-close", + "station": "rock-floor/333.4m", + "camera": [ + 14.426607883839745, + -8.501776133009574, + -871.1605818845352 + ], + "target": [ + 15.203729308783775, + -6.16777561793481, + -872.8561420785873 + ], + "yaw": 18.41553205389999, + "pitch": -34.576909662847896, + "focus": [ + 15.203729308783775, + -6.16777561793481, + -872.8561420785873 + ], + "center_z": -872.8561420785873, + "route_distance_m": 333.4481319239866, + "requested_route_distance_m": 333.4481319239866, + "route_length_m": 494.0722798830563, + "planned_floor_m": -872.8561420785873, + "planned_grade_deg": 10.266334408339132, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-rock-floor-station-2.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-2.vfmesh", + "drawn_triangles": 494504, + "source_triangles": 524342, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 333.4481319239866, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 14.426607883839745, + -8.501776133009574, + -871.1605818845352 + ], + "target_actual_m": [ + 15.203729308783775, + -6.16777561793481, + -872.8561420785873 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-2-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-2-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-2-quality.log" + ], + "floor_anchor_position_m": [ + 15.204108325185125, + -6.1664350574610705, + -872.848494535829 + ], + "floor_anchor_normal": [ + 0.0468360027958031, + 0.17218671405633393, + 0.9839502651783747 + ], + "closeup_camera_to_floor_distance_m": 2.9845224063213145, + "closeup_floor_normal_alignment": 0.9839502651783747, + "verified_upward_floor_normal": true + }, + { + "name": "passage-2-3-0-rock-floor-station-3", + "passage": "passage/2-3/0", + "kind": "rock-floor-close", + "station": "rock-floor/343.4m", + "camera": [ + 16.176045301879554, + 1.1336183974400118, + -872.9426489764151 + ], + "target": [ + 15.465325445603714, + 3.4887437417106955, + -874.6379150751349 + ], + "yaw": -16.792543840841383, + "pitch": -34.57168620892087, + "focus": [ + 15.465325445603714, + 3.4887437417106955, + -874.6379150751349 + ], + "center_z": -874.6379150751349, + "route_distance_m": 343.4481319239866, + "requested_route_distance_m": 343.4481319239866, + "route_length_m": 494.0722798830563, + "planned_floor_m": -874.6379150751349, + "planned_grade_deg": 10.259484647608062, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-rock-floor-station-3.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-3.vfmesh", + "drawn_triangles": 485356, + "source_triangles": 512664, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 343.4481319239866, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": null, + "closeup_target_surface_distance_m": null, + "closeup_predicted_target_offset_m": null, + "closeup_wall_normal_alignment": null, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 16.176045301879554, + 1.1336183974400118, + -872.9426489764151 + ], + "target_actual_m": [ + 15.465325445603714, + 3.4887437417106955, + -874.6379150751349 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-3-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-3-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-rock-floor-station-3-quality.log" + ], + "floor_anchor_position_m": [ + 15.464091528009144, + 3.4924186701988678, + -874.5280427606272 + ], + "floor_anchor_normal": [ + -0.061689200676463656, + 0.16755705537563617, + 0.9839304221913991 + ], + "closeup_camera_to_floor_distance_m": 2.9298959629846824, + "closeup_floor_normal_alignment": 0.9839304221913991, + "verified_upward_floor_normal": true + }, + { + "name": "passage-0-1-0-openair-1-4m-outside", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-1/4m-outside", + "camera": [ + 13.176702021211483, + 7.149068417345486, + -374.402 + ], + "target": [ + 9.197121888971225, + 7.5527291301707695, + -374.402 + ], + "yaw": -84.20812706837869, + "pitch": 0.0, + "focus": [ + 7.272, + 7.748, + -373.197 + ], + "center_z": -373.197, + "open_air_section": 1, + "closeup_side": "outside", + "closeup_preferred_normal": [ + 0.9948950330600643, + -0.1009151782063209, + 0.0 + ], + "camera_target_distance_m": 4.000000000000001, + "route_distance_m": 8.3545, + "requested_route_distance_m": 8.3545, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-1-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-outside.vfmesh", + "drawn_triangles": 275333, + "source_triangles": 327745, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 8.3545, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.999999999999992, + "closeup_target_surface_distance_m": 0.794053842406799, + "closeup_predicted_target_offset_m": 0.794053842406799, + "closeup_wall_normal_alignment": 0.9449803535183738, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 12.920589450293994, + 7.974422667153486, + -375.0086678277374 + ], + "target_actual_m": [ + 9.12386703491211, + 8.0, + -373.75 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-outside-quality.log" + ] + }, + { + "name": "passage-0-1-0-openair-1-4m-interior-wall", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-1/4m-interior-wall", + "camera": [ + 7.395778712540976, + 3.8749008126934172, + -374.89997477205173 + ], + "target": [ + 8.778272394312646, + 7.595214286886338, + -374.402 + ], + "yaw": 20.38540702862518, + "pitch": 7.1515181408188955, + "focus": [ + 7.272, + 7.748, + -373.197 + ], + "center_z": -373.197, + "open_air_section": 1, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + -0.9948950330600643, + 0.1009151782063209, + -0.0 + ], + "camera_target_distance_m": 3.9999999999999973, + "route_distance_m": 8.3545, + "requested_route_distance_m": 8.3545, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-1-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall.vfmesh", + "drawn_triangles": 308012, + "source_triangles": 368124, + "verified": true, + "pixel_quality_status": "low_contrast_geometry_visible", + "route_distance_actual_m": 8.3545, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.999999999999992, + "closeup_target_surface_distance_m": 0.8416597466625043, + "closeup_predicted_target_offset_m": 0.8416597466625043, + "closeup_wall_normal_alignment": 0.9449803535183738, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 5.327144619530225, + 8.025577332846515, + -372.4913321722626 + ], + "target_actual_m": [ + 9.12386703491211, + 8.0, + -373.75 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-0-1-0-openair-2-4m-outside", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-2/4m-outside", + "camera": [ + 12.814097656232029, + 0.949800892309409, + -375.51163279923776 + ], + "target": [ + 8.842807594702599, + 1.4281890685821654, + -375.51163279923776 + ], + "yaw": -83.1311525734364, + "pitch": 0.0, + "focus": [ + 6.603, + 1.698, + -374.149 + ], + "center_z": -374.149, + "open_air_section": 2, + "closeup_side": "outside", + "closeup_preferred_normal": [ + 0.9928225153823576, + -0.1195970440681891, + 0.0 + ], + "camera_target_distance_m": 4.0, + "route_distance_m": 14.4925, + "requested_route_distance_m": 14.4925, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-2-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-outside.vfmesh", + "drawn_triangles": 275333, + "source_triangles": 327745, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 14.4925, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.999999999999995, + "closeup_target_surface_distance_m": 1.0963161771133416, + "closeup_predicted_target_offset_m": 1.0963161771133416, + "closeup_wall_normal_alignment": 0.39413995490510356, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 9.613469253122387, + 1.5471847686714795, + -379.60073544787906 + ], + "target_actual_m": [ + 7.959597110748291, + 1.0, + -376.0 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-outside-quality.log" + ] + }, + { + "name": "passage-0-1-0-openair-2-4m-interior-wall", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-2/4m-interior-wall", + "camera": [ + 6.939570778854576, + -2.1803140897652855, + -376.2060303004211 + ], + "target": [ + 8.388084903173432, + 1.4829657169105679, + -375.51163279923776 + ], + "yaw": 21.574563086437188, + "pitch": 9.997160707081923, + "focus": [ + 6.603, + 1.698, + -374.149 + ], + "center_z": -374.149, + "open_air_section": 2, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + -0.9928225153823576, + 0.1195970440681891, + -0.0 + ], + "camera_target_distance_m": 3.999999999999997, + "route_distance_m": 14.4925, + "requested_route_distance_m": 14.4925, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-2-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall.vfmesh", + "drawn_triangles": 345026, + "source_triangles": 414658, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 14.4925, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.000000000000001, + "closeup_target_surface_distance_m": 0.7732263275133904, + "closeup_predicted_target_offset_m": 0.7732263275133904, + "closeup_wall_normal_alignment": 0.286757829360229, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 6.619154002331269, + 0.5694445029418322, + -372.249825471136 + ], + "target_actual_m": [ + 7.85216206252137, + 1.2143337388310353, + -376.0 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-0-1-0-openair-3-4m-outside", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-3/4m-outside", + "camera": [ + -28.32291429976088, + -16.444327461849063, + -600.6066327992378 + ], + "target": [ + -25.004026673221745, + -14.211619482196229, + -600.6066327992378 + ], + "yaw": 56.07018168236039, + "pitch": 0.0, + "focus": [ + -22.1, + -12.258, + -599.244 + ], + "center_z": -599.244, + "open_air_section": 3, + "closeup_side": "outside", + "closeup_preferred_normal": [ + -0.8297219066347834, + -0.5581769949132084, + 0.0 + ], + "camera_target_distance_m": 4.000000000000001, + "route_distance_m": 1265.3425000000002, + "requested_route_distance_m": 1265.3425000000002, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-3-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-outside.vfmesh", + "drawn_triangles": 149234, + "source_triangles": 181128, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 1265.3425000000002, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.9999999999999907, + "closeup_target_surface_distance_m": 0.06836631107301705, + "closeup_predicted_target_offset_m": 0.06836631107301705, + "closeup_wall_normal_alignment": 0.9604329420550252, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -28.63982379180018, + -15.582695163623317, + -601.2438490311043 + ], + "target_actual_m": [ + -24.955621627611308, + -14.176566764792845, + -600.5734332352072 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-outside-quality.log" + ] + }, + { + "name": "passage-0-1-0-openair-3-4m-interior-wall", + "passage": "passage/0-1/0", + "kind": "open-air-close", + "station": "section-3/4m-interior-wall", + "camera": [ + -26.071689640946218, + -10.338278587083852, + -601.3036807194 + ], + "target": [ + -24.774901932566983, + -14.057480898923608, + -600.6066327992378 + ], + "yaw": 160.77768453528284, + "pitch": 10.035712777782798, + "focus": [ + -22.1, + -12.258, + -599.244 + ], + "center_z": -599.244, + "open_air_section": 3, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + 0.8297219066347834, + 0.5581769949132084, + -0.0 + ], + "camera_target_distance_m": 4.000000000000005, + "route_distance_m": 1265.3425000000002, + "requested_route_distance_m": 1265.3425000000002, + "route_length_m": 2026.6238040154117, + "variant": "L130-v227", + "capture": "captures/L130/passage-0-1-0-openair-3-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall.vfmesh", + "drawn_triangles": 148100, + "source_triangles": 180244, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 1265.3425000000002, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.000000000000004, + "closeup_target_surface_distance_m": 0.15667051955483755, + "closeup_predicted_target_offset_m": 0.15667051955483755, + "closeup_wall_normal_alignment": 0.936006465878356, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -21.875641690065105, + -11.887416826703374, + -599.3020917133557 + ], + "target_actual_m": [ + -24.866552934428398, + -14.149067333208382, + -600.6947104389109 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-1-2-0-openair-1-4m-outside", + "passage": "passage/1-2/0", + "kind": "open-air-close", + "station": "section-1/4m-outside", + "camera": [ + -4.699079444431819, + -4.6537955842685985, + -748.15 + ], + "target": [ + -7.452748333327923, + -7.555055250400828, + -748.15 + ], + "yaw": -136.49505148095557, + "pitch": 0.0, + "focus": [ + -9.518, + -9.731, + -745.88 + ], + "center_z": -745.88, + "open_air_section": 1, + "closeup_side": "outside", + "closeup_preferred_normal": [ + 0.688417222224026, + 0.7253149165330574, + 0.0 + ], + "camera_target_distance_m": 4.000000000000001, + "route_distance_m": 83.504, + "requested_route_distance_m": 83.504, + "route_length_m": 114.99063175809309, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-openair-1-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-outside.vfmesh", + "drawn_triangles": 620814, + "source_triangles": 684776, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 83.504, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.9999999999999654, + "closeup_target_surface_distance_m": 0.9023580264896125, + "closeup_predicted_target_offset_m": 0.9023580264896125, + "closeup_wall_normal_alignment": 0.5604211333378514, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -8.046760432303138, + -4.114982136123087, + -749.9844534333902 + ], + "target_actual_m": [ + -8.0, + -7.25, + -747.5006103515625 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-outside-quality.log" + ] + }, + { + "name": "passage-1-2-0-openair-1-4m-interior-wall", + "passage": "passage/1-2/0", + "kind": "open-air-close", + "station": "section-1/4m-interior-wall", + "camera": [ + -6.0956279351195075, + -11.653774892861163, + -748.8673569837389 + ], + "target": [ + -8.16773669839842, + -8.308365466344922, + -748.15 + ], + "yaw": -31.773605793127505, + "pitch": 10.331275124559749, + "focus": [ + -9.518, + -9.731, + -745.88 + ], + "center_z": -745.88, + "open_air_section": 1, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + -0.688417222224026, + -0.7253149165330574, + -0.0 + ], + "camera_target_distance_m": 3.999999999999997, + "route_distance_m": 83.504, + "requested_route_distance_m": 83.504, + "route_length_m": 114.99063175809309, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-openair-1-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall.vfmesh", + "drawn_triangles": 609757, + "source_triangles": 668131, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 83.504, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 3.999999999999999, + "closeup_target_surface_distance_m": 0.6509430039577998, + "closeup_predicted_target_offset_m": 0.6509430039577998, + "closeup_wall_normal_alignment": 0.7808473937095911, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -8.525095579521167, + -12.94135557024142, + -748.3220319510015 + ], + "target_actual_m": [ + -8.18421537084871, + -8.958641713644115, + -748.1744141343152 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-1-2-0-openair-2-4m-outside", + "passage": "passage/1-2/0", + "kind": "open-air-close", + "station": "section-2/4m-outside", + "camera": [ + 6.53817273275958, + -4.657210376135293, + -752.013 + ], + "target": [ + 8.159152142647708, + -8.31404312493838, + -752.013 + ], + "yaw": 156.09352823535562, + "pitch": 0.0, + "focus": [ + 9.43, + -11.181, + -749.743 + ], + "center_z": -749.743, + "open_air_section": 2, + "closeup_side": "outside", + "closeup_preferred_normal": [ + -0.40524485247203174, + 0.9142081872007717, + 0.0 + ], + "camera_target_distance_m": 4.0, + "route_distance_m": 104.362, + "requested_route_distance_m": 104.362, + "route_length_m": 114.99063175809309, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-openair-2-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-outside.vfmesh", + "drawn_triangles": 584542, + "source_triangles": 637002, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 104.362, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.0, + "closeup_target_surface_distance_m": 0.5901774459243846, + "closeup_predicted_target_offset_m": 0.5901774459243846, + "closeup_wall_normal_alignment": 0.9891249705782158, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 6.359624549359488, + -5.416552010781576, + -752.0616659309658 + ], + "target_actual_m": [ + 8.5, + -8.79556763526633, + -752.0293187551489 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-outside-quality.log" + ] + }, + { + "name": "passage-1-2-0-openair-2-4m-interior-wall", + "passage": "passage/1-2/0", + "kind": "open-air-close", + "station": "section-2/4m-interior-wall", + "camera": [ + 12.438590152225206, + -8.574465388721983, + -752.7261335058829 + ], + "target": [ + 8.55317187096847, + -9.20292810238377, + -752.013 + ], + "yaw": -99.18796190221158, + "pitch": 10.269787281460902, + "focus": [ + 9.43, + -11.181, + -749.743 + ], + "center_z": -749.743, + "open_air_section": 2, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + 0.40524485247203174, + -0.9142081872007717, + -0.0 + ], + "camera_target_distance_m": 3.9999999999999973, + "route_distance_m": 104.362, + "requested_route_distance_m": 104.362, + "route_length_m": 114.99063175809309, + "variant": "L130-v227", + "capture": "captures/L130/passage-1-2-0-openair-2-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall.vfmesh", + "drawn_triangles": 572258, + "source_triangles": 618646, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 104.362, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.000000000000001, + "closeup_target_surface_distance_m": 0.353159827911248, + "closeup_predicted_target_offset_m": 0.353159827911248, + "closeup_wall_normal_alignment": 0.9983988827266467, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + 9.748104215680776, + -12.666965794821667, + -752.0265932958123 + ], + "target_actual_m": [ + 8.335827076712103, + -8.924626207433736, + -752.0074179101423 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-2-3-0-openair-1-4m-outside", + "passage": "passage/2-3/0", + "kind": "open-air-close", + "station": "section-1/4m-outside", + "camera": [ + -3.5840423774965293, + -5.521048309862215, + -815.8969999999999 + ], + "target": [ + -5.637732447498513, + -8.953592132798093, + -815.8969999999999 + ], + "yaw": -149.10792796365394, + "pitch": 0.0, + "focus": [ + -7.178, + -11.528, + -813.627 + ], + "center_z": -813.627, + "open_air_section": 1, + "closeup_side": "outside", + "closeup_preferred_normal": [ + 0.5134225175004958, + 0.8581359557339694, + 0.0 + ], + "camera_target_distance_m": 4.0, + "route_distance_m": 16.616500000000002, + "requested_route_distance_m": 16.616500000000002, + "route_length_m": 494.0722798830563, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-openair-1-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-outside.vfmesh", + "drawn_triangles": 104612, + "source_triangles": 129326, + "verified": true, + "pixel_quality_status": "low_contrast_geometry_visible", + "route_distance_actual_m": 16.616500000000002, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.0000000000000036, + "closeup_target_surface_distance_m": 0.29188924025474844, + "closeup_predicted_target_offset_m": 0.29188924025474844, + "closeup_wall_normal_alignment": 0.6703275045296155, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -3.7918253987505834, + -7.16028175130118, + -813.227396563761 + ], + "target_actual_m": [ + -5.7833741859987065, + -9.093313475424294, + -816.1078690565205 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-outside-quality.log" + ] + }, + { + "name": "passage-2-3-0-openair-1-4m-interior-wall", + "passage": "passage/2-3/0", + "kind": "open-air-close", + "station": "section-1/4m-interior-wall", + "camera": [ + -3.4141605326349946, + -12.659565888737353, + -816.5879167710818 + ], + "target": [ + -6.170971760123668, + -9.844849940114793, + -815.8969999999999 + ], + "yaw": -44.40454805561343, + "pitch": 9.946538162082001, + "focus": [ + -7.178, + -11.528, + -813.627 + ], + "center_z": -813.627, + "open_air_section": 1, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + -0.5134225175004958, + -0.8581359557339694, + -0.0 + ], + "camera_target_distance_m": 4.000000000000005, + "route_distance_m": 16.616500000000002, + "requested_route_distance_m": 16.616500000000002, + "route_length_m": 494.0722798830563, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-openair-1-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall.vfmesh", + "drawn_triangles": 94962, + "source_triangles": 118028, + "verified": true, + "pixel_quality_status": "low_contrast_geometry_visible", + "route_distance_actual_m": 16.616500000000002, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.0, + "closeup_target_surface_distance_m": 0.41920390486225767, + "closeup_predicted_target_offset_m": 0.41920390486225767, + "closeup_wall_normal_alignment": 0.740744136337711, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -7.998432705401559, + -11.833936581758076, + -818.2481168532394 + ], + "target_actual_m": [ + -5.94757062165508, + -9.608161331921629, + -815.6327986602337 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall-quality.log" + ] + }, + { + "name": "passage-2-3-0-openair-2-4m-outside", + "passage": "passage/2-3/0", + "kind": "open-air-close", + "station": "section-2/4m-outside", + "camera": [ + -4.5562890668466025, + 4.648574813628143, + -879.7479999999999 + ], + "target": [ + -7.40869531436283, + 7.452817777269203, + -879.7479999999999 + ], + "yaw": -45.487830534998494, + "pitch": 0.0, + "focus": [ + -9.548, + 9.556, + -877.478 + ], + "center_z": -877.478, + "open_air_section": 2, + "closeup_side": "outside", + "closeup_preferred_normal": [ + 0.7131015618790567, + -0.7010607409102652, + 0.0 + ], + "camera_target_distance_m": 4.000000000000001, + "route_distance_m": 374.929, + "requested_route_distance_m": 374.929, + "route_length_m": 494.0722798830563, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-openair-2-4m-outside.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-outside.vfmesh", + "drawn_triangles": 475860, + "source_triangles": 504244, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 374.929, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.0, + "closeup_target_surface_distance_m": 1.7280841589725482, + "closeup_predicted_target_offset_m": 1.7280841589725482, + "closeup_wall_normal_alignment": 0.6707889779439669, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -7.47193274788199, + 5.182168353356822, + -879.6783722112204 + ], + "target_actual_m": [ + -7.306445568768645, + 9.17777802625833, + -879.7662205769708 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-outside-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-outside-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-outside-quality.log" + ] + }, + { + "name": "passage-2-3-0-openair-2-4m-interior-wall", + "passage": "passage/2-3/0", + "kind": "open-air-close", + "station": "section-2/4m-interior-wall", + "camera": [ + -11.533986119377625, + 6.164550123765492, + -880.4395357921604 + ], + "target": [ + -8.149320771422074, + 8.180937668487475, + -879.7479999999999 + ], + "yaw": 59.215963829172296, + "pitch": 9.955540417812847, + "focus": [ + -9.548, + 9.556, + -877.478 + ], + "center_z": -877.478, + "open_air_section": 2, + "closeup_side": "interior-wall", + "closeup_preferred_normal": [ + -0.7131015618790567, + 0.7010607409102652, + -0.0 + ], + "camera_target_distance_m": 4.000000000000007, + "route_distance_m": 374.929, + "requested_route_distance_m": 374.929, + "route_length_m": 494.0722798830563, + "variant": "L130-v227", + "capture": "captures/L130/passage-2-3-0-openair-2-4m-interior-wall.png", + "scene": "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall.vfmesh", + "drawn_triangles": 486480, + "source_triangles": 513552, + "verified": true, + "pixel_quality_status": "pass", + "route_distance_actual_m": 374.929, + "route_station_adjustment_m": 0.0, + "closeup_camera_target_distance_m": 4.0, + "closeup_target_surface_distance_m": 1.0286227628002445, + "closeup_predicted_target_offset_m": 1.0286227628002445, + "closeup_wall_normal_alignment": 0.720019406420326, + "fallback_kind": null, + "fallback_surface_distance_m": null, + "camera_actual_m": [ + -8.257109087497915, + 13.208090205453457, + -879.7612149430302 + ], + "target_actual_m": [ + -8.149320771422074, + 9.209558486938477, + -879.75 + ], + "logs": [ + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall-mesh.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall-render.log", + "Saved/Linux/l130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall-quality.log" + ] + } + ] +} diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall.png new file mode 100644 index 0000000..1fd88a4 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-outside.png new file mode 100644 index 0000000..87570be Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-1-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall.png new file mode 100644 index 0000000..f76e648 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-outside.png new file mode 100644 index 0000000..c19fc5f Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-2-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall.png new file mode 100644 index 0000000..7dcd833 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-outside.png new file mode 100644 index 0000000..816ba1d Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-openair-3-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-1.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-1.png new file mode 100644 index 0000000..e67e8c5 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-1.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-2.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-2.png new file mode 100644 index 0000000..2b35b85 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-2.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-3.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-3.png new file mode 100644 index 0000000..bed41ff Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-0-1-0-rock-floor-station-3.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall.png new file mode 100644 index 0000000..7569f8c Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-outside.png new file mode 100644 index 0000000..cd3c8b5 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-1-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall.png new file mode 100644 index 0000000..a6be396 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-outside.png new file mode 100644 index 0000000..c00f532 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-openair-2-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-1.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-1.png new file mode 100644 index 0000000..3611714 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-1.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-2.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-2.png new file mode 100644 index 0000000..9ac3f59 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-2.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-3.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-3.png new file mode 100644 index 0000000..5b0e0d2 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-1-2-0-rock-floor-station-3.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall.png new file mode 100644 index 0000000..8a9efbd Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-outside.png new file mode 100644 index 0000000..6ce2868 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-1-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall.png new file mode 100644 index 0000000..8532d70 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-interior-wall.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-outside.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-outside.png new file mode 100644 index 0000000..e9fef5f Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-openair-2-4m-outside.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-1.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-1.png new file mode 100644 index 0000000..0413199 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-1.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-2.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-2.png new file mode 100644 index 0000000..f823d6e Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-2.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-3.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-3.png new file mode 100644 index 0000000..279866a Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/L130/passage-2-3-0-rock-floor-station-3.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/COMPARE.html b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/COMPARE.html new file mode 100644 index 0000000..1795656 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/COMPARE.html @@ -0,0 +1,6 @@ +L130 mouth closeups

L129 mouth closeups: b96dd73 vs L130

passage-0-1-0-lower-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
+

passage-0-1-0-upper-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
+

passage-1-2-0-lower-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
+

passage-1-2-0-upper-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
+

passage-2-3-0-lower-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
+

passage-2-3-0-upper-mouth

byte identical: true

b96dd73 source mesh
L130 reach units
\ No newline at end of file diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-lower-mouth.png new file mode 100644 index 0000000..327e249 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-upper-mouth.png new file mode 100644 index 0000000..aef17f5 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-lower-mouth.png new file mode 100644 index 0000000..2c88614 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-upper-mouth.png new file mode 100644 index 0000000..2588c0a Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-lower-mouth.png new file mode 100644 index 0000000..61238e8 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-upper-mouth.png new file mode 100644 index 0000000..6b484f8 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-lower-mouth.png new file mode 100644 index 0000000..327e249 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-upper-mouth.png new file mode 100644 index 0000000..aef17f5 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-lower-mouth.png new file mode 100644 index 0000000..2c88614 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-upper-mouth.png new file mode 100644 index 0000000..2588c0a Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-lower-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-lower-mouth.png new file mode 100644 index 0000000..61238e8 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-lower-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-upper-mouth.png b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-upper-mouth.png new file mode 100644 index 0000000..6b484f8 Binary files /dev/null and b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-upper-mouth.png differ diff --git a/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/summary.json b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/summary.json new file mode 100644 index 0000000..7af8865 --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/summary.json @@ -0,0 +1,134 @@ +[ + { + "name": "passage-0-1-0-lower-mouth", + "camera_m": [ + 32.688347, + 9.553723, + -735.48053 + ], + "yaw_deg": -132.845, + "pitch_deg": -6.052, + "height_center_m": -736.267, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-0-1-0-lower-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-0-1-0-lower-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-lower-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-lower-mouth.png", + "baseline_sha256": "aff7310b94e1b57e9cd1e42d3294e10964aed4a56e74bec8c1cdc0a5b2bffa98", + "candidate_sha256": "aff7310b94e1b57e9cd1e42d3294e10964aed4a56e74bec8c1cdc0a5b2bffa98", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 549170, + "L130": 549170 + } + }, + { + "name": "passage-0-1-0-upper-mouth", + "camera_m": [ + 8.324777, + 20.450708, + -371.84259 + ], + "yaw_deg": -175.826, + "pitch_deg": -0.889, + "height_center_m": -372.122, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-0-1-0-upper-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-0-1-0-upper-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-0-1-0-upper-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-0-1-0-upper-mouth.png", + "baseline_sha256": "76dbb3263eb4f2018d13496f42b6eff7eb875e2029358776e22337aea8893a6d", + "candidate_sha256": "76dbb3263eb4f2018d13496f42b6eff7eb875e2029358776e22337aea8893a6d", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 243380, + "L130": 243380 + } + }, + { + "name": "passage-1-2-0-lower-mouth", + "camera_m": [ + 27.129938, + -19.07345, + -751.877197 + ], + "yaw_deg": -58.537, + "pitch_deg": -5.944, + "height_center_m": -751.734, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-1-2-0-lower-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-1-2-0-lower-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-lower-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-lower-mouth.png", + "baseline_sha256": "1c193b6fcb65b98b1c721704990392dc816486639e047b53bb72b4a17d89ae4c", + "candidate_sha256": "1c193b6fcb65b98b1c721704990392dc816486639e047b53bb72b4a17d89ae4c", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 544808, + "L130": 544808 + } + }, + { + "name": "passage-1-2-0-upper-mouth", + "camera_m": [ + 23.391808, + -15.509525, + -731.781067 + ], + "yaw_deg": -72.785, + "pitch_deg": -0.897, + "height_center_m": -730.561, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-1-2-0-upper-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-1-2-0-upper-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-1-2-0-upper-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-1-2-0-upper-mouth.png", + "baseline_sha256": "28576cefb1b59601d2e68981a7b77fc28a1d667c58ab27292deac0acd9deb338", + "candidate_sha256": "28576cefb1b59601d2e68981a7b77fc28a1d667c58ab27292deac0acd9deb338", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 593026, + "L130": 593026 + } + }, + { + "name": "passage-2-3-0-lower-mouth", + "camera_m": [ + -28.589163, + -1.226313, + -898.811707 + ], + "yaw_deg": 114.256, + "pitch_deg": -6.159, + "height_center_m": -898.713, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-2-3-0-lower-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-2-3-0-lower-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-lower-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-lower-mouth.png", + "baseline_sha256": "58cd3ea88c754afab20d1cdcaf5f0edf676f0303d9f392d3632a6f2257205766", + "candidate_sha256": "58cd3ea88c754afab20d1cdcaf5f0edf676f0303d9f392d3632a6f2257205766", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 293832, + "L130": 293832 + } + }, + { + "name": "passage-2-3-0-upper-mouth", + "camera_m": [ + -24.455027, + -5.631774, + -811.975403 + ], + "yaw_deg": 82.691, + "pitch_deg": -0.896, + "height_center_m": -810.755, + "source_mesh": "Saved/Linux/l129/captures/mouth-closeups/before/passage-2-3-0-upper-mouth.vfmesh", + "candidate_mesh": "Saved/Linux/l130/captures/mouth-closeups/L130/passage-2-3-0-upper-mouth.vfmesh", + "baseline_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/b96dd73/passage-2-3-0-upper-mouth.png", + "candidate_png": "Standalone/Research/WorldAssemblerM3/Linux130/captures/mouth-closeups/L130/passage-2-3-0-upper-mouth.png", + "baseline_sha256": "6b903c68fac1a20783185afbac8cdad717c6e9374e665e3618e118c5a6aadf51", + "candidate_sha256": "6b903c68fac1a20783185afbac8cdad717c6e9374e665e3618e118c5a6aadf51", + "byte_identical": true, + "drawn_triangles": { + "b96dd73": 59554, + "L130": 59554 + } + } +] diff --git a/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-floating-islands-style2-v227.baseline b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-floating-islands-style2-v227.baseline new file mode 100644 index 0000000..e534ea5 --- /dev/null +++ b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-floating-islands-style2-v227.baseline @@ -0,0 +1,12 @@ +[PipelineFullDetailHash] tiles=960 density=0x91931a57a067fd92 mesh=0xa818654be89790ac payload=0x370ff80451105a39 topology=0x06e507557aa70173 +[PipelineWholeViewHash] tiles=2370 density=0xf4d3d09d3f31d9bc mesh=0x520f545165440f40 payload=0x6a45502e6bb7ae01 topology=0x8f7d03ba1e2000f3 +[PipelineLODHash] lod=0 tiles=512 density=0x2fd4c78685a43cfe mesh=0x50478cff1c1f8ca0 payload=0x54e48e57e0af26de topology=0x860c011cfdb9833a +[PipelineLODHash] lod=1 tiles=448 density=0x4b8d9a6dcd2942ad mesh=0x17e89b7087bfe711 payload=0x2389c109eb780db6 topology=0x7eccd4cf560d0630 +[PipelineLODHash] lod=2 tiles=320 density=0x7640a0646ee5ac17 mesh=0x9b63c5aa29160969 payload=0x91cd7ca9a828149b topology=0xcb558843c345a327 +[PipelineLODHash] lod=3 tiles=208 density=0xdd07fe8f31ede73a mesh=0xfaa2f90438226625 payload=0x86904d144f5db47c topology=0xcfd10c90d38f3fca +[PipelineLODHash] lod=4 tiles=240 density=0xfb11591772a3d18e mesh=0xebf2baee8764591b payload=0xe491d7ac9c0061ad topology=0xd618ac33b95ce494 +[PipelineLODHash] lod=5 tiles=144 density=0x2f8b7b7fb1e67258 mesh=0x4cd508cbe97344fd payload=0x2b6e96a6050458c9 topology=0x4ff6d0eda8988573 +[PipelineLODHash] lod=6 tiles=96 density=0x0114a34c8b8d6113 mesh=0xb1fec4d01ae1fa44 payload=0x3e50cfd429b8e950 topology=0x08090c96d15c1618 +[PipelineLODHash] lod=7 tiles=96 density=0x3836ed8cfce73418 mesh=0x40bc6589c5fc1aac payload=0x677349bcae16790f topology=0x36e3aa53192e6a6b +[PipelineLODHash] lod=8 tiles=306 density=0x144f3c1fd722708b mesh=0xef77b28bf7fd9453 payload=0xe3f47b37fcd61489 topology=0x5a3c73e295494e04 +[PipelineExactQueryHash] probes=9 density=0x7b7c50ac24ccadcc unclamped=0x7b7c50ac24ccadcc detail=0xefcba20c0c70c415 collision=0xe604823a249029bf path=direct-Core-queries diff --git a/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-owner4-surface-world-style1-v227.baseline b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-owner4-surface-world-style1-v227.baseline new file mode 100644 index 0000000..f41f82b --- /dev/null +++ b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-owner4-surface-world-style1-v227.baseline @@ -0,0 +1,12 @@ +[PipelineFullDetailHash] tiles=960 density=0x11802e529414a62a mesh=0xee7dab071f572c46 payload=0x824a7c07f3cd3f8f topology=0x14a372c4f0003a9b +[PipelineWholeViewHash] tiles=2578 density=0x077534532d13b549 mesh=0x0932314a7475fed4 payload=0x6c2bfa3e4a72f8dc topology=0x7e6b3b76ed31bd0f +[PipelineLODHash] lod=0 tiles=512 density=0xf8cbb499fca6f62b mesh=0xf3b8e097407eb9e1 payload=0xeef6bfe266279de5 topology=0x79c5ed3811360d1e +[PipelineLODHash] lod=1 tiles=448 density=0x7d95c955a8433cac mesh=0xa803bb427deeba9a payload=0xf4718f1ce85d4f4f topology=0x7b770585aafd8174 +[PipelineLODHash] lod=2 tiles=320 density=0x1c9445d15cce0de3 mesh=0x4da3bcf40eb6d137 payload=0x561116e3bbf34b8e topology=0x5e0e5a961bea641e +[PipelineLODHash] lod=3 tiles=272 density=0xe505981dea225509 mesh=0x1b13027b94137ad0 payload=0x3f93cd2fda3fef1c topology=0x8e160cd2f5ab0805 +[PipelineLODHash] lod=4 tiles=272 density=0xb743eb64967bddcd mesh=0xf6b5bd36b0ebfead payload=0xd1284c1540f50636 topology=0x4a6e197e2a1a9500 +[PipelineLODHash] lod=5 tiles=208 density=0x38706b628a74dd17 mesh=0x445b1c7b51489cbb payload=0x713efc66290768f7 topology=0x56486b919146bb1e +[PipelineLODHash] lod=6 tiles=144 density=0xd53849b2002a1faa mesh=0xaa210abc8498c415 payload=0xd109aef8639706d1 topology=0x61a4d75fbbc35268 +[PipelineLODHash] lod=7 tiles=96 density=0xb0ea9a140275c9cc mesh=0x3ffd8365c8b0ec29 payload=0x3577afb0a2e4a420 topology=0x97530aafde15b7e0 +[PipelineLODHash] lod=8 tiles=306 density=0x8b3d1816799d67a0 mesh=0x80bf554f17700e1e payload=0xccbe22c3333a9c34 topology=0xcb11b28f6b6bcc50 +[PipelineExactQueryHash] probes=9 density=0xf2df67b38b7802df unclamped=0x48b347986345b557 detail=0xefcba20c0c70c415 collision=0x137e8f6c0b03a624 path=direct-Core-queries diff --git a/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-surface-world-style1-v227.baseline b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-surface-world-style1-v227.baseline new file mode 100644 index 0000000..eda2c13 --- /dev/null +++ b/Standalone/Tools/verify/baselines/owner-hash/canonical/owner-hash-surface-world-style1-v227.baseline @@ -0,0 +1,12 @@ +[PipelineFullDetailHash] tiles=960 density=0xace56c8f205238ad mesh=0xa9c603a1248de6b8 payload=0xea55f1f4fcc6a894 topology=0x5ea7bc78a1b678ae +[PipelineWholeViewHash] tiles=2370 density=0x03331b1721d89092 mesh=0x1fa61520dc6c6d7b payload=0xe5c306e087381056 topology=0xef499f11d87ca569 +[PipelineLODHash] lod=0 tiles=512 density=0xcd6ab28cfa504aca mesh=0xf03dc80a669fca31 payload=0x397aded1c3d2d297 topology=0xb4a1dc84fabc1fe3 +[PipelineLODHash] lod=1 tiles=448 density=0xce6e713828b2a20a mesh=0x1cf408c25d67d18c payload=0x8a2b5d20571c997e topology=0x51cd985fe8e7d100 +[PipelineLODHash] lod=2 tiles=320 density=0x8581c27a6966cccd mesh=0x610a6eb3ef75fe11 payload=0xdecaf47d125efd5c topology=0xa5ea883ebeb628e4 +[PipelineLODHash] lod=3 tiles=208 density=0x5d87341a6428ea0b mesh=0x662096703512f5e2 payload=0x5703acca3ad9c2c7 topology=0xc8fb411f09c46f60 +[PipelineLODHash] lod=4 tiles=240 density=0x0be8798407724eaf mesh=0x131c303cbbe51434 payload=0x2a90ecf0a2411ca0 topology=0xe3e054a371152e08 +[PipelineLODHash] lod=5 tiles=144 density=0xf20897ad272103a9 mesh=0x13d00b6253ae1f72 payload=0x0db3880693a962fa topology=0x462bd87a80f15e89 +[PipelineLODHash] lod=6 tiles=96 density=0xc040fcac457d6313 mesh=0x1ed132eeb718fb62 payload=0xcd0214e35577c6e3 topology=0x2c56c69e6fdcfd64 +[PipelineLODHash] lod=7 tiles=96 density=0xc2d419446355fdb8 mesh=0x4ea44452574fc84b payload=0xfd9779bedfc9ae0f topology=0x8948546e770c9b72 +[PipelineLODHash] lod=8 tiles=306 density=0x62db31696f2da831 mesh=0xd373f9e9481532fe payload=0x540a60526e0e3e46 topology=0xc725cb901e6dc335 +[PipelineExactQueryHash] probes=9 density=0xc949c4df2ce6f9d9 unclamped=0xc949c4df2ce6f9d9 detail=0x114c501e2d830d94 collision=0xe6011d3a248d4849 path=direct-Core-queries diff --git a/Standalone/Tools/verify/verify.py b/Standalone/Tools/verify/verify.py index 5fc1584..b369932 100644 --- a/Standalone/Tools/verify/verify.py +++ b/Standalone/Tools/verify/verify.py @@ -122,11 +122,11 @@ RECIPE_RE = re.compile( def owner_hash_baseline(recipe: str, style: int) -> tuple[Path, str]: if recipe == "surface-world" and style == 1: - return (BASELINES / "owner-hash/canonical/owner-hash-surface-world-style1-v225.baseline", - "L125-v225-stamped-passage-sweep") + return (BASELINES / "owner-hash/canonical/owner-hash-surface-world-style1-v227.baseline", + "L130-v227-reach-units") if recipe == "floating-islands" and style == 2: - return (BASELINES / "owner-hash/canonical/owner-hash-floating-islands-style2-v225.baseline", - "L125-v225-stamped-passage-sweep") + return (BASELINES / "owner-hash/canonical/owner-hash-floating-islands-style2-v227.baseline", + "L130-v227-reach-units") raise VerificationFailure(f"no pinned owner hash baseline for {recipe} style {style}")