commit
7aa0126b22
5 files changed
+110
-49
No files matched your search
@@ -5,7 +5,8 @@
|
||||
# 微光色值与呈现参数 = game/presentation/views/ui_kit.gd TG_GLOW_*/TYPE_GLOW_*(v2 冻结);
|
||||
# 合成公式 = game/presentation/views/cell_type_glow.gdshader(blend_mix 距离场柔光);
|
||||
# 带域/格心取样 = game/probe/type_glow_shot_probe.gd(de<格边×0.125 / 内缩 20%);
|
||||
# 硬指标门 = art-bible §4.1(L≥0.30 线性域 / 饱和≤0.55 / 避 300°–345°);
|
||||
# 准入门值(亮度地板/饱和上限/禁入色相带/近色容差)单点在本件 FLOOR_L·CEIL_SAT·
|
||||
# BANNED_HUE·NEAR_EPS;art-bible §4.1 只述「未开格底与微光存在相对亮度关系」并指路本件。
|
||||
# 既有色板比对池 = game/tests/golden/palette_baseline/ 两张条带并集(palette_check.py 同源)。
|
||||
# 方案 §2.3 机检 C 口径订正:模型 0.49/0.51 是反解近似(ui_kit.gd 头注「模型域与实测的差
|
||||
# = shader 距离场权重非扁平混合」),比较对象改为 shader 精确合成模型(逐像素复刻),判据线
|
||||
@@ -43,12 +44,13 @@ CELL = 45 # D 区实比格边
|
||||
BAND = CELL * BAND_FRAC # 5.625
|
||||
CORE_PAD = int(CELL * 0.20) # 格心内缩(探针 CORE_PAD_FRAC=0.20)
|
||||
|
||||
# ── 三关铺底代表值 = 色表墙顶受光家族最亮槽 H2(tools/recolor_terrain_tiles.py PALETTES)──
|
||||
H2_VALUES = {
|
||||
"dungeon": (181, 155, 119),
|
||||
"underdark": (186, 193, 210),
|
||||
"deep_underdark": (150, 158, 186),
|
||||
}
|
||||
# ── 铺底准入门值单点(文档侧只述「未开格底与微光存在相对亮度关系」,数值归本件)──
|
||||
FLOOR_L = 0.30 # 未开格底相对亮度地板(线性域)
|
||||
CEIL_SAT = 0.55 # 饱和度上限
|
||||
BANNED_HUE = (300.0, 345.0) # 禁入色相带(Boss 紫赤独占)
|
||||
NEAR_EPS = 8 # 近色容差(三通道差全 <此值 即近色)
|
||||
B_MIN_CH_DIFF = 8 # 机检 B|格底-微光可辨底线(三通道至少一通道 ≥此值)
|
||||
C_MODEL_TOL = 2 # 机检 C|样图与合成模型容差(±此值 /255)
|
||||
BOARD_TYPES = ["dungeon", "underdark", "deep_underdark"]
|
||||
BASE_VARIANTS = [ # (底型名,瓦片件名后缀)——素砖 + 两种装饰变体(高墙瓦片词表在册件)
|
||||
("素砖", "terrain_wall_center"),
|
||||
@@ -139,6 +141,23 @@ def load_tiles():
|
||||
return tiles
|
||||
|
||||
|
||||
def lit_slots(tiles):
|
||||
"""铺底代表值 = 该关三块底型瓦片像素里线性亮度最大的实测色(顶面受光档)。
|
||||
零表值:不引用任何色表常量,素材换色后读数自动跟随。"""
|
||||
slots = {}
|
||||
for bt in BOARD_TYPES:
|
||||
best = None
|
||||
for vn, _ in BASE_VARIANTS:
|
||||
px = tiles[(bt, vn)]
|
||||
for y in range(CELL):
|
||||
for x in range(CELL):
|
||||
c = px[x, y]
|
||||
if best is None or rel_lum(c) > rel_lum(best):
|
||||
best = c
|
||||
slots[bt] = best
|
||||
return slots
|
||||
|
||||
|
||||
# ── 带域/格心取样(探针口径)──
|
||||
def band_pixels():
|
||||
"""带域像素集(整数格坐标 de < 格边×0.125,type_glow_shot_probe 口径)。"""
|
||||
@@ -187,21 +206,22 @@ def load_baseline_palette():
|
||||
|
||||
def gate_d(tiles):
|
||||
baseline = load_baseline_palette()
|
||||
lit = lit_slots(tiles)
|
||||
rows = []
|
||||
all_pass = True
|
||||
for bt in BOARD_TYPES:
|
||||
rgb = H2_VALUES[bt]
|
||||
rgb = lit[bt]
|
||||
h, s = hsv(rgb)
|
||||
lin = rel_lum(rgb)
|
||||
l_ok = lin >= 0.30
|
||||
s_ok = s <= 0.55
|
||||
hue_ok = not (300.0 <= h <= 345.0)
|
||||
l_ok = lin >= FLOOR_L
|
||||
s_ok = s <= CEIL_SAT
|
||||
hue_ok = not (BANNED_HUE[0] <= h <= BANNED_HUE[1])
|
||||
# 近色门:三值=在役素材色(已在基线池内),palette_check 双门②只判新增色——报读数不判红
|
||||
near = [b for b in baseline if all(abs(rgb[i] - b[i]) < 8 for i in range(3))]
|
||||
near = [b for b in baseline if all(abs(rgb[i] - b[i]) < NEAR_EPS for i in range(3))]
|
||||
ok = l_ok and s_ok and hue_ok
|
||||
all_pass = all_pass and ok
|
||||
rows.append((bt, rgb, lin, s, h, len(near), ok))
|
||||
check("D-" + bt, "铺底代表值门(L/饱和/禁入带;近色只报读数)", ok,
|
||||
check("D-" + bt, "铺底代表值门(底型瓦片实测顶面受光档;亮度/饱和/禁入带,近色只报读数)", ok,
|
||||
"RGB=%s L=%.3f 饱和=%.3f 色相=%.1f° 近色对=%d(在役素材色,非新增)%s%s%s"
|
||||
% (rgb, lin, s, h, len(near),
|
||||
"" if l_ok else " [L红]", "" if s_ok else " [饱和红]",
|
||||
@@ -300,6 +320,7 @@ def run_checks(img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot):
|
||||
table2 = [] # 90 行组间表
|
||||
band_means = {}
|
||||
fail_b, fail_c = [], []
|
||||
lit = lit_slots(tiles)
|
||||
|
||||
for bt, y0 in blocks:
|
||||
for vn, _ in BASE_VARIANTS:
|
||||
@@ -321,13 +342,13 @@ def run_checks(img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot):
|
||||
model = model_band_mean(px, glow)
|
||||
diff_model = max(abs(band_mean[i] - model[i]) for i in range(3))
|
||||
ch_diff = [abs(band_mean[i] - core_mean[i]) for i in range(3)]
|
||||
b_ok = max(ch_diff) >= 8
|
||||
c_ok = diff_model <= 2
|
||||
b_ok = max(ch_diff) >= B_MIN_CH_DIFF
|
||||
c_ok = diff_model <= C_MODEL_TOL
|
||||
if not b_ok:
|
||||
fail_b.append("%s/%s/%s" % (bt, vn, gname))
|
||||
if not c_ok:
|
||||
fail_c.append("%s/%s/%s" % (bt, vn, gname))
|
||||
hue_gap = abs(hsv(H2_VALUES[bt])[0] - hsv(glow)[0])
|
||||
hue_gap = abs(hsv(lit[bt])[0] - hsv(glow)[0])
|
||||
hue_gap = min(hue_gap, 360 - hue_gap)
|
||||
table1.append((bt, vn, gname, band_mean, core_mean, model,
|
||||
diff_model, ch_diff, hue_gap, b_ok and c_ok))
|
||||
@@ -396,7 +417,7 @@ def write_report(table1, table2, d_rows):
|
||||
]
|
||||
for cid, name, ok, detail in CHECKS:
|
||||
lines.append("| %s | %s | %s:%s |" % (cid, "PASS" if ok else "FAIL", name, detail))
|
||||
lines += ["", "## S1 机检 D:铺底代表值(H2 槽)五门", "",
|
||||
lines += ["", "## S1 机检 D:铺底代表值(底型瓦片实测顶面受光档)五门", "",
|
||||
"| 关 | RGB | L(线性域) | 饱和 | 色相 | 近色对 | 判定 |", "|---|---|---|---|---|---|---|"]
|
||||
for bt, rgb, lin, s, h, near, ok in d_rows:
|
||||
lines.append("| %s | %s | %.3f | %.3f | %.1f° | %d | %s |" % (bt, rgb, lin, s, h, near, "过" if ok else "红"))
|
||||
|
||||
Reference in new issue
Block a user