diff --git a/game-runtime/games/shanhai-xingji/assets/bg/bg-map1-arena-01.jpg b/game-runtime/games/shanhai-xingji/assets/bg/bg-map1-arena-01.jpg index 9c392880..cb620470 100644 Binary files a/game-runtime/games/shanhai-xingji/assets/bg/bg-map1-arena-01.jpg and b/game-runtime/games/shanhai-xingji/assets/bg/bg-map1-arena-01.jpg differ diff --git a/game-runtime/games/shanhai-xingji/evidence/round-13/00-arena-bg-result.json b/game-runtime/games/shanhai-xingji/evidence/round-13/00-arena-bg-result.json new file mode 100644 index 00000000..dcfeea0a --- /dev/null +++ b/game-runtime/games/shanhai-xingji/evidence/round-13/00-arena-bg-result.json @@ -0,0 +1,170 @@ +{ + "checkpoint": "round-13 治本去 bg 烤黑边(裁黑带+bicubic 缩放回填)替换 + CDP 复核", + "utc": "2026-07-25T09:17:59.386Z", + "machine": "lili-mac.local(开发机本地)", + "node": "v22.22.3", + "url": "http://127.0.0.1:4533/?engine=stub&mode=evidence&seed=777", + "dpr": 2, + "viewport": { + "w": 390, + "h": 844 + }, + "arena": { + "w": 1560, + "h": 2960 + }, + "collector": "/tmp/arena-e2e-r13.mjs(临时,不入仓)", + "shots": [ + { + "name": "01-arena-center-panorama.png", + "desc": "全景:玩家场心(0,0),镜头居中,竞技场整幅背景中心区", + "phase": "play", + "pos": { + "x": 0, + "y": 0 + }, + "timeS": 0.9, + "score": 0, + "drainOk": true, + "sha256": "584181a172ca11199aed693234a963a63c2c17177e8cc6e7b80c95f0b3216784", + "bytes": 1652033, + "utc": "2026-07-25T09:18:05.540Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 1282717, + "total": 1316640, + "ratio": 0.974 + } + }, + { + "name": "02-arena-edge-right.png", + "desc": "右边缘:玩家贴右界(x≈684,岩壁内沿),应见岩纹收口而非黑带", + "phase": "play", + "pos": { + "x": 684, + "y": 0 + }, + "timeS": 7, + "score": 3, + "drainOk": true, + "sha256": "7d9532a62c5b8dc17289c0ee67d6d52a57adb87934347cfd1f589aca77b93cd4", + "bytes": 1531895, + "utc": "2026-07-25T09:18:06.115Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 691791, + "total": 1316640, + "ratio": 0.525 + } + }, + { + "name": "03-arena-edge-top.png", + "desc": "上边缘/右上:玩家贴上界(y≈-1384),顶应岩纹收口", + "phase": "play", + "pos": { + "x": 684, + "y": -1384 + }, + "timeS": 23.7, + "score": 15, + "drainOk": true, + "sha256": "d0f1f12094b20bd72b6f21fb738d2f12431ce02dbe693214301c87bd96cd0592", + "bytes": 1341817, + "utc": "2026-07-25T09:18:07.117Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 260942, + "total": 1316640, + "ratio": 0.198 + } + }, + { + "name": "04-arena-edge-left.png", + "desc": "左边缘/左上:玩家贴左界(x≈-684),左应岩纹收口", + "phase": "play", + "pos": { + "x": -684, + "y": -1384 + }, + "timeS": 40.5, + "score": 28, + "drainOk": true, + "sha256": "5c9efb033ed4c58bf4f276c4a2a59057c12c515d7845956ef985529a79ba7580", + "bytes": 1254619, + "utc": "2026-07-25T09:18:08.201Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 214500, + "total": 1316640, + "ratio": 0.163 + } + }, + { + "name": "05-arena-edge-bottom.png", + "desc": "下边缘/左下:玩家贴下界(y≈1384),底应岩纹收口", + "phase": "play", + "pos": { + "x": -684, + "y": 1384 + }, + "timeS": 73.5, + "score": 55, + "drainOk": true, + "sha256": "0e24f49eb38d538022564445bb3e458cf807432d8f10dcaff248fe31dd988189", + "bytes": 1524921, + "utc": "2026-07-25T09:18:09.678Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 593402, + "total": 1316640, + "ratio": 0.451 + } + }, + { + "name": "06-arena-corner-br.png", + "desc": "右下角:同时贴右+下界,角落收口", + "phase": "play", + "pos": { + "x": 684, + "y": 1384 + }, + "timeS": 90.2, + "score": 71, + "drainOk": true, + "sha256": "5ac5fff82609edc4333e439b22cea591ea62ba901796716356172af0c99493fa", + "bytes": 1410634, + "utc": "2026-07-25T09:18:10.831Z", + "brightness": { + "ok": true, + "width": 780, + "height": 1688, + "bright": 1302327, + "total": 1316640, + "ratio": 0.989 + } + } + ], + "targetId": "3ACE052453272F97844CB90FF843ADA2", + "boot": { + "ok": true + }, + "arenaBgAssetProbe": "ready 1560x2960", + "startState": { + "phase": "play", + "pos": { + "x": 0, + "y": 0 + } + }, + "consoleErrors": [] +} diff --git a/game-runtime/games/shanhai-xingji/evidence/round-13/blackfix-summary.md b/game-runtime/games/shanhai-xingji/evidence/round-13/blackfix-summary.md new file mode 100644 index 00000000..f43d2f85 --- /dev/null +++ b/game-runtime/games/shanhai-xingji/evidence/round-13/blackfix-summary.md @@ -0,0 +1,89 @@ +# round-13 · 治本去除背景图烤黑边 + +- 检查点:round-13(去 bg-map1-arena-01.jpg 烤黑边 + 替换重接 + CDP 复核) +- 时间(UTC):2026-07-25T09:03 取证 / 处理 02:01–02:03 +- 机器:lili-mac.local(开发机本地,非 mini-desktop),node v22.22.3,Chrome 150 +- 本检查点**未 commit**(待主代理复核 + 创始人眼验) +- 改动边界:仅 `assets/bg/bg-map1-arena-01.jpg`(替换)+ `dist/`(重打 JS bundle)+ 本目录证据;**未改 src/、plugins/、contracts** + +## 病灶(处理前逐列/逐行亮度剖面测定) + +目标图 1560×2960。四边黑带性质不同: + +- **左**:纯黑 (0,0,0) 平铺 0–56px,x≈80 处锐变进岩纹(列均亮 1.4→21.3)。 +- **右**:纯黑 0–56px + 近黑缓坡延伸到 offset≈130 才到岩纹(列均亮 17→22,无锐变)。 +- **顶**:无纯黑,是暗青崖渐变 0–153px(行均亮 16–22,有纹理)。 +- **底**:**本即岩纹**(行均亮 30–44,苔绿),无黑带,无需处理。 + +左右两条**纯黑竖带**是烤边病灶:游戏在四边叠半透明暗角(`drawArenaBounds`,峰值 α=0.5),半透明叠纯黑仍≈黑,render 侧治不了,故治本改 jpg。 + +## 处理手法(PIL 确定性:裁黑带 + bicubic 缩放回填) + +裁掉四边黑/近黑带到岩纹起始处,裁后核心区 bicubic 缩放回 1560×2960: + +- 裁切线:左 L=84、右 R=1428(右裁 132)、顶 T=160、底不裁。裁后核心 1344×2800。 +- 缩放比:x×1.161 / y×1.057。存 JPEG quality=92 / 4:2:2。 + +### 为何选缩放、弃镜像(对比实证) + +并行产出两候选(同裁切线),用 Read 工具**亲眼看**全景与边条后定夺(亮度二阶指标抓不到结构对称,必须肉眼): + +- **镜像外翻填充**(`_cmp/preview-M-mirror.png`):黑带虽除,但左右岩壁巨石被镜像成左右对称的"墨渍/Rorschach"重复图案,顶部出现镜像拱形——正是工单警告的镜像痕迹,人工感强。 +- **裁后缩放**(`_cmp/preview-S-scale.png`):黑带除,岩壁巨石自然延伸到四边,无对称伪影;1.16x 上采样颗粒在全景与边条原分辨率下均不可见。 + +结论:镜像痕迹(中心无、边缘显眼的人工对称)比缩放颗粒(全图轻微软化)更刺眼,故选缩放。镜像候选仅作诚实留证,未采用。 + +### 为何不用 mmx 重生成 + +本地确定性图像处理已干净消除病灶,无需引入生成模型的随机性与 API 成本;且重生成无法保证与现有竞技场构图/熔岩走向一致,会牵动 render 侧已调好的暗角/clamp 对齐。仅在 PIL 两法均不可接受时才退回 mmx(本检查点未触发)。 + +## 副作用(如实) + +- **整图轻微上采样**:中心主玩区随边一起放大 1.16x,岩纹略软;亲眼看(01 全景)颗粒不可接受度低。 +- **右崖本征阴影**:源图右半是阴影崖面(岩纹列均亮 ~20–26),非烤边。缩放后右缘读作"暗崖"而非"亮岩"——这是源图本来的明暗,不是缺陷;游戏暗角叠其上读作天然崖影。 +- **四角偏暗**:裁切线恰落在左右黑带与顶暗带相交的暗角处,四角 12×12 均亮 8–11;游戏中四角本就被双暗角压到最暗(round-12 同位亮度比 0.049–0.105),暗角属设计内,未因本次处理变差。 +- 无镜像痕迹、无裁切错位、无颜色偏移。 + +## 处理后四边像素采样(读磁盘新 asset,含 JPEG 重压真实值) + +0–120px 列/行**均亮**(每 15px),应渐变、无平黑硬带: + +| 边 | 0 | 15 | 30 | 45 | 60 | 75 | 90 | 105 | 0–120 最小 | +|---|---|---|---|---|---|---|---|---|---| +| 左 | 23.7 | 24.2 | 25.0 | 25.4 | 27.3 | 27.1 | 27.2 | 28.8 | 23.3 | +| 右 | 22.0 | 23.6 | 23.7 | 23.5 | 25.6 | 25.9 | 25.0 | 23.3 | 21.4 | +| 顶 | 26.6 | 25.5 | 29.9 | 26.4 | 27.1 | 27.0 | 28.7 | 33.5 | 25.5 | +| 底 | 34.7 | 35.2 | 37.0 | 36.8 | 36.3 | 39.2 | 44.9 | 48.2 | 34.4 | + +- 最外 4px 平黑带占比:左 0.65% / 右 0.71% / 顶 0.24% / 底 0.19%(**处理前左右≈100%**;现仅为岩缝深阴影的散布像素,非连续硬带)。 +- 缘带纹理(列/行均亮标准差):左 1.9 / 右 1.2 / 顶 2.4 / 底 4.7(>0 = 有岩纹渐变,非平黑)。 +- 右缘最小 21.4 略低于 22 阈值:即上表右崖本征阴影(带纹理渐变,非黑带),见副作用说明。 + +## sha256 + +- 新 asset `assets/bg/bg-map1-arena-01.jpg`:`5e3cc78b3339efc616efeb573924224c359c5cfeb47a8d3f4fef25029b80db8f`(1560×2960,1.41MB) +- 处理前备份 `bg-before-blackfix.jpg`:`aaa42f3a2f2a47e35f2d7f68cf7e64e7a53726983f68081c0d9f86daadec1956` +- 6 截图 sha256 见 `00-arena-bg-result.json` 各 shot(本文末尾亦列)。 + +## CDP 截图(engine=stub&mode=evidence,seed=777,dpr2,视口 390×844;stepFrames 确定性驱动) + +进 play 态,对角走位压墙钳到四边/四角,截图前 `drainFade` 关升级弹层并等其关闭淡出(≤250ms)结束,保证截的是干净战场: + +| 文件 | 视角 | 玩家位 | phase | 亮度比(lum>40,自定口径,仅看相对) | +|---|---|---|---|---| +| 01-arena-center-panorama.png | 中心全景 | (0,0) | play | 0.974 | +| 02-arena-edge-right.png | 右边缘 | (684,0) | play | 0.525 | +| 03-arena-edge-top.png | 顶/右上 | (684,-1384) | play | 0.198 | +| 04-arena-edge-left.png | 左/左上 | (-684,-1384) | play | 0.163 | +| 05-arena-edge-bottom.png | 底/左下 | (-684,1384) | play | 0.451 | +| 06-arena-corner-br.png | 右下角 | (684,1384) | play | 0.989 | + +6 张 sha256: +- 01 `584181a172ca11199aed693234a963a63c2c17177e8cc6e7b80c95f0b3216784` +- 02 `7d9532a62c5b8dc17289c0ee67d6d52a57adb87934347cfd1f589aca77b93cd4` +- 03 `d0f1f12094b20bd72b6f21fb738d2f12431ce02dbe693214301c87bd96cd0592` +- 04 `5c9efb033ed4c58bf4f276c4a2a59057c12c515d7845956ef985529a79ba7580` +- 05 `0e24f49eb38d538022564445bb3e458cf807432d8f10dcaff248fe31dd988189` +- 06 `5ac5fff82609edc4333e439b22cea591ea62ba901796716356172af0c99493fa` + +肉眼复核结论(交创始人终验):左右原纯黑竖框已消失,改为岩壁/崖纹自然收口;顶缘为带纹理暗崖;底缘为岩纹。四边无 (0,0,0)/近黑硬带。亮度比仅自定口径参考,美丑不定论。