summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-22 03:49:30 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-22 03:49:30 +0800
commit5a36c762d47ca8df43eff30d582bed264dcf9b77 (patch)
treed377264ef95003b797f59f95d2b69b64d15b7c5e /docs
parente7c19fef046ddf57e0c5e4a85c99a47261cf97b0 (diff)
downloadliving-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/ 快照位置。
Diffstat (limited to 'docs')
-rw-r--r--docs/维护说明.md47
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` 整图、