51 lines
2.3 KiB
Plaintext
51 lines
2.3 KiB
Plaintext
// VERTICAL SLICE - NOT FOR PRODUCTION
|
|
// 封印印记(卡④ 法阵化批)——环+十字+环外压暗光圈,canvas_item 距离场实时绘制(无贴图缩放,
|
|
// 格边 26–46px 连续可变下任意格边清晰)。
|
|
// 事实源:art-bible v3.41 §3.2「封印印记」(形/画法/光圈/层序纪律)+ §8.2「封印印记参数表」;
|
|
// gdd/ux/battle.md「棋盘格尺寸公式」(格边 clampi 26–46)。
|
|
// 纪律:参数五枚+色全由 gd 侧逐次注入(参数单点 = ui_kit SEAL_* 五常量——禁在此改值,
|
|
// 下方默认值仅为兜底且与 §8.2 同值);光圈不出格(半径夹 cell_px/2);
|
|
// 零动效(不呼吸不脉冲——§2.1 挖掘期唯一在动 = 接触带微光);印记与光圈同用一色(光圈只改 alpha)。
|
|
// 坐标口径:VERTEX 为格件本件局部像素坐标(0..cell_px),不依赖 UV(同 cell_type_glow 口径)。
|
|
shader_type canvas_item;
|
|
render_mode blend_mix;
|
|
|
|
uniform float cell_px : hint_range(8.0, 128.0) = 46.0;
|
|
uniform float ring_frac = 0.82;
|
|
uniform float wall_frac = 0.11;
|
|
uniform float arm_frac = 0.156;
|
|
uniform float halo_frac = 0.09;
|
|
uniform float halo_alpha : hint_range(0.0, 1.0) = 0.50;
|
|
uniform float halo_gamma = 1.6;
|
|
uniform vec4 mark_col : source_color = vec4(0.0, 0.0, 0.0, 1.0);
|
|
|
|
varying vec2 v_local;
|
|
|
|
|
|
void vertex() {
|
|
v_local = VERTEX;
|
|
}
|
|
|
|
|
|
void fragment() {
|
|
vec2 d2 = v_local - vec2(cell_px * 0.5);
|
|
float r = length(d2);
|
|
float ring_r = 0.5 * cell_px * ring_frac;
|
|
float wall = wall_frac * 2.0 * ring_r;
|
|
float arm = arm_frac * 2.0 * ring_r;
|
|
float halo_w = 0.5 * cell_px * halo_frac;
|
|
// 印记体:环带(ring_r-wall/2 ≤ r ≤ ring_r)或十字(轴向带内且 r < ring_r——四端顶到环内沿)
|
|
bool in_ring = (r <= ring_r) && (r >= ring_r - wall * 0.5);
|
|
bool in_arm = (r < ring_r) && ((abs(d2.x) < arm * 0.5) || (abs(d2.y) < arm * 0.5));
|
|
float a = 0.0;
|
|
if (in_ring || in_arm) {
|
|
a = 1.0;
|
|
} else if (r > ring_r) {
|
|
// 环外压暗光圈:自环外缘向外衰减(半径夹 cell_px/2——不出格、不外溢邻格)
|
|
float rc = min(r, cell_px * 0.5);
|
|
float t = clamp((rc - ring_r) / max(halo_w, 0.001), 0.0, 1.0);
|
|
a = halo_alpha * pow(1.0 - t, halo_gamma);
|
|
}
|
|
COLOR = vec4(mark_col.rgb, mark_col.a * a);
|
|
}
|