HANDOFF/ 项目进度
🎯 Goal · 目标
把网站的 Liquid Glass 视觉做到 Apple iOS 26 实机水平的 10/10,包含:
1. ✅ 物理级 Blinn-Phong specular(v3+)
2. ✅ Schlick Fresnel + 边缘色散(v3+)
3. ✅ 流动液面 caustic(domain warping)(v5)
4. ✅ Press / Hover 弹性形变(gel edge)(v5)
5. ✅ 相邻元素 metaball 流体融合(GlassEffectContainer 等价)(v6)
6. ✅ Bridge 应力线高光(v7)
7. ✅ **Procedural Environment Cubemap(v8)** — sky/horizon/floor 三段,反射真实环境
8. ✅ **双层折射(v8)** — 前表面强折射 + 后表面反向弱折射 + 中间空气层
9. ✅ **Adaptive Tint(v8)** — 玻璃自动取环境色调(无需 html2canvas)
10. ✅ **三频段 caustic(v8)** — 低频涌动 + 中频波纹 + 高频光斑
11. ✅ **Anisotropic specular(v8)** — 高光主光方向拉伸(丝绸感)
12. ✅ **Cursor proximity morph(v8.1)** — 鼠标走过哪里玻璃跟着流动
13
📍 Current Progress · 当前进度
### 已实现的 30+ 个特性
**L0 — CSS only(全浏览器)**
- `@property --glass-lx/--glass-ly` 注册百分比变量 → GPU 平滑插值
- 三层 `radial-gradient` 高光(主光斑+漫反射晕+底部反射)
- `::before` 棱镜色散环(暖色左上+冷色右下)+ 顶部 1.5px 暖白冷渐变光线
- `backdrop-filter: blur+saturate+brightness` 三参数模糊
- spring `cubic-bezier(0.34, 1.56, 0.64, 1)` 弹性过渡
- 暗色模式完整变体
- `glass-static` SSR 兼容版(无 backdrop-filter)
**L1 — SVG(Chrome 渐进增强)**
- 逐像素 SDF 圆角矩形位移贴图(Canvas2D 预生成 PNG)
- RGB 三通道编码(R/G 位移 + B 色散,1.18× 放大)
- `smootherStep` 五次 Hermite 插值
- 凸透镜中心微位移(中心 8% 强度)
- 3 个不同尺寸的 `feDisplacementMap`(btn/card/tag)
**L2 — WebGL 物理级渲染(顶层增强)**
- 三光源 Blinn-Phong(主光跟鼠标 + 静态填充光
✅ What Worked · 有效方法
1. **`reasoning_effort: 'low'`** — MiMo 推理时间从 60+ 秒降到 11 秒(interpret)/ 36 秒(heming)
2. **env `.trim()` 双重防御** — Vercel Dashboard 配置环境变量时尾部 `\n` 让 `=== 'mimo'` 严格比较失败,trim 后稳如老狗
3. **Pointer 事件委托** — 全局 `pointerdown/up/over/out` 监听 + `target.closest(SEL)`,比给每个元素挂监听快得多
4. **iztro `nominalAge`** — 大限错位的根因是用了年差而非虚岁,改用 iztro 内部口径立刻一致
5. **brightnessRaw 字段并行保留** — 不破坏现有 `bright/normal/dim` 算法逻辑,新增 `庙/旺/得/利/平/不/陷` 7 档纯展示字段
6. **SDF smin 替代 SVG metaball** — 不需要 SVG filter,不模糊文字,无 HTML 改动,自动生效
7. **scan() 保留 press 状态** — MutationObserver 重扫元素列表时不重置 press(用 oldStates Map)
---
⚠️ What Didn't Work · 无效方法
1. ❌ **DeepSeek fallback** — 已欠费,”Insufficient Balance“。.env.example 一直只列 DeepSeek 让 Vercel 部署时漏配 MiMo 是这次最大坑。
2. ❌ **`u_res` shader uniform** — 在 GLSL 里声明了但没用到 → 编译器优化掉 → `getUniformLocation` 返回 null。**教训**:未引用 uniform 必删
3. ❌ **`border-radius: 9999px`(pill 圆角)× DPR 2 = 19998 GL 像素** — `rrSDF()` 完全炸掉,元素完全不渲染。**修复**:clamp `Math.min(t.radius * d, Math.min(gw, gh) / 2)`
4. ❌ **Reinhard tonemap (`c = c/(c+0.7)*0.7`)** — 把所有亮度都压平,subtle 效果消失。改回 hard clamp `min(c, vec3(0.45))`
5. ❌ **AI_PROVIDER=mimo + 换行** — Vercel CLI `vercel env add` 用 stdin 喂值时如果有 newline 会被存进去。**修复**:用 `printf "mimo"`(无 newlin
➡️ Next Steps · 下一步
### 必做 — Adaptive Tint(环境色采样)
**性价比最高的下一个动作**。Apple iOS 26 玻璃会根据下方背景的色温微调染色(冷背景偏蓝、暖背景偏黄)。
**实现方案 A(推荐)**:
- 在 `LiquidGlassProvider.tsx` 加 `IntersectionObserver` 监听每个 `.liquid-card` 元素
- 元素进入视口时,用 `html2canvas`(或更轻量的 `dom-to-image-more`)截元素正下方区域
- 离屏 1×1 canvas 取平均色(`getImageData`)
- 写入 CSS 变量 `el.style.setProperty('--glass-tint', 'oklch(...)')`
- `globals.css` 的 `::after` 第一层 radial-gradient 起始色用 `color-mix(in oklch, white 70%, var(--glass-tint))`
**实现方案 B(更精确,但工程量大)**:
- 给 WebGL shader 加 `uniform sampler2D u_backdrop`
- 每秒 1-2 次把页面 `<body>` rasterize 到 framebuffer texture
- shader 读取该 text
工具调用/ Top 8
Bash
4
WebSearch
3
WebFetch
2
Skill
1
Read
1
Edit
1
Session 时间流/ 最近 6
- (未生成标题)2026/6/15 13:00:0544 msgs8 tools0.1h 时长#e38c9aefWebSearch · 3Bash · 3WebFetch · 2
- (未生成标题)2026/6/15 12:52:2419 msgs3 tools0.1h 时长#5c381efaSkill · 1Read · 1Edit · 1
- (未生成标题)2026/6/15 12:35:194 msgs1 tools#804b2557Bash · 1
- (未生成标题)2026/6/15 09:58:473 msgs0 tools0.1h 时长#73a39e65
- (未生成标题)2026/6/15 09:15:051 msgs0 tools#cc99df42
- (未生成标题)2026/6/14 02:54:282 msgs0 tools0.1h 时长#6fe31fd9
