10 月 17 日 23:25 到 10 月 21 日 15:54,蓝女仆看板娘在 main 上留下九个提交。九个提交都触发了 Deploy Hexo Blog,九个 run 都是 success。这一页按提交顺序记实际进入生产的部分;本地没有部署的实验、已经回退的改动和只在预览里出现的效果,不算成果。
| 时间(+0800) | 提交 | 内容 | Actions |
|---|---|---|---|
| 10-17 23:25 | f324335 |
初版 22 层 Canvas2D 骨架 | 39045025226 |
| 10-17 23:38 | 8548c02 |
简化浮动控件、随机动作、短暂移除拖尾 | 39045987685 |
| 10-17 23:58 | e380c32 |
滚轮选曲、封面内联、拖尾恢复常开 | 39047388479 |
| 10-18 00:14 | 74155a3 |
左臂衣物分层尝试、控件墨色跳动 | 39048559650 |
| 10-18 00:20 | 87f4e75 |
因新缝隙回退左臂三层 | 39048948415 |
| 10-18 17:01 | 664e889 |
肩部切面、肘部接缝与遮挡修复 | 39113694334 |
| 10-18 17:18 | 3c4adca |
控件原地起跳、落地挤压、连续展开 | 39114791407 |
| 10-18 18:30 | 722afdd |
胸口花边、肘部与肤色对齐 | 39119523213 |
| 10-21 15:54 | 17bfcf6 |
neck5、连续手臂网格、缓存版本更新 | 39565646981 |
一 · 起点:22 层
第一版在 f324335。蓝女仆的原画被拆成 22 个图像层,另配 22 张补缝层;rig.json 的源尺寸是 1262 × 1246,渲染画布固定 880 × 880。关节按父子链装配:root 下面是 torso,torso 再分出头、左右臂、尾巴、腿和裙子;右臂单独拆出前臂与手,头和眼睛也各有自己的 pivot。
尾巴是这一版最先暴露问题的地方。旧的支点在 (0.72, 0.83),摆动时根部会裂开;提交里把支点移到 (0.75, 0.70),并在根部加了一层静态垫层。离线检查的 12 个姿态通过,静止帧与修复前的 V1 逐字节一致。这里要说明的是,这一轮验的是静止帧和抽样姿态,不是整页浏览器里的每一帧。
同一次提交把博客看板娘从鲸鱼娘切到蓝女仆,manifest 换成 blue-maid / canvas-rig。蓝女仆没有配套语音,所以声音控件隐藏。鲸鱼娘的模型、授权与来源文件都还在仓库里,manifest 改回去即可回退。
二 · 同晚的收缩:UI、随机动作与音乐面板
8548c02 把浮动控件收了一轮。看板娘开始随机播放开心、挥手、点头、摆尾,点击后 3 秒冷却;点头接入逐像素的头部投影,不再是简单缩放。音乐播放器改成暖灰底、黑白组件、单一强调色,迷你播放器精简,面板与音乐页同步。设置里的形象大小改成三段式按钮。鼠标拖尾粒子和看板娘设置里的拖尾开关在这一版被移除。
e380c32 又把音乐面板改成滚轮选曲:面板一次显示四首,中心曲目加粗放大,高亮是纯弧形、没有描边;滚动只加载元数据,点中心曲目或播放键才开始播放。封面编码成 Base64 内联。浮动控件统一成紧凑尺寸,展开时用墨滴动效。
同一版把鼠标拖尾恢复成当天改版前的常开版本,并且不再提供关闭入口。这是最终状态:拖尾常开,没有关闭按钮;脚本只在桌面精确指针、且系统没有开启减少动态效果时运行。
三 · 10 月 18 日凌晨:一次左臂尝试和它的回退
74155a3 想修的是白色围裙边缘。那圈白边被切进了 arm-left 和它的补缝层,待机摆臂时跟着袖子走,手臂比例和肘部看起来就不对。提交把白边移进静态 body 层,同时把控件展开改成按钮变墨色、原地弹跳后连续展开。
部署后出现新缝隙。87f4e75 的说明写得很具体:上一版把白边从手臂层移进 body 时用错了裁切,319 × 197 被换成 323 × 216 并拉伸,于是产生新的缝。三张图层整体回退到 e380c32。两次提交相隔不到六分钟,两个 run 都成功,所以生产上确实短暂存在过中间版本;但图层净结果为零。这一对提交不应该被记成一次成功的分层修复,它留下的只有「试过、发现裁切错了、退回去」这条记录。控件那半边后来也被 3c4adca 的起跳版本取代。
四 · 同日下午:肩肘与遮挡
664e889 处理挥手时的肩部切面。肩部旋转从 22–24° 降到 6°,抬手主要由肘部完成;挥手时用原袖面在肩口做静态内衬,跳过带外轮廓的身体和手臂补缝;右发与胸衣、手臂的遮挡顺序也改了,挥手期间冻结发层旋转;纯色椭圆肘部补丁被删掉。
提交里明确写了验证范围:静止、点头、摆尾的渲染与上一版逐字节一致。也就是说,这一版改动集中在挥手姿态,没有顺手改其他动作。run 成功。
五 · 控件展开:从墨色壳层到原地起跳
3c4adca 把展开动效重写了一遍。上一版会创建一个额外的墨色壳层元素,这一版把它删了,直接动真实控件:
- 按钮本身上跳 9px,同时轻微拉长;落地时横向拉伸、纵向挤压,再回弹一次,停一拍;
- 真实面板从按钮的足迹连续放大到最终尺寸,背景由墨色渐变到表面色;
- 面板内容最后淡入,子项按 16ms 错开。
音乐面板和看板娘菜单共用同一个 __ctlMotion.bloom。系统开启减少动态效果时,bloom 直接返回,面板按普通显示出现,不播放这一串动画。run 成功。
六 · 胸口花边与肘部
722afdd 补的是手臂足迹里被遮住的花边、裙摆和发卷。用的方法是动漫 inpainting 模型 Anime_v2,strength 0.55,seed 37,只允许在手臂足迹内重绘;生成出的皮肤在 Lab 空间把色相、饱和度对齐原画,保留原来的明暗。新增 wave-backing-v2 和肘部布料纹理内衬 elbow-underlay,挥手时露出的是真实纹理,不是纯色块,也不是复制粘贴。
这一版仍然是局部补图,不是把整张原画重新生成。run 成功。
七 · 10 月 21 日:neck5 与连续手臂网格
17bfcf6 是这一轮的最后一次更新,改的是颈部接缝和整条右臂的连续性。
颈部这一块加了两层:后发完成之后画蓝色颈部垫底,身体层之后再画一个窄 V 形的颈部覆盖,头部旋转时露出来的是阴影,不是切口。head-seam.png 里有一条两像素的横向条带(597–599),转头时会变成一条浅色裂缝;挥手时这段条带被单独跳过,其余部分照常绘制。尾巴的补缝跟着尾巴走,然后再画后发;肩部左右各加一张 underlay,补肩口。
手臂不再用「上臂、前臂、手」三段各自旋转再补缝,而是用 arm-texture.png 建一张连续网格:8 × 10 的网格铺在手臂包围盒上,每个顶点按弧长在肩、肘、腕三个变换之间做平滑加权,三角形逐个做仿射贴图,再向外扩 3.5% 遮住三角形的接缝。肩部角度改成 -13°,肘部 -116°。缓存版本号同步改成 20261020-neck5。
验证边界需要写清楚:这一版跑了 npm run build,做了离线 12 帧采样(happy 与 wave 各 12 个阶段),本地探针返回 200,并确认页面加载的是 20261020-neck5 与颈部垫底代码。它不是完整的浏览器整帧视觉验收;离线采样报告「没有原来的颈部缝隙」,不等于每一个浏览器尺寸、每一个动作帧都已经被肉眼确认。run 成功。
八 · 线上状态与没有算进来的东西
到 17bfcf6 为止,origin/main 从 722afdd 前进到 17bfcf6,九个 Deploy Hexo Blog run 全部 success。最终拖尾是常开、无关闭入口;鲸鱼娘资源仍保留,manifest 可以回退。
没有算进这份日志的,至少有三项:10 月 17 日那轮结束时还留在本地、没有部署的 armfix 实验,legacy-controls 全案,以及没有完成实际联动验收的语音 ducking。前两项没有进入 main,也没有对应的上线 run;语音 ducking 不能算作音乐压低/恢复已经验收。三者都不能写成这一轮的成果。
这篇日志能提供的是一串可追溯的提交、diff 和 run;不能提供的是「每一帧都亲眼看过」。17bfcf6 的验证范围就是上一节写的那样,再往前几次提交的验证也各自有边界。把边界写出来,比把「已上线」写成「已验证」更接近事实。