standalone: the owner's world outside Unreal -- bit-identical density, D3D11 fly-through viewer

Standalone/ (C++20, MSVC /O2 /arch:AVX2 /fp:precise, Build.ps1): copied density pipeline, op stack,
cave morphology, passages, strate manager/composer, noise, DetSinCos, mesher, clipmap selection,
with a UE compatibility layer (Compat/). Owner data exported once to Standalone/data/owner_world.json
by a default-off explore-commandlet exporter (the only plugin-source change). 25 cm voxels.
Parity: seed 0, 3,436 samples (strate edges, negative/far coords, rooms, tunnels, passages,
landings): bit-identical. Viewer: full 7-level clipmap, per-level toggles 1-7, T = round winding
tunnels (standalone option), N/P seed, F wireframe.
Timing NOT yet a baseline: 515 s for 12,054 tiles (L0 70 s, L6 296 s); the compat TMap/TSet are
vector-backed with linear lookup, which the plugin's caches do not expect.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-02 12:14:04 +02:00
1 parent a443eb8546
commit 05f62cff36
114 files changed
+68206 -3

No files matched your search

+38 -3
View File
@@ -1,6 +1,6 @@
[CmdletBinding()]
param(
[ValidateSet('canonical', 'owner', 'probe', 'perf', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'parity', 'horizon', 'horizon-render', 'determinism', 'symbolize-stacks', 'region-eval', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')]
[ValidateSet('canonical', 'owner', 'probe', 'perf', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'parity', 'horizon', 'horizon-render', 'determinism', 'symbolize-stacks', 'region-eval', 'standalone-export', 'compile-only', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')]
[string]$Scenario = 'canonical',
[switch]$Build,
[switch]$EnableRender,
@@ -634,7 +634,7 @@ function Sync-OwnerAssets {
$null = Copy-Item -LiteralPath $source -Destination $target -Force -PassThru
[void]$rows.Add([ordered]@{
name = $assetName
used_by_scenario = $Scenario -in @('owner', 'probe', 'parity', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'horizon', 'horizon-render', 'determinism', 'region-eval', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')
used_by_scenario = $Scenario -in @('owner', 'probe', 'parity', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'horizon', 'horizon-render', 'determinism', 'region-eval', 'standalone-export', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')
source_path = $source
source_sha256 = Get-Sha256 $source
staged_path = $target
@@ -729,7 +729,7 @@ function Get-AssetEvidence {
$target = Join-Path $HostRoot "Content\VoxelForge\$assetName.uasset"
[void]$rows.Add([ordered]@{
name = $assetName
used_by_scenario = $Scenario -in @('owner', 'probe', 'parity', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'horizon', 'horizon-render', 'determinism', 'region-eval', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')
used_by_scenario = $Scenario -in @('owner', 'probe', 'parity', 'tests', 'surface-fall', 'crossing', 'gate-stress', 'visual-edit', 'visual-lod', 'visual-gap-walk', 'visual-gap-inject', 'dig-motion', 'horizon', 'horizon-render', 'determinism', 'region-eval', 'standalone-export', 'step2d', 'step2e', 'step2f', 'step3-scale', 'step2f-capture', 'step3-game')
source_path = $source
source_sha256 = Get-Sha256 $source
staged_path = $target
@@ -1660,6 +1660,7 @@ try {
$commandletLedger = $null
$gameLedger = $null
switch ($Scenario) {
'compile-only' { }
'canonical' {
$baseCvars['voxel.OuterClassifierMode'] = 0
$args = New-CommonArguments 'commandlet' (Join-Path $RunRoot 'Logs\canonical.log') (Merge-Cvars $baseCvars)
@@ -1679,6 +1680,40 @@ try {
(Join-Path $RunRoot 'Logs\owner.log') (Join-Path $RunRoot 'Logs\owner.stdout.log') (Join-Path $RunRoot 'Logs\owner.stderr.log')
$CommandletMetrics = Get-CommandletMetrics $commandletOut 'owner assets'
}
'standalone-export' {
$exportLog = Join-Path $RunRoot 'Logs\standalone-export.log'
$args = New-CommonArguments 'commandlet' $exportLog (Merge-Cvars $baseCvars)
$args += @(
'-seed=0', '-archetype=TunnelNetwork', '-slot=0', '-modes=export',
'-blockearlyout=0', '-gameconfig=1', '-standaloneworldexport=1',
'-settingsref=/Game/VoxelForge/DA_Settings.DA_Settings',
('-out="{0}"' -f $commandletOut)
)
$commandletLedger = Invoke-UnrealLaunch 'standalone-export-commandlet' $args `
$exportLog (Join-Path $RunRoot 'Logs\standalone-export.stdout.log') `
(Join-Path $RunRoot 'Logs\standalone-export.stderr.log')
$ownerWorldPath = Join-Path $commandletOut 'owner_world.json'
if ($commandletLedger.status -eq 'passed' -and (Test-Path -LiteralPath $ownerWorldPath -PathType Leaf)) {
$standaloneData = Join-Path $PluginRoot 'Standalone\data'
Ensure-Directory $standaloneData
Copy-Item -LiteralPath $ownerWorldPath -Destination (Join-Path $standaloneData 'owner_world.json') -Force
$exported = Read-JsonFile $ownerWorldPath
$CommandletMetrics = [ordered]@{
status = 'exported'
output = $ownerWorldPath
standalone_data = Join-Path $standaloneData 'owner_world.json'
seed = Get-JsonValue $exported 'seed'
voxel_size_cm = Get-JsonValue $exported 'voxel_size_cm'
strate_count = @((Get-JsonValue $exported 'strates')).Count
passage_count = @((Get-JsonValue $exported 'passages')).Count
density_sample_count = @((Get-JsonValue $exported 'density_samples')).Count
viewer_start = Get-JsonValue $exported 'viewer_start'
}
} else {
Add-Failure "standalone exporter did not produce $ownerWorldPath"
$CommandletMetrics = [ordered]@{ status = 'missing'; output = $ownerWorldPath }
}
}
'probe' {
$args = New-CommonArguments 'commandlet' (Join-Path $RunRoot 'Logs\probe.log') (Merge-Cvars $baseCvars)
$args += New-CommandletArguments $commandletOut 'tunnelcoreprobe' ($Assets -eq 'owner') $false 128