# DeepSeek 日夜页面动画

## 1.3.2：二维气泡与人物细节窗口

### 完整模式夜间水色

完整模式夜间的侧边栏选中按钮使用亮珊瑚红 `#E94650`，悬停使用更亮的 `#F15B63`，保留白色文字与选中项游鱼。颜色存于 `nightPalette.ui`，白天配色存于 `ui`，共同沿用昼夜淡入淡出；进入和离开页面时与水体同步过渡。预览、捕获以及离开页面后保留原蓝色，品牌和禁用按钮不受交互覆盖。旧包缺少交互颜色时回退蓝色。

入水水花在完整模式夜间通过 `nightPalette.splash.tone` 后处理为暖橙色：`sepia: 1, saturation: 1.7, hueRotate: -20, brightness: 0.78`。先调低源图曝光再染色，避免亮部截成一片黄色，保留浅橙亮部与较深橙色的轮廓。参数随昼夜系数从原色平滑变化；临时入场小泡泡同步变成 `#F2CA92`。原 PNG、透明轮廓、24fps 帧时序与居中裁切保留。渲染器只维护一张原帧尺寸的离屏缓存，同一帧、同一配色重复曝光不重新处理；切帧或配色变化才重绘缓存，入水结束或卸载后释放，无常驻全屏滤镜和逐帧像素读取。白天、预览、捕获及缺少该扩展的旧包保持原素材。

`nightPalette` 在完整模式下跟随基础壁纸相同的本地时钟：18:00–18:10 淡入，05:50–06:00 淡出，其余夜间时段完全启用。水面到深处使用更柔和的 `#CF8247 → #CD5D3D → #BC443F → #A73F3A`，剪影为深酒红 `#320f20`，不透明度仍为 75%。`nightPalette.figure.colorOpacity: 0` 让人物全局彩色层随夜色淡出，在夜间成为完整的平面剪影；气泡独立取样的原图窗口保留，仍可在经过时显露细节。滚轮加深水色，水面光纹、气泡轮廓与上方光照改为柔和暖色，底部圆点和侧边栏使用同步变化的剪影底色。昼夜切换不重播入场，也不重置滚轮和气泡轨迹。预览与捕获保留原配色；旧 DWP 缺少该扩展或 `colorOpacity` 时保持原行为。

