| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
| |
ses_f38ab2ab4, M3 16/30
|
| |\
| |
| |
| | |
二次衰减/桥头与门窗 halo)— Hermes 复验通过
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- MapGen:仅大图新增 ClusterSeed(group seeding)与组团布屋——512 沿横向石板路
(主街+河岸路)成排成组:组内 2-4 座/1 格间隙、组间 4-6 格空档,宽度 2/3/4 分层;
垂柳改为确定性成丛(2-3 株/丛、丛间 3-5 格空档)。独立 clusterRng 不触碰
structureRng,默认图仍不消费 RNG,64x48=6042052 / 256x192=1284656962 锁定不变。
- VillageArt:新增 lanternFalloff(二次 1-(d/r)^2,半径 0 处最大、边缘 0、严格单调无平台);
lanternGlowLayers 按该衰减逐环累积 alpha;drawNightGlows 对桥头灯笼+民居门窗画半径
4 tile 的柔和径向光晕,整图取证与实机 DrawWorldView 共用同一套纯函数。
- 回归 +6:组团行/成丛/衰减/光源确定性;Desktop 151、Kernel 92 全绿,Release 0/0,
final_digest=953775FAEB2F… 3 次一致。证据帧见 art/p29-*。
|
| |/ |
|
| |
|
|
| |
candidates, M3 12/30
|
| |\
| |
| |
| | |
沿河加密(青灰挑檐B/竖长格栅窗/绿院门,2/3/4 宽分层 16 座外环)— Hermes 复验通过
|
| | | |
|
| | |
| |
| |
| | |
checksum)
|
| | |
| |
| |
| | |
- 直接解码 world 图集 slot 8/28 平均亮度,防配色差异被回退抹平
|
| | |
| |
| |
| |
| | |
- LV_MAPGEN_NIGHT=1 时整图按 23:30 的 WorldTint 与 golden/moonlight veil 渲染
- RenderMapGen 参数化 tint/veil tick,与 DrawWorldView 共用同一套纯函数
|
| | |
| |
| |
| |
| | |
- LV_MAPGEN_FIT_WIDTH/HEIGHT 额外渲染整图到指定像素目标(1024x768 -> 恰 2px/tile)
- 仅取证模式触发,不进入正常游戏循环
|
| | |
| |
| |
| |
| |
| | |
- ExtraRiversideHouses 10 -> 16(沿河 +6 座),宽度加权 2/3/4 形成聚落层次
- 仅 large 分支执行、默认图不消耗 RNG:64x48=6042052、256x192=1284656962 锁定不变
- 新增 LargeMapHouseDensityHierarchyOnlyGrowsLargeMaps 回归
|
| | |
| |
| |
| |
| |
| |
| |
| | |
民居第二变体强化配色与轮廓(青灰挑檐色阶 + 竖长格栅窗 + 绿院门)
- make-jiangnan-art.py slot 28/29/30:B 变体改用亮青灰瓦色阶、竖长木格栅窗、绿双扇院门
- VillageArt 变体 B 渲染:挑檐多叠一层、向两侧各出一格(水面之上不叠),墙身统一格栅窗
- 仅绘制分支,瓦片/可达性零改动
|
| |/
|
|
| |
launched, P28 dispatched
|
| |\
| |
| |
| | |
rumor-bench)— Hermes 复验通过
|
| | |
| |
| |
| |
| |
| |
| |
| | |
补 P27 修复策略(扫描去装箱 + 裁剪判定 O(1))、修复前后基准对照
(60 天 alloc -64%、ms -28%)、retained_id_checksum 前后一致、
5 天双跑 WorldSave 逐字节相同、digest/PASS 与 Kernel 92/Desktop 143 门槛;
并记录全模拟 --cost-probe 基本持平的原因(逐 tick NPC 快照分配主导,
谣言子系统占比小,留给后续单)。已验证命令补 --rumor-bench。
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
两条互相独立、均不改变保留集合与查询结果的优化:
1) 扫描去装箱:latestRumorFor / rumorIsDuplicate 用 `=` 比较 [<Struct>] 的
NpcId/RumorId(含 RumorId option)会走泛型结构相等并逐条装箱(实测 ~24 B/条,
Sim.chat 单独测得 N=16000 时 393,736 B/次、随 N 线性)。改为先解构底层
int/int64 再比较;Parent 用 int64 option 比较替代 RumorId option 结构相等。
语义完全等价,扫描不再逐条分配。
2) 裁剪判定 O(1):World 新增派生镜像 RumorCount/RumorOldestDay(不参与存档,
读档由列表经 rumorWorkingSetStats 重建)。appendRumor 用「count+1>capacity
或 min(oldest,day)<cutoff」O(1) 判定,仅真需裁剪时才走 trimRumors;旧 consRumor
每次追加都 rumorsNeedTrim 全表扫一遍。条件与 needTrim 逐字等价,保留集合相同。
等价性验证:5 天 2000 聊天/天跑两遍 WorldSave.save 逐字节相同,
RumorCount/RumorOldestDay 与对列表重算一致(count=8000、oldest_day=1)。
Kernel 长跑基准 30 NPC × 2000 聊天/天(--rumor-bench D 30 2000):
days 修复前 alloc / ms 修复后 alloc / ms
3 930,716,456 / 1626.7 482,716,192 / 1511.3
30 13,419,045,864 / 12182.5 4,884,067,640 / 8879.6
60 27,297,668,608 / 23769.7 9,774,660,360 / 17078.2
60 天分配 -64%、耗时 -28%,retained_id_checksum=927964000 前后一致。
门槛:final_digest=953775FAEB2F... 三次一致、performance_determinism=PASS;
Kernel 92 / Desktop 143 全绿;--cost-probe 1/5 天 18.7s/18.8GB、90.4s/94.6GB
(全模拟分配由逐 tick NPC 快照主导,谣言子系统占比很小,故全模拟基本持平)。
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
新增 Kernel 层 Rumor 长跑基准(RumorBench.fs + headless --rumor-bench
[days npcs chats_per_day]),把「聊天→生成/追溯谣言」路径从 Sim.step 的 NPC
快照分配解耦,隔离测量谣言工作集随世界年龄的分配/耗时;同 Config 的
retained_id_checksum 证明确定性。
复核 M3-1 前提:World.Rumors 已被 M6a(d94ec2d/cc850bf)按 3 天保留窗口收敛,
单日成本平稳(1/5/10 天 ≈18.7/18.1/19.8s、≈19GB/天),超线性项消失。
剩余 Rumor 成本 = 每次聊天的两条 O(N) 扫描 latestRumorFor/rumorIsDuplicate,
且 [<Struct>] NpcId/RumorId 用 = 比较会逐条装箱(Sim.chat 单独测得 N=16000
时 393,736 B/次、随 N 线性)。
修复前基准(30 NPC,--rumor-bench D 30 2000):
3d chat_calls=6000 retained=6000 alloc=930,716,456 ms=1626.7
30d chat_calls=60000 retained=8000 alloc=13,419,045,864 ms=12182.5
60d chat_calls=120000 retained=8000 alloc=27,297,668,608 ms=23769.7
(60d 工作集稳定 8000,不随年龄增长。)
docs/维护说明.md 新增 P27 小节记录上述现状与量级。不改任何模拟语义。
|
| |/ |
|
| |\
| |
| |
| | |
双景可读)— Hermes 复验通过
|
| | | |
|
| | | |
|
| | |
| |
| |
| | |
描边(昼/夜可读)
|
| | |
| |
| |
| | |
灯笼光晕径向无方斑回归
|
| | |
| |
| |
| | |
大图河岸装饰(护岸石垒/芦苇/垂柳)仅视觉层,不挡通行
|
| | |
| |
| |
| | |
民居立面第二变体(挑檐/木格栅窗/院门)沿河沿路交替
|
| |/
|
|
| |
dispatched
|
| |
|
|
| |
孤立石板治理小节与命令(P25)
|
| |
|
|
|
|
|
|
| |
村民巡游钩子提升屏内可见村民(P25)
- NPC 行动目标固定在 Sim 四活动点(厨房/家/集市/工位),原桥/门/核心巡游大多帧
屏内仅 0-3 人;新钩子改为在这些活动点间环游,150s 采样 >=8 村民占 74%(村庄段 89-91%)。
- 仅 Desktop 取证路径,不动 Kernel/Sim 数值。
|
| |
|
|
|
|
|
|
|
| |
tile(P25)
- 新增 Params.DecorativeStones(默认 true);paramsForSize 对 >256x192 关闭,
512x384 不再产生 292 个孤立石板(stone 非路网计数归零,石块全部属于路网)。
- 64x48/256x192 保持开启,checksum 6042052/1284656962 不变。
- 新增 NoIsolatedStoneTiles / DecorativeStonesDisabledOnLargeMaps 回归;Desktop 134 -> 136。
|
| | |
|
| |\ |
|
| | |
| |
| |
| | |
- ExtraRiversideHouses 默认/大图取值、512x384 共 18 座、部件渲染、村民可见性证据与快照位置。
|
| | |
| |
| |
| |
| |
| |
| | |
村民可见性日志钩子(P24)
- drawMapStructures 用 RoofRidge/RoofEave + WallWood/WallWindow + Door 精灵替换原矩形色块。
- LV_NPC_VISIBLE_LOG=1 每秒打印 visible-npcs=K of 30,作为大世界村民渲染证据。
|
| | |
| |
| |
| |
| |
| |
| | |
- Params.ExtraRiversideHouses(默认 0);paramsForSize 仅对 >256x192 设为 10,
从既有路网泊松散布 3x2 民居并接门入网(structureRng 确定性),512x384 共 18 座。
- 64x48/256x192 仍 4 座、checksum 6042052/1284656962 不变(新增用例锁定)。
- 新增 512 民居数量/可达/确定性用例;Desktop 130 -> 134。
|
| | | |
|
| |\| |
|
| | |
| |
| |
| |
| |
| |
| |
| | |
- 记录 paramsForSize 尺寸自适应(河道每 ~96 行一条、噪声尺度封顶 4x)、
64x48/256x192 逐字节不变、v2 存档边界与 v1 兼容、生成耗时(512x384 约 134-248ms)、
512x384 巡游 perf-summary(mean 153.84/min 51.64/max 228.81)与 VmRSS 185.9-201.9MB。
- 补 LV_RIVERSCAPE_WIDTH/HEIGHT 与 LV_MAPGEN_SHOT 512x384 取证命令及 /tmp/opencode/lv-p23-art/ 快照。
- 默认世界仍 256x192,本轮只交付能力与证据。
|
| | |
| |
| |
| |
| |
| | |
生成器世界(P23)
- 默认仍是 256x192,不改默认世界;仅让巡游/性能取证可跑 512x384。
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
- paramsForSize:河道数量随高度约每 96 行一条(64x48/256x192 仍 2 条,512x384 得 4 条),
第 3 条起在核心上/下方逐层外扩,互不重叠且不压核心。
- 噪声特征尺度封顶 4x,避免 512x384 退化成过度平滑的放大图。
- 64x48/256x192 生成结果逐字节不变(新增 checksum 锁定用例)。
- 新增 512x384 同 seed 逐字节一致/异 seed 分化/四河道连续/30 spawn 与桥两岸可达用例。
- Desktop 测试 124 -> 130。
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
边界回归(P23)
- Sim.configureBounds 512 384 下 v2 存档 round-trip 且同 world 两次保存逐字节一致,
读回再保存仍与原文一致;v1 的 64x48 兼容由既有用例覆盖。
- DriverHarness 长跑 20000 tick 断言 avatar 与全部 NPC 有限且留在 [0,max] 内。
- Kernel 测试 90 -> 92。
|
| |/ |
|
| | |
|
| |
|
|
|
|
|
|
| |
- 代表帧改为真实游戏内帧(HUD 近白像素判定),覆盖昼/黄昏/夜三档共 9 张,
覆盖旧标题/启动误帧;补 23:30 夜档巡游取证命令。
- 新增「大世界默认开启评估」:256x192 已是默认(P20 第三步),复核 FPS/内存/
生成耗时与风险,结论维持默认、保留 LV_LEGACY_MAP 回退;记录 NPC 规则网格
与孤立砖石小块两项遗留观察(仅记录不改)。
|
| |
|
|
|
|
|
| |
世界也能长时帧率采样(P22)
- sample 脚本跑完一轮后若未到 soak 秒数则回到开头继续,用于与 256x192
巡游做同口径的解锁帧率对比;默认 0 行为不变。
|
| |
|
|
|
|
|
|
|
|
| |
新增「大世界」一节:世界参数/回退开关/可达核心/实测性能(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/ 快照位置。
|
| |
|
|
|
|
| |
- LV_UNLOCK_FPS=1 关闭 vsync/固定步长以测真实渲染上限;
LV_PERF_SUMMARY=1 退出时用 PerformanceSummary 打印 mean/min/max。
- LV_RIVERSCAPE_SECONDS=N 让巡游循环到 N 秒,支撑 60s 稳定采样。
|
| |
|
|
|
| |
- PerformanceSummary.summarize:丢弃 warmup 后求每秒 FPS 的均值/最低/最高,
空样本返回 None;含 3 条单测(TDD)。
|
| |
|
|
| |
LV_AUTOPLAY_SAMPLE 非巡游保持旧 64x48,仅 LV_RIVERSCAPE_TOUR=1 启用生成器世界。
|