From 85f1caed5073aaca93b518594ad571e299d15662 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 29 Sep 2026 19:03:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(sample-v31):=20E=20=E6=A0=BC=E9=AB=98?= =?UTF-8?q?=E5=A2=99=E7=AB=8B=E9=9D=A2(=E7=94=A8=E6=88=B7=E6=96=B9?= =?UTF-8?q?=E6=A1=88:=E5=9C=B0=E9=9D=A2=E6=A0=BC=E5=8D=97=E9=82=BB?= =?UTF-8?q?=E5=A2=99=E2=86=92=E5=8D=97=E9=83=A8=2055%=20=E6=89=BF=E6=8E=A5?= =?UTF-8?q?=E5=A2=99=E9=9D=A2=E5=B1=95=E7=A4=BA,=E5=9F=BA=E8=89=B2?= =?UTF-8?q?=E9=87=87=E6=A0=B7=E5=A2=99=E9=A1=B6=E7=93=A6=E7=89=87=E5=90=8C?= =?UTF-8?q?=E6=BA=90;=E8=BF=9E=E7=BB=AD=E5=A2=99=E4=BD=93=E5=86=85?= =?UTF-8?q?=E4=BE=A7=E4=B8=8D=E5=87=BA=E7=AB=8B=E9=9D=A2);=E6=9C=BA?= =?UTF-8?q?=E6=A3=80=2017/17=20=E5=85=A8=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sample-v31-draft-机检报告-2026-09-29.md | 36 ++++++++++++++++++ tools/render_sample_sheet_v3.py | 38 +++++++++++++++++-- 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 design/research/sample-v31-draft-机检报告-2026-09-29.md diff --git a/design/research/sample-v31-draft-机检报告-2026-09-29.md b/design/research/sample-v31-draft-机检报告-2026-09-29.md new file mode 100644 index 00000000..f4ffe734 --- /dev/null +++ b/design/research/sample-v31-draft-机检报告-2026-09-29.md @@ -0,0 +1,36 @@ +# 样张 v3 方向稿机检报告(2026-09-29,art-bible v3.0——方向稿阶段,机检为参考;冻结闸=目检后机检批) + +生成:`python tools/render_sample_sheet_v3.py`;v3.0 口径:格底分档(世界底层档)/亮墨直画/色牌后备/物件级装饰/B 区舞台;断言阈值随冻结批校准。 + +## v1 否决原因 → 断言映射 + +| 否决原因(2026-09-28 用户) | 断言承载 | +|---|---| +| ①显示太丑(总纲) | A6 观感密度(整板明度 std ≥50.9=v1 实测 44.31×1.15)+既有装饰变体 ≥2 种 | +| ②封印色冲突 | 封印黑 #000000(9b6fcf6 已落,A1a 对表自动覆盖) | +| ③立体感不够 | A3 阈值 40→55 + F6 顶面/立面双明度带 Δ≥18 + F7 整板悬崖 DEPTH_PX 同源 | +| ④微光格只留微光 | F5c 微光段零 draw_inlay(d1dea82 已落) | + +## 断言明细 + +| 断言 | 判据 | 结果 | 明细 | +|---|---|---|---| +| F1 | 方案甲 8 邻拼装(词表查表,禁整块) | PASS | 错位 0 处;用件 15 种 ['center', 'center_crack', 'center_speckle', 'end_n', 'end_s', 'end_w', 'hrun', 'in_nw', 'in_sw', 'n', 'nw', 's', 'sw', 'vrun', 'w'] | +| F2 | 旗仅出现于未开格 | PASS | 旗位 (1, 2) 格态=W | +| F3 | 小人脚锚=自底边 25% 线(两态) | PASS | 脚 y=[213.75, 258.75] 期望=[213.75, 258.75] | +| F4 | 数字 0 格无字形(0=纯安全格裸地面) | PASS | 0 态格 38 个(示例 (4,4));数字表含 0 键=False | +| F5a | 接触带微光⊆英雄格周界(空间侧,不进墙格) | PASS | 微光 bbox=(86, 176, 119, 230) 英雄格=(90, 180, 135, 225) | +| F5b | 类型微光禁整格染色(中心 50% 区零染色像素) | PASS | 五格中心区全净 | +| F5c | 微光格零附加图形(微光段无角嵌调用——角嵌退役,微光只留微光) | PASS | 微光段无角嵌调用 | +| A1a | 色板对表圣经 §4.1 冻结值 | PASS | {'INK': '#33261B', '青墨': '#132E36', '赭墨': '#3C250C', '锈墨': '#4A1E14', 'PLATE': '#F5EAD3', '封印黑': '#000000', '危险红': '#A8321F', '奖励金': '#F0A828'} | +| A1b | 禁入带 HSV300°-345° 零命中 | PASS | 命中 0 像素(抽样) | +| A2 | 拼缝周界闭合(墙侧 2px 墨线 <70) | PASS | 全部墙地边界墨线在位 | +| A3a | v3 亮墨×格底 WCAG≥4.5:1(直画可行性硬指标) + 色牌后备组 ≥4.5:1 | PASS | 亮墨[('冷亮青白', 6.3), ('暖白', 6.0), ('金亮', 6.0)] 格底L=0.087;后备[('青墨×牌', 12.0), ('赭墨×牌', 12.0), ('锈墨×牌', 11.8)] | +| A3b | 图底分离读数(候选 Δ≥30——v2 阈值 55 与格底分档带数学冲突,校准归冻结批) | PASS | 墙顶 113 vs 地面 79,Δ=33(v2 阈值 55 系地板 L0.036 时代校定) | +| F6 | 墙格顶面/立面双明度带(南向临地墙格 Δ≥18,体积感机器代理) | PASS | 临地墙格 14 个;最小 Δ 76.3;均 Δ 105.0(v1 实测均 71.6) | +| F7 | 整板悬崖 DEPTH_PX 与 game 渲染常量同源(board_view.gd 解析) | PASS | DEPTH_PX=8.0(已解析);悬崖带均亮 69(<100);扩展 +8px | +| A6 | 观感密度:明度梯度均值 ≥4.70(v1 实测 4.09 上调 15%——高频细节能量) | PASS | 梯度均值 5.94(低频双峰由 A3 承载) | +| A5 | 画布四缘 2px 净空(零溢出) | PASS | 缘带内容像素 0 | +| A4 | 混排相融(游戏在库资产可载+UiKit 语义色对表;尺寸基线=换代后实态,校准归冻结批) | PASS | 小人源 (32, 32)(裁透明留白后 (19, 20))/立绘 (46, 48)/状态图标原件;INK/封印黑/奖励金 == ui_kit.gd | + +结论:**全绿**(17/17 PASS)。v3 方向稿机检=可行性参考(A3 亮墨对比为硬指标);冻结 = 用户目检方向稿后机检批(v3.0 闸形:目检先行→机检冻结)。 diff --git a/tools/render_sample_sheet_v3.py b/tools/render_sample_sheet_v3.py index 035d8065..b2cd1172 100644 --- a/tools/render_sample_sheet_v3.py +++ b/tools/render_sample_sheet_v3.py @@ -59,8 +59,8 @@ def asset_root(*parts): BOARD_DIR = ("game", "assets", "art", "board") CHAR_DIR = ("game", "assets", "art", "character") ICON_DIR = ("game", "assets", "ui", "icons") -OUT_PNG = os.path.join(ROOT, "artwork", "mockups", "sample-batch-v3-draft-2026-09-29.png") -OUT_REPORT = os.path.join(ROOT, "design", "research", "sample-v3-draft-机检报告-2026-09-29.md") +OUT_PNG = os.path.join(ROOT, "artwork", "mockups", "sample-batch-v31-draft-2026-09-29.png") +OUT_REPORT = os.path.join(ROOT, "design", "research", "sample-v31-draft-机检报告-2026-09-29.md") T_FONT = asset_root("artwork", "ui-reuse-2026-09-23", "4-字体", "fusion-pixel-12px(OFL)", "fusion-pixel-12px-proportional-latin.ttf") ZH_FONT = r"C:\Windows\Fonts\msyh.ttc" @@ -560,6 +560,34 @@ def draw_hero_on_board(board, ox, oy, cell, hx, hy, records, digit=None): records.append(("hero", hx, hy, fx, fy, digit)) +def draw_facade(board, x0, y0, cell): + """v3.1 高墙立面(用户方案:地面格南邻墙 → 南部承接墙面展示,E 格)。 + 南 45% 画墙身:横层理暗砖+口沿高光顶线(与墙顶分界);程序化示意,终稿=E 瓦片素材(词表扩展)。""" + d = ImageDraw.Draw(board) + fy0 = y0 + int(cell * 0.45) # 立面占南 55%(高墙感档,目检候选) + # 立面基色=墙顶瓦片实测色(E 与南侧墙顶须读作同一堵墙——采样 center 瓦片顶面区) + top = WALLS["center"].convert("RGB").crop((4, 4, 28, 14)) + px = list(top.getdata()) + wall_top_rgb = tuple(sum(c[i] for c in px) // len(px) for i in range(3)) + face = _gd_darkened(wall_top_rgb, 0.16) # 北立面=受光面,略暗于顶面 16% 分层 + d.rectangle([x0, fy0, x0 + cell, y0 + cell], fill=face) + for i in range(3): # 横层理(横条纹,禁竖条纹栅栏感——§3.2 高墙条) + ly = fy0 + int((i + 1) * (cell - int(cell * 0.45)) / 4.0) + d.line([(x0 + 2, ly), (x0 + cell - 2, ly)], fill=_gd_darkened(face, 0.30), width=1) + for i in range(2): # 层理错缝竖短线(砖缝) + for j in range(3): + vx = x0 + 6 + j * 14 + (i * 7) + vy0 = fy0 + 5 + i * 11 + d.line([(vx, vy0), (vx, vy0 + 7)], fill=_gd_darkened(face, 0.34), width=1) + d.rectangle([x0, fy0, x0 + cell, fy0 + 1], fill=_gd_darkened(wall_top_rgb, 0.35)) # 口沿(地面与立面交界=檐口阴线) + d.rectangle([x0, y0 + cell - 1, x0 + cell, y0 + cell], fill=_gd_darkened(face, 0.30)) # 底缘收头 1px(接墙顶北缘亮棱) + + +def is_facade_cell(gmap, x, y): + """E 格判定:本格是地面,且南邻(y+1)是墙。连续墙体内部不出立面(立面只露在地格侧)。""" + return (0 <= y + 1 < gmap.h) and gmap.grid[y][x] != "W" and gmap.grid[y + 1][x] == "W" + + def render_board(gmap, cell, overlays=None, scale_note=""): """按方案甲查表拼装渲染样张板。返回 (img, placement, glow_layer)。""" wpx, hpx = gmap.w * cell, gmap.h * cell @@ -585,6 +613,10 @@ def render_board(gmap, cell, overlays=None, scale_note=""): board.paste(FLOORS[vi].resize((cell, cell), Image.NEAREST), (x * cell, y * cell)) placement[(x, y)] = ("floor_%d" % (vi + 1), False) if overlays: + for y in range(gmap.h): # v3.1 E 格立面(高墙双格呈现——结构件,先于投影) + for x in range(gmap.w): + if is_facade_cell(gmap, x, y): + draw_facade(board, x * cell, y * cell, cell) board = apply_d_projection(board, gmap, cell) # D 投影档(立体承载) glow = Image.new("RGBA", (wpx, hpx), (0, 0, 0, 0)) return board, placement, glow @@ -1042,7 +1074,7 @@ def main(): ok = run_checks(board, placement, records, band, gmap, canvas) d = ImageDraw.Draw(canvas) - d.text((20, 14), "战斗一屏样张方向稿 v3-draft(2026-09-29,art-bible v3.0)——格底明度分档+亮墨直画+色牌后备+B区地窟看台;机检 %s(方向稿参考,冻结归目检后机检批);巢穴纹=程序占位" % + d.text((20, 14), "战斗一屏样张方向稿 v3-draft(2026-09-29,art-bible v3.0)——格底分档+亮墨直画+色牌后备+B区看台+E格高墙立面(v3.1);机检 %s(方向稿参考,冻结归目检后机检批);巢穴纹=程序占位" % ("全绿" if ok else "有 FAIL"), col=(232, 222, 200), font=F_TITLE) # 三区 mockup