diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 12:41:06 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 12:41:06 +0800 |
| commit | 92bcc9b9fc4eeea4f11913a0de2a34811b262dfd (patch) | |
| tree | 7fa25b2a3fc2ebeea7b2fe2cbc6285848d7c0a26 /docs | |
| parent | 4034f55ee0b9cbd8c9db5f850e10e21e15fb7274 (diff) | |
| download | living-village-92bcc9b9fc4eeea4f11913a0de2a34811b262dfd.tar.gz | |
feat(desktop): P30 512 民居增密 + 乡村空区填充 + 主路柔化
- MapGen(仅大图尺寸自适应分支,默认 64x48/256x192 不进入、不消费额外 RNG):
① ExtraRiversideHouses 16 -> 30,组团 2-5 座;含基础岸屋的路段优先布组并为每座孤立
基础民居贴格配对,placeGroup 试排后按「与既有/同组民居足迹间隙 <=2」过滤,孤立单屋不落地。
512 seed4242:组团民居 24 -> 45,规模 [5;4x6;3x2;2x3],0 组 <2 座。
② 新增 GroundTile.PaddyField=4/VegetablePlot=5(成熟 tile;非水可通行)+ Result.Groves
(纯视觉)+ Result.Farmhouses(门贴院落路、计入 BFS);18x14 确定性网格铺田块/树丛/农舍,
离水 >=3 格、避开路网/核心/民居。草地瓦片 96.3% -> 83.9%,水田 11595 + 菜畦 12877 格。
③ Result.MainRoadCenter 逐列中心线,value noise(scale 130、幅度 ±3)确定性缓弯,
相邻列步长 <=1、遇弯补格保证 4 连通;默认图主街仍笔直。
- VillageArt:水田/菜畦/树丛/农舍渲染(复用成熟 sprite 与同一立面纯函数)、农舍门窗计入夜光、
新增 drawMapRegion 局部真实离屏渲染。
- Game:P30 证据钩子 LV_MAPGEN_P30_SHOT=1(整图 3072x2304 day/night + 田块/主路 512x256@4px)。
- 回归 +5:组团规模/空区填充/田块合规/农舍可达确定性/主路确定性弯曲。
Kernel 92 / Desktop 156 全绿;Release 0 警告 0 错误;
final_digest=953775FAEB2F… 3 次一致、performance_determinism=PASS;
64x48=6042052、256x192=1284656962 锁定不变。
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/维护说明.md | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/docs/维护说明.md b/docs/维护说明.md index 2997f62..e234283 100644 --- a/docs/维护说明.md +++ b/docs/维护说明.md @@ -574,6 +574,35 @@ dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll - **遗留**:民居总数与 P28 相同(24 座),本轮只做「组团化」未继续提高总密度;河岸垂柳成丛后 仍为纯视觉层,不参与通行;默认 64x48/256x192 观感不变。 +## P30:512 民居增密 + 乡村空区填充 + 主路柔化(P29 观感遗留) + +- **① 民居增密与组团(仅大图 mapgen 分支)**:`ExtraRiversideHouses` 16 -> 30,组团规模由 + 2-4 改为 2-5 座;含基础岸屋的横向路段优先布组,并为每座仍孤立的基础民居在同行贴 1 格补 + 一座。`placeGroup` 先局部试排,再用 `connected`(与既有民居或同组民居足迹间隙 <=2)过滤后 + 才提交,孤立单屋根本不落地。512x384 seed4242:沿河/沿路组团民居 24 -> **45 座**,组团规模 + `[5;4x6;3x2;2x3]`,**0 组 <2 座**;宽度仍按 2/3/4 加权(附属小筑/民居/大宅)。 +- **② 乡村空区填充(仅大图)**:新增 `GroundTile.PaddyField=4 / VegetablePlot=5`(成熟 tile + 素材:水田走静态水面 sprite、菜畦走菜地 sprite;均为非水瓦片故仍可通行)、`Result.Groves` + (竹丛/灌木丛,纯视觉层,不入瓦片、不影响通行)、`Result.Farmhouses`(散落农舍,门贴院落路, + 计入 BFS 可达性)。按 18x14 确定性网格铺田块/树丛/农舍,田块离水面 >=3 格并避开路网/核心/ + 民居;上部与下部空带均有田块。512x384 seed4242:水田 11595 + 菜畦 12877 格、树丛 852 格、 + 散落农舍 21 座;草地瓦片占比 **96.3% -> 83.9%**(整图真实渲染中草地像素约 80.8%)。 +- **③ 主路柔化(仅大图)**:新增 `Result.MainRoadCenter` 逐列中心线,用确定性 value noise + (scale 130、幅度 ±3 格)微扰,相邻列步长恒 `<=1`,遇弯补一格保证 4 连通;桥的竖向引路按 + `roadYAt bx` 对齐。默认图主街仍笔直。同 seed 两次逐字节一致(`serialize` 含中心线)。 +- **回归 +5**:`LargeMapGroupsAreTwoToFiveWithFewIsolated`、 + `LargeMapCountrysideFillsEmptyBandsWithMatureTiles`、`FieldsStayOnLandAwayFromWaterPathsAndCore`、 + `LargeMapFarmsteadDoorsAreReachableAndDeterministic`、`LargeMapMainRoadIsDeterministicSerpentine`。 + Kernel **92** / Desktop **156** 全绿;Release build 0 警告 0 错误; + `final_digest=953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C` 3 次一致、 + `performance_determinism=PASS`;**64x48=6042052、256x192=1284656962 锁定不变** + (`DefaultSizeChecksumsArePinned`)。 +- **取证** `/tmp/opencode/lv-p30/art/`(真实离屏渲染,非构造):`p30-map-512x384-seed4242-{day,night}.png` + (3072x2304 整图)、`p30-field-cluster-4x-{day,night}.png`(512x256,4px/tile,田块+农舍+树丛)、 + `p30-roadserp-4x-day.png`(512x256,4px/tile,主路逐点弯曲)。`check-no-white-blocks` 5 帧 0 命中。 +- **遗留**:散落农舍与乡村树丛为纯布局/美术层,不与 NPC 数值、任务系统耦合;默认 + 64x48/256x192 判定不进入新分支、不消费额外 RNG,观感不变。 + ## 已验证命令 ```bash @@ -750,6 +779,14 @@ run_p29 4096 3072 1 /tmp/opencode/lv-p29/art/p29-night8 # A/B 对照 = 2048 帧裁 tile x228..260 y170..186 后 4x NEAREST -> 512x256 python3 scripts/check-no-white-blocks.py /tmp/opencode/lv-p29/art/p29-night /tmp/opencode/lv-p29/art/p29-night8 +# P30 512 证据出图(真实离屏渲染:整图 3072x2304 + 田块/主路局部 512x256@4px per tile) +mkdir -p /tmp/opencode/lv-p30/art +timeout 300 xvfb-run -a -s "-screen 0 1280x720x24" env LV_MAPGEN_SHOT=1 LV_MAPGEN_P30_SHOT=1 \ + LV_MAPGEN_WIDTH=512 LV_MAPGEN_HEIGHT=384 LV_MAPGEN_SEED=4242 \ + LV_RECORD_DIR=/tmp/opencode/lv-p30/art \ + dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll +python3 scripts/check-no-white-blocks.py /tmp/opencode/lv-p30/art/*.png + # 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 \ @@ -841,6 +878,9 @@ python3 scripts/check-no-white-blocks.py evidence/night-run - `/tmp/opencode/lv-p29/art/`(P29:`p29-map-512x384-seed4242-{day,night}.png` 512 整图、 `p29-village-cluster-4x-{day,night}.png` 512x256 桥头沿河组团 4px/tile、 `p29-lantern-halo-8x-night.png` 192x192 单灯 8px/tile 光晕特写、 - `p29-variant-pair-ab-4x-{day,night}.png` 512x256 A/B 对照;源帧 `p29-day/`、`p29-night/`、 - `p29-day8/`、`p29-night8/`;工作区 `art/` 不入 git) + `p29-variant-pair-ab-4x-{day,night}.png` 512x256 A/B 对照;源帧 `p29-day/`、`p29-night/`、 + `p29-day8/`、`p29-night8/`;工作区 `art/` 不入 git) +- `/tmp/opencode/lv-p30/art/`(P30:`p30-map-512x384-seed4242-{day,night}.png` 3072x2304 整图、 + `p30-field-cluster-4x-{day,night}.png` 512x256 田块+农舍+树丛 4px/tile、 + `p30-roadserp-4x-day.png` 512x256 主路逐点弯曲 4px/tile;工作区 `art/` 不入 git) - `artifacts/perf-independent/<TS>/`(digest 3 联测回读) |
