diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 02:43:39 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 02:43:39 +0800 |
| commit | d3c0ef17cb1c4d30c1d586e2a5b616f58bd3d875 (patch) | |
| tree | 19d93967c15548f80a83d7bf6617b826fb5cb5e7 /docs | |
| parent | ef78374c316587fb585b72e6d427cd6e61203655 (diff) | |
| download | living-village-d3c0ef17cb1c4d30c1d586e2a5b616f58bd3d875.tar.gz | |
feat(mapgen): 河道连续性不变量 + 桥/石板路网/沿河民居(P20 第二步)p20-map-gen-foundation
- 河道改为贯穿全图连续水带(每列一段、宽度 >= RiverWidth),置于核心区上下
两侧且不相交;新增不变量测试:逐列水段数恒定、每段宽度下限、任意水格
>=2 个水邻居(禁止断裂缺口与孤立水点)。
- Result 新增 Rivers/Bridges/Paths/Buildings/BridgeCrossingsOk;每河 2 座桥、
横贯主路 + 垂直连接路 + 远岸路 + 白墙黑瓦民居(门朝路)。
- 公开 isWalkable/floodFill;ReachabilityOk 现覆盖 30 spawn + 所有门 + 所有桥面,
BridgeCrossingsOk 保证每桥两岸同连通域。
- 回归:Desktop 115->119、Kernel 90 不变;final_digest 与基线一致。
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/维护说明.md | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md index 2c8f406..0123fa3 100644 --- a/docs/维护说明.md +++ b/docs/维护说明.md @@ -269,6 +269,27 @@ dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll - 门槛:clean rebuild 0 警告 0 错误;`final_digest=953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C` 3 次一致、`performance_determinism=PASS`。 +## P20 第二步:河道连续性不变量 + 桥 / 石板路网 / 沿河民居 + +- 河道重做:由「`not (inCore)` 逐格随机游走」改为**贯穿全图的东西向连续水带**(`Rivers : River list`, + 每条每列恰好一段、宽度恒 `>= max 3 RiverWidth`),置于核心区上下两侧且与核心不相交。 + 新增不变量测试 `RiversAreContinuousWithoutGapsOrIsolatedTiles`:逐列水段数 == `Rivers.Length` 且每段 + `>= RiverWidth`、任意水格 4 邻接水邻居 `>= 2`(禁止断裂缺口与孤立水点)。 +- 交通结构(`Result` 新增 `Bridges`/`Paths`/`Buildings`/`BridgeCrossingsOk`): + 每条河 2 座桥(2 格宽,桥面仍记水但 `isWalkable` 放行);主石板路沿核心中心行横贯全图, + 每座桥有垂直连接路贯通两岸与远岸路;远岸路两侧布置民居矩形(`Building`:白墙黑瓦两行色块,门朝路)。 + `MapGen.isWalkable`/`MapGen.floodFill` 公开供测试:`ReachabilityOk` 现在同时要求 30 spawn、所有门、 + 所有桥面可达;`BridgeCrossingsOk` 要求每座桥两岸均被同一连通域覆盖。 +- 回归新增 4 条:河道连续性、桥/路/民居存在且沿河、桥两岸可达(spawn/门/桥全连通)、结构逐字节确定性。 + Desktop **115 -> 119**,Kernel **90** 不变。 +- 渲染证据(`drawMapFitted` 每瓦片 6px 放大 + `drawMapViewport` 1:1 + 桥中心 detail 帧); + `p20b-map-*`(整图,含桥/路/白墙黑瓦民居)、`p20b-detail-*`(1:1 桥/路/民居近景)、 + `p20b-culled-*`。白块回归 0 命中;整图 1536x1152。 +- 实测(Xvfb,本机):256x192 生成 ≈ **63 ms**、64x48 ≈ **2.0 ms**;`reachable_ok=true`、 + `reachable_tiles=47652`(= 49152 - 两河水面 1524 + 桥面 24,三 seed 恒定,印证连续性不变量); + 裁剪帧 1050/49152 = 2.1%,1:1 单帧 ≈ 0.7 ms(implied ≈1300-1600 fps)。 +- 门槛同上:clean rebuild 0/0;`final_digest` 3 次一致、`performance_determinism=PASS`。 + ## 已验证命令 ```bash @@ -359,8 +380,10 @@ 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-p20-art/`(P20:`mapgen-256x192-seed{4242,7,99}.png` 整图、 - `mapgen-culled-256x192-seed{4242,7,99}.png` 裁剪帧) +- `/tmp/opencode/lv-p20-art/`(P20:第一步 `mapgen-256x192-seed{4242,7,99}.png` 整图、 + `mapgen-culled-256x192-seed{4242,7,99}.png` 裁剪帧;第二步 `p20b-map-256x192-seed{4242,7,99}.png` + 整图(含桥/路/沿河民居)、`p20b-detail-256x192-seed{4242,7,99}.png` 桥/路/民居 1:1 近景、 + `p20b-culled-256x192-seed{...}.png` 裁剪帧) - `/tmp/opencode/lv-p19-art/`(P19:`p19-noon-12h-0{1,2}.png`、`p19-dusk-20h45-01.png`、 `p19-night-00h30-01.png`、`p19-before-noon-yellow.png`/`p19-after-noon-neutral.png`;同一份拷入 `evidence/`) - `/tmp/opencode/lv-p18-art/`(P18:`p18-dusk-20h45-0{1,2}.png`、`p18-night-deep-01.png`、 |
