diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 03:49:30 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 03:49:30 +0800 |
| commit | 5a36c762d47ca8df43eff30d582bed264dcf9b77 (patch) | |
| tree | d377264ef95003b797f59f95d2b69b64d15b7c5e | |
| parent | e7c19fef046ddf57e0c5e4a85c99a47261cf97b0 (diff) | |
| download | living-village-5a36c762d47ca8df43eff30d582bed264dcf9b77.tar.gz | |
docs: 新增「大世界」一节:世界参数/回退开关/可达核心/实测性能(P21)
- 256x192 生成器参数、world-mode 回退开关、BFS 可达核心保证机制。
- 实测 Desktop Release(Xvfb 1280x720x24,LV_UNLOCK_FPS=1)60s 采样:
mean 230.4 / min 199.5 / max 302.8 FPS;VmRSS 181.9–183.4 MB;
headless ticks/s 189,595–445,377、alloc≈3.03MB、gen0=0、digest 953775FA…。
- 补 P21 取证命令与 /tmp/opencode/lv-p21-art/ 快照位置。
| -rw-r--r-- | docs/维护说明.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md index 1177487..7eb064e 100644 --- a/docs/维护说明.md +++ b/docs/维护说明.md @@ -313,6 +313,34 @@ dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll `p20c-night-*.png`(20.75)各若干;挑出 `p20c-day-bridge-01.png`、`p20c-day-buildings-01.png`、 `p20c-night-bridge-01.png`、`p20c-night-lantern-01.png` 等代表性帧;716 张全过白块回归 0 命中。 +## 大世界(P21 性能与镜头收口) + +- 默认世界:`Game` 启动即 `Sim.configureBounds 256 192` + `MapGen.generateWithSize 256 192 42UL` + (`MapGen.defaultParams`:`RiverCount=2`、`RiverWidth>=3`、`CoreSide=14`、5x6=30 spawn、 + splitmix64 河道 + 2-3 octave value noise + 泊松布点)。核心区先整平,再 BFS 校验 30 spawn + 与桥/路/民居门全部连通(`ReachabilityOk`/`BridgeCrossingsOk`);站位由 + `WorldBootstrap.initialWorldInMap` 取核心可达域,avatar 落核心中心。 +- `world-mode` 回退开关(启动日志会打印实际模式与 bounds): + - `LV_LEGACY_MAP=1` -> 旧 64x48 样例世界; + - `LV_MAP_SCALE=N`(N>1)-> ProceduralMap 大世界 `64N x 48N`; + - `LV_MAP_TOUR=1` -> ProceduralMap 巡游; + - `LV_AUTOPLAY_SAMPLE=1`(非巡游)-> 保持 64x48,保证既有录像可复现; + - `LV_RIVERSCAPE_TOUR=1` -> 显式启用 256x192 生成器世界巡游。 +- 视口裁剪:`MapGen.visibleTileRange` 只绘制可见瓦片(`drawWorld` 已接入),256x192 下 + 1280x720 视口约绘制 `1050/49152 = 2.1%`,`culled=97.9%`(P20 第二步离屏实测)。 +- 实测性能(本机 Xvfb 1280x720x24,Desktop Release,256x192 可玩世界,`LV_UNLOCK_FPS=1` + 放开 vsync 以测真实上限): + - 帧率:`LV_RIVERSCAPE_SECONDS=60` 实测 58 个有效秒采样(丢 5 秒 warmup), + **mean 230.4 FPS / min 199.5 FPS / max 302.8 FPS**;默认 vsync+固定步长为稳定 60 FPS。 + - 内存:运行中 `VmRSS` 181.9–183.4 MB(≈182.7 MB 均值,含 MonoGame 运行时与图集), + 60s 内平稳无泄漏。 + - 生成:256x192 约 52–70 ms;64x48 约 2 ms(P20 实测)。 + - headless:`--performance-baseline` 3 次 `ticks/s` 区间 **189,595–445,377**(宿主负载相关), + `allocated_bytes≈3.03 MB/6000 ticks`、`gen0=0`,`final_digest=953775FA…`、 + `performance_determinism=PASS`(未触 Kernel/Sim 数值路径)。 +- 取证:`/tmp/opencode/lv-p21-art/`(`p21-day-*`/`p21-night-*` 昼夜巡游代表帧 7 张, + `raw-day/`、`raw-night/` 全量帧),白块回归 0 命中。 + ## 已验证命令 ```bash @@ -358,6 +386,22 @@ for pair in noon:12.0 dusk:20.75 night:0.5; do name=${pair%%:*}; hour=${pair##*: LV_RECORD_DIR=/tmp/opencode/lv-p19-art/$name LV_RECORD_EVERY=2 \ dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll; done +# P21 性能核对:256x192 可玩世界实机帧率(放开 vsync)+ 60s 稳定采样 +timeout 90 xvfb-run -a -s "-screen 0 1280x720x24" env LV_AUTOPLAY_SAMPLE=1 \ + LV_RIVERSCAPE_TOUR=1 LV_RIVERSCAPE_SECONDS=60 LV_UNLOCK_FPS=1 LV_PERF_SUMMARY=1 \ + LV_AUTOPLAY_START_HOUR=12.0 \ + dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll +# 内存(运行中采样 VmRSS)与 headless ticks/s +PID=$(pgrep -n -f LivingVillage.Desktop.dll); awk '/VmRSS/{print $2" kB"}' /proc/$PID/status +dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll --performance-baseline + +# P21 昼夜巡游取证(真走位,p21-* 命名;代表帧挑出到 /tmp/opencode/lv-p21-art/) +for pair in day:12.0 night:20.75; do name=${pair%%:*}; hour=${pair##*:}; \ + timeout 150 xvfb-run -a -s "-screen 0 1280x720x24" env LV_AUTOPLAY_SAMPLE=1 \ + LV_RIVERSCAPE_TOUR=1 LV_AUTOPLAY_RECORD=1 LV_RECORD_EVERY=20 LV_RECORD_NAME=p21-$name- \ + LV_RECORD_DIR=/tmp/opencode/lv-p21-art/raw-$name LV_AUTOPLAY_START_HOUR=$hour \ + dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll; done + # P20 第三步:默认生成器世界的昼夜巡游录制(真走位,含桥面行走帧;p20c-* 命名) for pair in day:12.0 night:20.75; do name=${pair%%:*}; hour=${pair##*:}; \ timeout 150 xvfb-run -a -s "-screen 0 1280x720x24" env LV_AUTOPLAY_SAMPLE=1 \ @@ -410,6 +454,9 @@ python3 scripts/check-no-white-blocks.py evidence/night-run - `/tmp/opencode/lv-p13/evidence/`(P13:`walk-idle-frames.png`、`water-3phase.png`、 `smoke-3phase.png`、`water-2frame.png`、`smoke-2frame.png`、`day-panorama.png`、 `night-lantern.png`、`day-night-compare.png`、`walk-real-run.png`、`day-run/`、`night-run/`) +- `/tmp/opencode/lv-p21-art/`(P21:`p21-day-bridge-01.png`、`p21-day-river-01.png`、 + `p21-day-buildings-0{1,2}.png`、`p21-night-bridge-01.png`、`p21-night-river-01.png`、 + `p21-night-street-01.png`;原始帧 `raw-day/`、`raw-night/`) - `/tmp/opencode/lv-p20-art/`(P20 第三步:默认生成器世界昼夜巡游 `p20c-day-*.png`/`p20c-night-*.png` (含桥面行走)、代表帧 `p20c-day-bridge-01.png`/`p20c-day-buildings-01.png`/ `p20c-night-bridge-01.png`/`p20c-night-lantern-01.png`;P20:第一步 `mapgen-256x192-seed{4242,7,99}.png` 整图、 |