色彩调整参考 [Helmholtz–Kohlrausch 亮度实验](https://www.jstage.jst.go.jp/article/jieij1980/64/10/64_10_566/_article)：相同物理亮度下，高饱和颜色仍可能显得更亮。因此同时降低明度与色度，保留原有橙红色相。以下数值由实际色值计算，方法为 [W3C 相对亮度](https://www.w3.org/TR/WCAG22/#dfn-relative-luminance) 和 [Oklab / OKLCH](https://www.w3.org/TR/css-color-4/#ok-lab)。其中色度 `C = sqrt(a²+b²)`，相对亮度 `Y = 0.2126R_lin + 0.7152G_lin + 0.0722B_lin`。

| 水深色标 | 原色 → 新色 | 相对亮度 Y | Y 降幅 | Oklab 色度降幅 |
| --- | --- | --- | --- | --- |
| 0% | #FB8604 → #CF8247 | 0.3757 → 0.2969 | 21.0% | 32.3% |
| 25% | #FD4D0C → #CD5D3D | 0.2622 → 0.2114 | 19.3% | 32.1% |
| 65% | #EA202C → #BC443F | 0.1871 → 0.1518 | 18.8% | 32.2% |
| 100% | #EA202C → #A73F3A | 0.1871 → 0.1208 | 35.4% | 39.8% |

对基础渐变按屏幕高度等距取样 10001 点、按 sRGB 插值后计算，平均 Y 从 0.2320 降到 0.1825（降低 21.3%）。数据不包含人物、光纹和 UI，也不等同于显示器实测 cd/m²；选色是本壁纸的审美调整，研究并未规定这组色值或舒适度阈值。水面光纹和气泡高光同时改用较柔和的米金色，避免重新抬高顶部亮度。

夜间渐变的色标位置必须与白天一致，保证过渡时水深区间不移动。所有颜色参数随 `scene.json` 打包。渲染器复用焦散缓存，剪影及 128×128 雾光贴图只在配色变化时重染色，无新增每帧模糊或整屏采样。减少动态效果时仍每 250ms 检查显示状态与时钟变化。独立预览提供「白天 / 夜间 / 自动」选择，仅用于观察效果，不覆盖真实壁纸的昼夜设置。

气泡用于显露剪影细节并表现水流。屏幕下半部使用不透明度 10% 的均匀白色遮罩与 24% 的浅蓝轮廓。气泡中心上浮越过屏幕中线后，白色遮罩平滑淡出，上方高光、雾光和内部下侧阴影同步淡入；到屏幕上方四分之一处完成转换。`bubbleLight.heightFade` 的 `start: 0.5, end: 0.25` 使用屏幕相对高度，因此滚轮和窗口大小变化不会移动分界。气泡填充、人物细节窗口与描边共用同一二维路径。

雾光在进入完整模式时绘制成一张 128×128 透明贴图并缓存，逐帧只进行局部贴图缩放与透明度混合，跳过未越过中线的气泡。上方雾光的下沿预先柔和衰减；下侧阴影裁剪在二维轮廓内。当前包不启用额外的整屏人物光照遮罩，人物细节继续由原有小块取样提供。

`bubbleShape.style: ellipsoid-2d` 使用封闭、凸起的扁椭球截面，去掉凹底、裙摆和独立下半部摆动。小泡接近圆形、运动接近竖直；大泡适度扁平，沿缓慢曲线路径左右摆动，短轴随实际运动方向倾斜。`bubbleLens` 保留 1.35 倍放大与 60% 的人物细节叠加，图像偏折为零。人物窗口、阴影和描边复用同一姿态；每泡每帧只计算一次，随后用原生椭圆路径绘制。

形变参考 [Moore 的扁椭球近似（1965）](https://www.giss.nasa.gov/pubs/abs/mo00400o.html) 与 [Legendre 等的气泡形变研究（2012）](https://www.researchgate.net/publication/258077621_On_the_deformation_of_gas_bubbles_in_liquids)，路径参考 [Wu 与 Gharib 的上浮实验（2002）](https://authors.library.caltech.edu/records/jkjy2-gb368)。采用小形变关系 `We = ρ U² d / σ`、`χ₀ ≈ 1 + (9/64) We`，其中 `χ` 为横向长轴与运动方向短轴之比。

二阶形状模态使用 [Lamb 气泡形状振荡频率（NASA 实验报告）](https://ntrs.nasa.gov/api/citations/20030075796/downloads/20030075796.pdf)：`ω₂² = 12σ/(ρR_phys³)`。用受迫阻尼振子的稳态响应映射周期形变：

```text
λ = 2ω_w / ω₂,vis
G = 1 / sqrt((1 - λ²)² + (2ζλ)²)
δ = atan2(2ζλ, 1 - λ²)
q(t) = A G cos(2φ_w(t) - δ)
χ(t) = max(1, χ₀ exp(q(t)))
a(t) = R_px χ(t)^(1/3), b(t) = R_px χ(t)^(-2/3)
```

因此 `a²b = R_px³`，形变保持等效三维体积，不会像生物收缩那样整体鼓胀。横向轨迹 `x = x₀ + D(d) sin(φ_w) sin(πs)` 的解析导数用于倾斜角 `atan2(dx/dt, |dy/dt|)`，最大倾角约 16°；`s` 为气泡生命周期进度。

这是用于二维壁纸的物理启发映射。默认把屏幕尺寸映射到 0.8–2.8mm 的虚拟直径，采用 `ρ=998 kg/m³`、`σ=0.072 N/m`，虚拟上浮速度随尺寸从约 0.15 增至 0.23m/s。视觉时间缩放为 0.006、阻尼比 0.5，均为艺术调节值，不代表真实水槽测量，也不求解流场。所有映射参数保存于 `bubbleShape.physics`。

`bubbleField` 使用种子生成气泡位置、大小、速度和初次出现间隔，后续每轮在离屏时重新选择位置与大小。开场先有少量气泡，余下气泡在六秒内进入。`swaySpeed` 让横向摆动约每 3.5 秒往返一次，与轮廓倾斜共用相位，每个气泡错开节奏。持续上浮的气泡数量上限为 12 个，离屏气泡同样计入预算，保证屏幕内不会超限；入场时的临时小泡泡不计入该上限，保留原有效果。减少动态效果时保持静态。

`bubblePaint`、`bubbleLight`、`bubbleLens`、`bubbleShape` 和 `bubbleField` 参数保存于 DWP，仅在「完整」状态启用；「预览」和「捕获」保留原来的大小、运动和普通描边。旧 DWP 缺少 `heightFade` 时保留原来的照明范围。底部圆点矩阵在完整状态使用人物剪影同色 `#031633`。已发布的 1.3.1 资产保留；新样式需26.10.13-D 或新版渲染器。

## 1.3.1 页面衔接

页面动画需要插件 **26.10.13-D** 或更新版本。安装 [GitHub Release](https://github.com/YRN-playmaker/dsh-wallpaper_share/releases/tag/v26.10.13-D) 中的 `dsh-wallpaper_share-26.10.13-D.tgz` 并重启；DWP 1.3.2 的人物、水花和效果参数随包分发。

配套插件最低版本为 **dsh-wallpaper_share 26.10.13-D**。DWP 保留原有日夜切换和两档纹理，并在 `scene.json → dsh.tabScene` 保存页面动画参数。人物与十张水花 PNG 都随 DWP 分发；客户端提供通用 `dsh/tab-scene/1` 渲染器。标准 DWP 播放器会忽略此扩展，继续显示日夜背景。

- 进入 `wallpaper_share` 后水体沿 U 型前沿展开；人物从水花第一帧开始下移并淡入，以先快后慢的速度到达目标。人物始终裁剪在已经展开的水体内，水花保持居中。
- 滚轮使人物略微下移、水色加深并扩大剪影范围。剪影不透明度为 75%，靠近屏幕上方的暖色渐变为 `#F7F4D4`，最高 30%。
- **水面光斑固定在屏幕顶端**，随滚轮下滑淡出，到滚动范围的 65% 完全消失；回到顶部恢复。`surfaceLight.scrollFadeEnd` 可在 DWP 中调整，合法范围为 `(0,1]`。水体颜色渐变仍保留小幅位移。
- 「完整」模式显示水面焦散和二维气泡；泡泡经过人物时局部恢复原图细节。其它档位保留普通泡泡。焦散以移动水波的斜率折射光线，纹理以 24fps 缓存。
- 接近滚动底部时，屏幕下方显示圆点行列渐变。离开页面时水体回收并淡出，快速重新进入不会留下重复画布。
- 专注模式与「完整」同时开启时，页面背景以 1–4px 模糊呼吸。其它状态沿用背景模糊设置。减少动态效果时显示静态场景并继续响应模式切换。
- 主题补偿只在该页面生效；页面底色保持轻薄，卡片保留阅读对比。侧边栏使用人物剪影的同色系、单层且向页面边缘渐隐的遮罩；进入和退出时，侧边栏、页面底色与文字在 `exit.duration` 指定的时间内同步过渡。减少动态效果时立即切换。

构建与验证：`node _dev/make-daynight-dwp.mjs --no-install`、`node _dev/verify-daynight-dwp.mjs`、`node _dev/preview-daynight-dive.mjs`。浏览器回归用 `_dev/verify-daynight-dive.mjs`，可通过 `PLAYWRIGHT_MODULE` 指定 Playwright。

光学参考：[NVIDIA GPU Gems：Rendering Water Caustics](https://developer.nvidia.com/gpugems/gpugems/part-i-natural-effects/chapter-2-rendering-water-caustics)、[Evan Wallace：WebGL Water](https://madebyevan.com/webgl-water/)。实现使用项目自身代码。
