iter9-numfix-a: L2/L3 数字可读性修复(甲案——数字墨族按板自适应)

- 根因:v3.5 冻结④亮墨三档(#D8ECF0 系)直画只按 L1 dungeon 验收;underdark/deep_underdark
  地板亮白筋纹归一后 p90=0.40/0.66,亮墨对亮斑 CR 1.0-1.9 融字(用户实机截图 2026-09-30 实证)
- 修法:_digit_ink_mode 按归一后地板逐像素分位数选墨族——对 p90 ≥4.5 且对均值 ≥2.0,
  亮族过选亮族否则深墨三档(青墨/赭墨/锈墨色温语义同构);缺盘平色回退态默认深墨
- 实测(引擎口径):dungeon 亮族 4.79/5.80 维持;underdark 深族 5.34/2.41;deep_underdark 深族 5.08/2.42
- 机检面:terrain_tile_sets_test 增三关对比断言(同一归一+选族管线+期望族表)21/21 绿
- 轻闸:冒烟 596/0+ui_input/ui/click/layout 四探针 PASS
This commit is contained in:
DKChan committed 2026-10-01 00:43:54 +08:00
1 parent 405bd7815f
commit 2301db5540
3 files changed
+111 -10

No files matched your search

@@ -36,6 +36,7 @@ func _init() -> void:
_check("前置:board_gen 词表非空(%d 型)" % types.size(), types.size() > 0)
_test_set_completeness(board_dir, types)
_test_hue_domains(board_dir)
_test_digit_ink_modes(board_dir, types)
if _failures > 0:
push_error("[terrain_tile_sets_test] %d/%d 项失败" % [_failures, _checks])
quit(1)
@@ -128,3 +129,40 @@ func _load_stats(board_dir: String, fname: String, top_half: bool) -> Dictionary
if n_v == 0 or n_h == 0:
return {}
return {"h": h_sum / n_h, "v": v_sum / n_v}
# 数字墨族按板自适应对比断言(L2/L3 亮瓦融字缺陷修复 2026-10-01——甲案机检面):
# 每个图型走 BoardView 同一归一+测光+选族管线(禁测试侧另写算法),断言:
# ①所选墨族对 p90 亮斑 ≥4.5 且对均值 ≥2.5(双门槛,同 _digit_ink_mode 判据常量)
# ②期望族面:dungeon=亮族(样张 v3.5 冻结④原样);underdark/deep_underdark=深族(亮白筋纹 p95
# 0.66–0.77 上亮墨 CR 1.0–1.9 融字实证)——期望表防「选族逻辑被顺手改坏」回归
func _test_digit_ink_modes(board_dir: String, types: Array) -> void:
var expect_dark := {"dungeon": false, "underdark": true, "deep_underdark": true}
var variants: int = int(BoardViewScript.TILE_FLOOR_VARIANTS)
for bt in types:
var lumas: Array = []
var readable := true
for i in range(1, variants + 1):
var p := board_dir.path_join("terrain_floor_%s_%d.png" % [String(bt), i])
if not FileAccess.file_exists(p):
readable = false
break
var tex: Texture2D = ImageTexture.create_from_image(Image.load_from_file(p))
BoardViewScript._normalize_floor_luma(tex, 0.10, lumas)
if not readable:
_check("图型 %s 数字墨族断言样本可读" % String(bt), false)
continue
var mode: Dictionary = BoardViewScript._digit_ink_mode(lumas)
var dark: bool = bool(mode["dark"])
var cr_p90 := float(mode["cr_p90_bright"]) if not dark else float(mode["cr_p90_dark"])
var cr_mean := float(mode["cr_mean_bright"]) if not dark else float(mode["cr_mean_dark"])
var family := "亮墨族" if not dark else "深墨族"
_check("图型 %s 所选%s 对 p90 ≥%.1f(实测 %.2f)" % [String(bt), family,
float(BoardViewScript.DIGIT_INK_CR_P90), cr_p90],
cr_p90 >= float(BoardViewScript.DIGIT_INK_CR_P90))
_check("图型 %s 所选%s 对均值 ≥%.1f(实测 %.2f)" % [String(bt), family,
float(BoardViewScript.DIGIT_INK_CR_MEAN), cr_mean],
cr_mean >= float(BoardViewScript.DIGIT_INK_CR_MEAN))
if expect_dark.has(bt):
_check("图型 %s 墨族期望=%s(实测=%s)" % [String(bt),
"深族" if bool(expect_dark[bt]) else "亮族", family], dark == bool(expect_dark[bt]))