20 KiB
提案:三关色相 × 五组微光互辨抽测方案(2026-10-29)
性质:待办清单条目「三关色相 × 五组微光互辨抽测——三关图类型色板终值冻结的前置抽测」的设计段过程稿。本轮只做设计:不出素材、不跑抽测、不改
design/art/art-bible.md(v3.22 已封提交)与其它权威文档、不改代码。 上游依据:art-bible§6.3(三关图类型色板与终值取值程序,本抽测的登记处)、§4.2(类型微光色带五组,色相+明度双码)、§4.3(图类型四槽与不变槽)、§1.4(格子样张,终值冻结闸)、§2(明度三档带与世界底层两子带)、§4.1(色板分层、第二道门、对比硬指标)、§3.2(装饰变体与微光画法)、§6.5(视野迷雾与记忆态);实现侧在役口径 =game/presentation/views/ui_kit.gd微光明度阶梯头注、game/tests/unit/presentation/type_glow_test.gd、game/probe/type_glow_shot_probe.gd、tools/render_sample_sheet_v3.py的CHECKS断言写法。 所引色值一律转写自tools/recolor_terrain_tiles.py的PALETTES与art-bible§4.2 冻结值,冲突时以 owner 文档/脚本为准(本提案不复述圣经定值、也不新增色值)。
0. 三件缺口的定值结论(只读这一段也能定)
| 缺口 | 结论 |
|---|---|
| ① 取样面 | 取样单元 = 三关格底 × 五组微光 = 15 对;每对铺 3 格(素砖底/装饰变体底 A/装饰变体底 B 各一),另每关每底型 1 格无微光基准格 → 取样格 45,基准格 9,合计 54 格。装饰变体底带(两种,与 §1.4 样张清单「含至少两种装饰变体」同数),迷雾记忆态底不带(推导见 1.4)。 |
| ② 互辨判据 | 目检与机检并用:目检先行、机检冻结(沿 §1.4 整屏样张闸明文闸形)。目检管「色相吞没」这条机器测不了的观感判据(四条,§2.2);机检管明度与可辨下限(四条,§2.3),阈值全部沿用在役值:合成对比 ≥1.20(type_glow_test.gd/type_glow_shot_probe.gd 的 GRAY_CR_MIN)、三通道差不得全部 <8/255(§4.1 第二道门量纲)、样图读数与合成模型差 ≤±2/255(ui_contrast_probe.gd 迷雾行值容差)。不自造阈值。 |
| ③ 产物形态 | 两者兼有:一张并列样图(承担目检)+一份逐对读数表(承担机检冻结)。样图是本条目要出的图,落 artwork/ 在途样张 → 本条改动面须补「美术素材」档;出图与读数由样张脚本产 → 同时补「工具代码」档。本轮改动面 = 文档+美术素材+工具代码。 |
1. 抽测设计:取样面
1.1 取样单元与组合数
- 取样单元 = 一对(当关格底 × 一组微光)——§6.3 点名的风险就是「格底与微光同在未开格面,邻近色相有吞没风险」,风险发生在一对之内,故以对为单元。 ←机检: 读数表行数 = 45(3 关 × 5 组 × 3 底型),逐行可追溯到唯一一格
- 组合数 = 3 × 5 = 15 对:三关 =
dungeon/underdark/deep_underdark(§4.3 词表),五组 = 通用增益芥末黄/治疗黄绿/穿刺青/魔法紫罗兰/群伤绯红(§4.2 冻结五组;绘制取值 =ui_kit.gd的TG_GLOW_*五个常量,组内不细分)。 ←机检: 样图内五组色块与ui_kit.gd五个常量逐位一致
1.2 底型三版(素砖底 + 两种装饰变体底)
- 素砖底版:该关墙瓦片
wall_center件原图铺底。 - 装饰变体底版 A/B:该关
wall_center_crack(裂纹)与wall_center_speckle(碎石斑)两件原图铺底——两者即高墙瓦片词表在册的两种装饰变体件,与 §1.4 样张内容清单「含至少两种装饰变体」同数。 ←机检: 抽测脚本装载的装饰变体件名 ∈ 高墙瓦片词表 16 件名单,且两版件名互不相同 - 为什么要带装饰变体底:微光是画在格内缘的带状泛光(§4.2 v2 呈现参数:内缘带状、带宽格边÷8),装饰变体按 §3.2 纪律贴砖缘分布——两者同处缘部、空间重叠,装饰纹理会混进微光带的合成值。素砖底上互辨过关不等于变体底上过关,故三版都要铺。 ←方向性
- 每对 3 格:同一对(关 × 组)在三种底型上各铺一格,任一底型不通过即该对不通过。
1.3 排布与格数
- 排布:三关各一块,竖排;每块 3 行(素砖/变体 A/变体 B)× 6 列(列 0 = 无微光基准格,列 1–5 = 五组微光,按明度阶梯序芥末黄→黄绿→青→紫罗兰→绯红排列)。
- 阶梯序即相邻并列:列 1–5 按阶梯序排,任意相邻两列即一组「两两相邻格微光并列」(§1.4 样张内容清单点名项),每关每底型 4 对,合计 3 × 3 × 4 = 36 对,无需另铺对照列。 ←机检: 每块列 1–5 的带内合成亮度按列序单调递减
- 列 0 基准格:同关同底型、不画微光的一格,供目检比对「这一关的格底本身长什么样」,也是机检「同格中心素底均值」的取样源。
- 格边长 = 45px(D 区实比,与 §1.4 主样张板同档);每块 6 × 45 = 270px 宽、3 × 45 = 135px 高,加块标题 20px;正图段 465px 高。
- 灰度副本段:正图段整段去色相(§4.5「色弱模拟(去色相)」口径)另出一份,等幅面,紧接正图段下方——色弱通道的目检在副本上做,不要求评测者自己脑补去色。 ←目检: 灰度副本段内零彩色像素(R=G=B)
- 画布:单段 620px 宽(左标注列 170 + 图 270 + 右说明列 180);两段 + 页眉 60 + 段间 30 + 图例 80 → 画布 640 × 1120,四缘留 10px 净空(过 §1.4 A5 四缘净空断言)。本条为过程件布置,不入 §8.2。 ←机检: 样图四缘 10px 带内零内容像素
1.4 迷雾记忆态底:不带(推导)
- 不带。推导:类型微光只画在未开格(§4.2/§4.6.3「未开格类型预读」单通道);迷雾记忆态只作用于区外已开格(§6.5「区外已开格:暗淡记忆态」);区外未开格一律全黑不渲染(§6.5 二值态,零信息)。三者合起来:微光与记忆态永不同格共存,不构成取样面。
- 邻格关系(记忆态已开格与带微光的未开格在灯光区边界相邻)的可辨性由 §2 明度分层(墙顶受光档 L≥0.30 对记忆态合成底 ≈0.036)与 §6.5 可辨性自查三通道承载,不属本抽测面。 ←机检: 抽测样图内零迷雾灰罩合成底格(记忆态合成底三关行值
#4C4038/#3F4147/#3E4048零出现)
1.5 铺底值的取法
- 铺底 = 该关在役墙瓦片素材原图(
terrain_wall_*_<board_type>.png,由tools/recolor_terrain_tiles.py程序换色产;素材不入 git,本地需有现件,缺件即抽测不成立的先决阻塞)。 - 铺底代表值 = 该关墙顶受光家族最亮槽(色表
H2槽),用于登记与读数比对;若实测未过 §4.1 硬指标门(L≥0.30、饱和 ≤0.55、避 300°–345°),则沿同家族向更亮槽上移直到过门——仍在在役色表内,零新增色值。 ←机检: 三关铺底代表值逐一满足 L≥0.30 且饱和 ≤0.55 且色相 ∉ [300°,345°] - 机检用的「格底均值」不取色表槽值,取渲染面:该关墙瓦片在内缘带区域(与
type_glow_shot_probe.gd同口径:de < 格边 × 0.125)的像素均值——微光落在缘部,判据必须比对的正是它压着的那一圈底,不是整格平均。
2. 互辨判据
2.1 两段的分工(沿 §1.4 已立闸形,不自造)
- 闸形 = 目检先行、机检冻结,直接沿用 §1.4 整屏样张闸明文写法(「方向稿目检先行(防『机检过闸但气质否决』式返工),目检过后机检冻结」)。本抽测是 §1.4 格子样张的前置,与同一闸形对齐。
- 分工理由:本次要判的风险是色相吞没——「这一组微光在这块格底上还看不看得出来、会不会看成另一组或看成装饰」。这是观感判据,机器测不了;本作对此已有明训(§4.1「机检≠看得清」,目视验证面 = 渲染帧取证)。机器能测的是明度与可辨下限,故机检只管它能管的那一段。 ←方向性
- 冲突处理:目检不通过的一对,机检即使全绿也判该对不通过(目检先行即否决权在前);机检不通过的一对,目检即使看得出也判不通过,走 §4 步骤 S5 修法后重跑。 ←机检: 读数表逐行判定 = 目检判定 ∧ 机检 B ∧ 机检 C,三者并列取严
2.2 目检判据(看什么、算过,四条)
- 逐对指认:对 45 个取样格逐格报出「这一格的微光属哪一组」(五选一),与样图答案表逐位比对;45/45 全中才通过,指认不出或报错组即该格不通过。 ←目检: 逐格报出的组号与答案表 45/45 一致
- 灰度副本重复一遍:在同一图的去色相副本上重做第 1 条(色弱通道,§1.4 验收 2「色弱玩家的类型主通道 = 微光」+ §4.5⑨),同样 45/45。 ←目检: 灰度副本上逐格报出的组号 45/45 一致
- 相邻并列可辨:36 对相邻微光格(1.3 阶梯序相邻列)逐对判「两格是否可分辨」,全对可分才通过(§1.4 样张内容清单「含两两相邻格微光并列」)。 ←目检: 36 对逐对判定全为可分
- 装饰不抢读:两种装饰变体底上的微光仍可指认,且装饰不构成格内第二焦点(§3.4 焦点预算:微光为底效泛光不作焦点,装饰残缺内凹自然后退)。 ←目检: 30 个变体底取样格(2 变体 × 3 关 × 5 组)内无一处装饰被判为焦点
2.3 机检判据(阈值与出处,四条)
- 机检 A|五组明度阶梯逐关重算(沿用
type_glow_test.gd④ 与type_glow_shot_probe.gdV6 在役口径,只把合成底从固定BRICK换成当关格底均值):五组按阶梯序合成后 Rec.709 亮度单调递减,且任意两组合成对比 ≥1.20(对比 = WCAG 线性域相对亮度 +0.05 偏移,判据线GRAY_CR_MIN = 1.20,与tools/shot_checker.pyWCAG 段同公式)。三关 × 三底型各跑一遍,30 行读数。 ←机检: 每关每底型阶梯单调成立且最弱合成对比 ≥1.20 - 机检 B|格底-微光可辨底线(沿用 §4.1 第二道门量纲 8/255):每一对的「微光带内合成均值」与「同格中心素底均值」的 RGB 三通道差不得全部 <8/255——三通道里至少一通道 ≥8/255 才过。全 <8 即肉眼不可辨,等于微光被格底吞没,直接否决。 ←机检: 45 行读数中三通道差全部 <8/255 的行数 = 0
- 机检 C|绘制参数校准(沿用
ui_contrast_probe.gd迷雾行值 ±2/255 容差):样图带内均值与合成模型(0.49 × 微光色值 + 0.51 × 格底均值,ui_kit.gd头注登记口径)逐对差 ≤±2/255;超差即样图绘制参数与 §4.2 v2 冻结呈现参数(α170、带宽格边÷8、软边 0.55、圆角 2px)不符,须校准后重出图,否则后续读数全部失真。 ←机检: 45 行读数中模型差 >±2/255 的行数 = 0 - 机检 D|格底候选值准入(沿用 §4.1 硬指标与两道门):三关铺底代表值各过 L≥0.30、饱和 ≤0.55、避 300°–345° 禁入带、§4.2 语义检查(环境域,不占红/金/蓝/紫赤/绿语义段)、与既有任一色三通道差不得全部 <8/255。 ←机检: 三关铺底代表值五门全过,逐枚列读数
- 说明:机检 A 的 1.20 与机检 B 的 8/255、机检 C 的 ±2/255 三个数值全部是本作在役值,本轮不新拟一个数。色相吞没不设机检阈值——本作没有任何条文给出色相差门槛,自造一个数等于把观感问题伪装成可机检问题。 ←方向性
2.4 谁来判
- 机检 = 脚本自判:沿用
tools/render_sample_sheet_v3.py的CHECKS机制(:113建表/:117登记/:1033汇总/:1164出报告表),逐项打印 PASS/FAIL 并输出机检报告。 - 目检 = 用户:§1.4 闸形定气质终审为用户目检(样张 v3 先例:机检 17/17 全绿后由用户目检验收)。
3. 产物形态与改动面
- 产物 = 两者兼有:
- 一张并列样图(正图段 + 灰度副本段 + 图例,54 格,1.3 排布)——承担目检四条;
- 一份逐对读数表——表一「逐对表」45 行(关/底型/微光组/带内合成均值/同格中心素底均值/合成对比/三通道差/模型差/色相差/判定),表二「组间表」30 行(关/底型/组对/合成对比/灰度亮度/判定),承担机检 A–D 与冻结后的回归比对。
- 归档位:样图落
artwork/在途样张(与 §1.4 样张 v3 产物artwork/mockups/sample-batch-v3-final-2026-09-30.png同归位;图片不入 git,按 §8.3 归档纪律);读数表为过程件,随样图同批输出落reports/。 - 改动面结论(本轮)= 文档 + 美术素材 + 工具代码:
- 美术素材:样图是本条目要出的图,落
artwork/在途样张 → 按doc-conventions§12.1 划线判据(美术素材 =artwork/在途样张与game/assets/art/终稿)须补本档; - 工具代码:出图与读数由
tools/下样张脚本产(扩既有样张脚本或单立抽测脚本,二选一由执行批定)→ 须补本档; - 文档:终值落位改 §6.3 与本待办条目 → 本档原已有;
- 不补「游戏代码」:本轮不改
game/(不改探针、不改ui_kit色值)。若抽测判某组不互辨而需动微光明度档(provisional 域,见步骤 S5),那是下游修法,届时再补该档,本轮不预写。
- 美术素材:样图是本条目要出的图,落
4. 执行步骤(一步一动 + 一个可核查结果)
- S1 取三关铺底值:从
tools/recolor_terrain_tiles.py的PALETTES取三关墙顶受光家族最亮槽值各一枚,逐枚跑机检 D。→ 结果:三关铺底值过门读数表(每枚列 L、饱和、色相、与既有色最小三通道差、语义检查结论)。 - S2 出并列样图:跑样张脚本产样图(含灰度副本与图例),脚本同步打印机检 A/B/C 逐项结果。→ 结果:一张 PNG(54 取样格 + 灰度副本 + 图例)+ 脚本断言打印全项 PASS/FAIL。
- S3 目检:用户在样图上按 §2.2 四条逐项判,逐格/逐对记录。→ 结果:目检判定表(90 次指认 + 36 对相邻并列,逐项 PASS/FAIL + 不通过项描述)。
- S4 汇总裁定:目检四条全过 且 机检 A–D 全绿 = 抽测通过。→ 结果:抽测结论一行(通过/不通过 + 不通过项清单)+ 逐对读数表一(45 行)与组间表二(30 行)。
- S5 修法(仅不通过时):先调该组微光的明度档——
ui_kit.gd头注已写明明度档属 provisional 域、允许域内自调(翻动色相才触 §4.2 冻结面),调明度零新增色值;明度档调到域边界仍不过,再换当关格底槽(同家族内换槽,仍在在役色表内,零新增)。改完重跑 S2–S4。→ 结果:修订后样图 + 重跑读数(目标全绿)。 - S6 终值落位:抽测通过后,把三关
tile_closed与wall_ambient终值登记进 §6.3 三关行,并按 §4.1 分层②场景环境子板口径登记(每套 ≤32 色、过两道门)。→ 结果:§6.3 三关行含两槽终值色值字面量,且该行现行机检断言已同步改写(见 §5 断言翻转)。 - S7 下游冻结:按 §4.3 现行四槽换色规则重跑 §1.4 格子样张,过闸即砖面形态与色板冻结。→ 结果:§1.4 样张重跑机检全绿 + 用户目检通过。
5. 终值如何落位
- 落哪两槽:§4.3 四槽中的
tile_closed(未开格底)与wall_ambient(墙雾氛围 tint)——即本条目原文点名的两槽。tile_open已由 §1.4 样张 v3 冻结在世界底层档、variant_tint只改色相不改纹形(归地形变异批),两槽不属本条。 - 按什么程序:§6.3 明文两步——先抽测(本条),再按 §4.3 现行规则重跑 §1.4 格子样张冻结,色值不代填。冻结后落 §6.3 修订。
- 断言翻转(易漏,务必同批做):§6.3 现行机检断言是「本节三关行无
tile_closed/wall_ambient终值色值字面量(终值未冻结前禁填)」。填值那一刻该断言必红,故落位同批必须把它改写为「三关行两槽终值 == 冻结值,且与 §4.1 场景环境子板登记同值」——禁只填值不改断言。 ←机检: §6.3 三关行两槽终值与 §4.1 环境子板登记值逐字一致,且该行机检断言已改指冻结值 - 两槽终值从哪取(零新增):
tile_closed取该关在役墙瓦片墙顶受光档槽值;wall_ambient取同关色表内带该关主题色相的槽值(dungeon 暖棕/underdark 冷蓝灰/deep_underdark 铁灰,§6.3 方向候选)。两槽取同关同槽值亦可(同属环境域,不撞 §4.2 语义段,一色两岗在环境域不违例);若要拆成两枚不同值,须走 §4.1 分层②「新增环境色」路径(不占 48 token 额度,但仍属新增),本轮不取、不预写。 - 额度账:两槽终值属 §4.1 分层②场景环境子板(环境色 = 地面/石材/背景,随场景走;每屏一套 ≤32 色,不占 48 token 额度)。本轮终值全部从在役色表取,需新增色值 = 0,48 色余量仍为 0,无需压缩任何既有色。
- wall_ambient 的明度口径注(本轮按此执行):tint 只染色相与饱和,不改被染面的明度档——被染面明度由该面自身层档定(棋盘墙雾面走墙顶受光档,B 区背景走世界底层档,§6.1)。推导:另一读法(tint 连带明度、把被染面拉到 L≥0.30)会同时撞 §6.1「背景明度走世界底层档」、§2 世界底层两子带(0.014–0.06/0.08–0.14)与 §1.4 整屏②项层间可分三条,是唯一会同时破三条的读法,故不取。§4.3 的 L≥0.30 在此口径下仍作槽值登记门(登记值取墙顶受光档槽值即满足)。另:
wall_ambient不与微光同面(它是背景/墙雾 tint,微光画在格面),不进本抽测取样面,其终值由 S7 的 §1.4 重跑闸判定。
6. 待裁点清单
零待裁点。 三件缺口全部由圣经条文与在役实现推出定值:取样面由 §4.2/§3.2/§6.5 推出(含「迷雾记忆态底不带」的推导),判据阈值全部沿用在役值(1.20/8/255/±2/255)不自造,产物形态与改动面按 doc-conventions §12.1 划线判据直接判档,终值取值路径零新增色值(不触 48 额度),wall_ambient 的明度口径按「唯一不破三条的读法」定值。
7. 附:读数表字段定义
表一 逐对表(45 行 = 3 关 × 5 组 × 3 底型)
| 字段 | 口径 |
|---|---|
| 关 / 底型 / 微光组 | 取样面坐标,可追溯到样图唯一一格 |
| 带内合成均值 RGB | 该格内缘带(de < 格边 × 0.125)像素均值,与 type_glow_shot_probe.gd 同口径 |
| 同格中心素底均值 RGB | 同格中心区(内缩 20%,CORE_PAD_FRAC)像素均值 |
| 合成对比 | WCAG 线性域相对亮度 +0.05 偏移,供机检 A 判读 |
| 三通道差(最大/最小) | 带内合成均值 减 素底均值,供机检 B 判读(判据看最小通道是否 <8) |
| 模型差 | 带内合成均值 减 合成模型(0.49 × 微光色值 + 0.51 × 格底均值),供机检 C 判读 |
| 色相差(度) | 铺底代表值与微光组色相的差值,只作读数不设门槛,供目检与后续定值参考 |
| 判定 | 目检 ∧ 机检 B ∧ 机检 C,并列取严 |
表二 组间表(30 行 = 3 关 × 3 底型 × 10 组对)
| 字段 | 口径 |
|---|---|
| 关 / 底型 / 组对 | 五组两两全组合(type_glow_shot_probe.gd 全对比对口径) |
| 合成对比 | 同表一公式,判据 ≥1.20(机检 A) |
| 灰度合成亮度 | Rec.709 系数合成亮度,供阶梯单调判读 |
| 判定 | 合成对比 ≥1.20 且阶梯单调成立 |