Prelulu · 2026-11-11 · 实验报告(不是视觉验收)

头部转动对比:PSD2Live(线上)vs 我们自己的 binder

Head turning — PSD2Live field in production (#177) vs our own head binder (draft #181, head 4830af3)

结论 Summary

五个角色一览 Overview

角色我们的门禁折叠 PSD2Live → 我们拉伸 p99鼻子位移(脸半宽)方向余弦
Hiyori未通过(2 项)0.61 % → 0.037 %2.11 → 2.010.32 → 0.640.82–0.99
Momo未通过(6 项)0.72 % → 0.048 %2.51 → 1.980.32 → 0.630.84–0.98
37通过0.32 % → 0.023 %1.94 → 1.980.32 → 0.570.43–0.77
mara_bob通过0.70 % → 0.005 %2.31 → 1.900.31 → 0.640.92–0.99
朝霧 朔通过0.72 % → 0.012 %2.03 → 1.880.32 → 0.640.89–0.99

比较什么,怎么产出 Method

同一个包、同一个播放器,只换头部字段 线上已发布的角色包公开记录路由下载,哈希校验 PSD2Live 字段(线上)包里的 head-field.json 我们的字段(#181)bind-head.ts 读同一个包 同一个播放器?headField= 切换 固定姿态pose 指令 ±30

滑块模式:在每张图上左右拖动,左半是 PSD2Live,右半是我们的。并排模式:左 PSD2Live,右我们的。角度写作 X / Y(ParamAngleX / ParamAngleY,单位度;+Y 为抬头)。

Hiyori

Live2D 官方样例,经我们的管线重新处理。双马尾、红色发带、头顶呆毛。

我们 binder 自带门禁:未通过(2 项)(13 个部件)
  • front hair stretches its painted triangles at the 99th percentile by 2.60 (limit 2.50)
  • headwear stretches its painted triangles at the 99th percentile by 2.65 (limit 2.50)
看图记录(我的读图,不是视觉验收)
  • PSD2Live:满偏航和对角时呆毛与头顶分离,右侧发带脱离头发漂在外面;脸本身稳定。
  • 我们的:满偏航时整个头部(尤其前发和脸)位移过大;右上角(+30/+30)脸颊被截断、发际线露出一块肤色、下巴轮廓断开。正面和低头时两者接近。

扫动视频 Sweep

左:PSD2Live(线上字段);右:我们的。先偏航 0 → +30 → −30 → 0,再俯仰 0 → +30 → −30 → 0,循环播放。

9 个姿态 Poses

Hiyori 左上角,PSD2LiveHiyori 左上角,我们的 PSD2Live我们的
左上角 X / Y = −30 / +30
Hiyori 抬头,PSD2LiveHiyori 抬头,我们的 PSD2Live我们的
抬头 X / Y = 0 / +30
Hiyori 右上角,PSD2LiveHiyori 右上角,我们的 PSD2Live我们的
右上角 X / Y = +30 / +30
Hiyori 左转,PSD2LiveHiyori 左转,我们的 PSD2Live我们的
左转 X / Y = −30 / 0
Hiyori 正面,PSD2LiveHiyori 正面,我们的 PSD2Live我们的
正面 X / Y = 0 / 0
Hiyori 右转,PSD2LiveHiyori 右转,我们的 PSD2Live我们的
右转 X / Y = +30 / 0
Hiyori 左下角,PSD2LiveHiyori 左下角,我们的 PSD2Live我们的
左下角 X / Y = −30 / −30
Hiyori 低头,PSD2LiveHiyori 低头,我们的 PSD2Live我们的
低头 X / Y = 0 / −30
Hiyori 右下角,PSD2LiveHiyori 右下角,我们的 PSD2Live我们的
右下角 X / Y = +30 / −30

指标 Metrics

测量PSD2Live(线上)我们的(#181)
折叠三角形(面积 ≤ 0)0.609 %0.037 %
拉伸 中位 / p99 / 最大1.01 / 2.11 / 4.631.06 / 2.01 / 3.80
满偏航时脸平均位移(脸半宽)0.2560.268
满偏航时鼻子位移(脸半宽)0.3170.639
满抬头时脸上移(脸半宽)0.0730.111
网格数 / 顶点数26 / 2,08821 / 2,289
字段大小 原始 / gzip1.09 MB / 251 KB1.20 MB / 415 KB
生成耗时5.4 s(Modal CPU,含 JDK,#177 实测)7.5 s(本机 Node,aarch64 CPU)

逐顶点方向余弦(两者都移动 > 1 px 的顶点)在 8 个边/角关键帧上为 0.82–0.99;满偏航时 RMS 差 24.5 px,PSD2Live 自身 RMS 位移 29.5 px。

Momo

粉色双丸子头、星形发饰、长垂耳饰,刘海较厚。

我们 binder 自带门禁:未通过(6 项)(14 个部件)
  • back hair stretches its painted triangles at the 99th percentile by 2.56 (limit 2.50)
  • ears_1 pops between keys by 3.75 (limit 3.00)
  • ears_2 pops between keys by 3.32 (limit 3.00)
  • front hair stretches its painted triangles at the 99th percentile by 2.67 (limit 2.50)
  • headwear stretches its painted triangles at the 99th percentile by 3.73 (limit 2.50)
  • earwear stretches its painted triangles at the 99th percentile by 3.54 (limit 2.50)
看图记录(我的读图,不是视觉验收)
  • PSD2Live:抬头的三个姿态(左上、抬头、右上)嘴唇被拉开,看起来像张嘴笑(扫动视频里同样出现,所以不是截图时机问题);对应指标里 lips 图层 2.43 % 的折叠。其余姿态稳定。
  • 我们的:这是最差的一个,门禁本身就拒绝了它。对角处丸子头和发饰大幅变形、耳朵完全露出且错位、脸部边缘出现接缝;抬头时下巴边缘可见一道接缝。

扫动视频 Sweep

左:PSD2Live(线上字段);右:我们的。先偏航 0 → +30 → −30 → 0,再俯仰 0 → +30 → −30 → 0,循环播放。

9 个姿态 Poses

Momo 左上角,PSD2LiveMomo 左上角,我们的 PSD2Live我们的
左上角 X / Y = −30 / +30
Momo 抬头,PSD2LiveMomo 抬头,我们的 PSD2Live我们的
抬头 X / Y = 0 / +30
Momo 右上角,PSD2LiveMomo 右上角,我们的 PSD2Live我们的
右上角 X / Y = +30 / +30
Momo 左转,PSD2LiveMomo 左转,我们的 PSD2Live我们的
左转 X / Y = −30 / 0
Momo 正面,PSD2LiveMomo 正面,我们的 PSD2Live我们的
正面 X / Y = 0 / 0
Momo 右转,PSD2LiveMomo 右转,我们的 PSD2Live我们的
右转 X / Y = +30 / 0
Momo 左下角,PSD2LiveMomo 左下角,我们的 PSD2Live我们的
左下角 X / Y = −30 / −30
Momo 低头,PSD2LiveMomo 低头,我们的 PSD2Live我们的
低头 X / Y = 0 / −30
Momo 右下角,PSD2LiveMomo 右下角,我们的 PSD2Live我们的
右下角 X / Y = +30 / −30

指标 Metrics

测量PSD2Live(线上)我们的(#181)
折叠三角形(面积 ≤ 0)0.725 %0.048 %
拉伸 中位 / p99 / 最大1.02 / 2.51 / 4.431.02 / 1.98 / 4.11
满偏航时脸平均位移(脸半宽)0.2600.284
满偏航时鼻子位移(脸半宽)0.3160.630
满抬头时脸上移(脸半宽)0.0760.143
网格数 / 顶点数26 / 2,78422 / 2,822
字段大小 原始 / gzip1.43 MB / 359 KB1.48 MB / 502 KB
生成耗时未单独测(线上 Modal 重烘焙)9.0 s(本机 Node,aarch64 CPU)

逐顶点方向余弦(两者都移动 > 1 px 的顶点)在 8 个边/角关键帧上为 0.84–0.98;满偏航时 RMS 差 17.8 px,PSD2Live 自身 RMS 位移 36.3 px。

37

蓝色及腰长卷发、金色额饰、一侧编发,刘海遮住一只眼。

我们 binder 自带门禁:通过(13 个部件)
  • 全部检查通过
看图记录(我的读图,不是视觉验收)
  • PSD2Live:左转时编发从脸侧露出来,读起来像头发有厚度;额饰跟随稳定。
  • 我们的:左转时远侧脸颊轮廓变形、远侧眼睛被刘海盖住,编发没有露出;近侧耳朵露出较多。两者的逐顶点方向余弦只有 0.43–0.77,是五个角色里分歧最大的(主要在头发图层)。门禁通过,但门禁不检查“看起来对不对”。

扫动视频 Sweep

左:PSD2Live(线上字段);右:我们的。先偏航 0 → +30 → −30 → 0,再俯仰 0 → +30 → −30 → 0,循环播放。

9 个姿态 Poses

37 左上角,PSD2Live37 左上角,我们的 PSD2Live我们的
左上角 X / Y = −30 / +30
37 抬头,PSD2Live37 抬头,我们的 PSD2Live我们的
抬头 X / Y = 0 / +30
37 右上角,PSD2Live37 右上角,我们的 PSD2Live我们的
右上角 X / Y = +30 / +30
37 左转,PSD2Live37 左转,我们的 PSD2Live我们的
左转 X / Y = −30 / 0
37 正面,PSD2Live37 正面,我们的 PSD2Live我们的
正面 X / Y = 0 / 0
37 右转,PSD2Live37 右转,我们的 PSD2Live我们的
右转 X / Y = +30 / 0
37 左下角,PSD2Live37 左下角,我们的 PSD2Live我们的
左下角 X / Y = −30 / −30
37 低头,PSD2Live37 低头,我们的 PSD2Live我们的
低头 X / Y = 0 / −30
37 右下角,PSD2Live37 右下角,我们的 PSD2Live我们的
右下角 X / Y = +30 / −30

指标 Metrics

测量PSD2Live(线上)我们的(#181)
折叠三角形(面积 ≤ 0)0.318 %0.023 %
拉伸 中位 / p99 / 最大1.00 / 1.94 / 4.321.05 / 1.98 / 3.99
满偏航时脸平均位移(脸半宽)0.2570.256
满偏航时鼻子位移(脸半宽)0.3190.566
满抬头时脸上移(脸半宽)0.0740.099
网格数 / 顶点数26 / 3,19221 / 2,787
字段大小 原始 / gzip1.66 MB / 524 KB1.46 MB / 488 KB
生成耗时未单独测(线上 Modal 重烘焙)14.3 s(本机 Node,aarch64 CPU)

逐顶点方向余弦(两者都移动 > 1 px 的顶点)在 8 个边/角关键帧上为 0.43–0.77;满偏航时 RMS 差 19.2 px,PSD2Live 自身 RMS 位移 28.4 px。

mara_bob

红棕色齐下巴短发(波波头),写实画风,无头饰。

我们 binder 自带门禁:通过(12 个部件)
  • 全部检查通过
看图记录(我的读图,不是视觉验收)
  • PSD2Live:抬头和对角时眼周皮肤图层与脸错开,一只眼周围出现一块颜色不同的补丁、眉毛断开(左上、右上、右下最明显)。头发和轮廓稳定。
  • 我们的:左右转更有“立体转头”的感觉,眼周没有补丁;但对角时整张脸倾斜、位移过大,下颌线断开,头顶头发被削平(右上角最明显)。

扫动视频 Sweep

左:PSD2Live(线上字段);右:我们的。先偏航 0 → +30 → −30 → 0,再俯仰 0 → +30 → −30 → 0,循环播放。

9 个姿态 Poses

mara_bob 左上角,PSD2Livemara_bob 左上角,我们的 PSD2Live我们的
左上角 X / Y = −30 / +30
mara_bob 抬头,PSD2Livemara_bob 抬头,我们的 PSD2Live我们的
抬头 X / Y = 0 / +30
mara_bob 右上角,PSD2Livemara_bob 右上角,我们的 PSD2Live我们的
右上角 X / Y = +30 / +30
mara_bob 左转,PSD2Livemara_bob 左转,我们的 PSD2Live我们的
左转 X / Y = −30 / 0
mara_bob 正面,PSD2Livemara_bob 正面,我们的 PSD2Live我们的
正面 X / Y = 0 / 0
mara_bob 右转,PSD2Livemara_bob 右转,我们的 PSD2Live我们的
右转 X / Y = +30 / 0
mara_bob 左下角,PSD2Livemara_bob 左下角,我们的 PSD2Live我们的
左下角 X / Y = −30 / −30
mara_bob 低头,PSD2Livemara_bob 低头,我们的 PSD2Live我们的
低头 X / Y = 0 / −30
mara_bob 右下角,PSD2Livemara_bob 右下角,我们的 PSD2Live我们的
右下角 X / Y = +30 / −30

指标 Metrics

测量PSD2Live(线上)我们的(#181)
折叠三角形(面积 ≤ 0)0.702 %0.005 %
拉伸 中位 / p99 / 最大1.01 / 2.31 / 3.851.02 / 1.90 / 3.80
满偏航时脸平均位移(脸半宽)0.2600.292
满偏航时鼻子位移(脸半宽)0.3100.638
满抬头时脸上移(脸半宽)0.0740.147
网格数 / 顶点数22 / 1,62120 / 2,225
字段大小 原始 / gzip861 KB / 191 KB1.16 MB / 393 KB
生成耗时未单独测(线上 Modal 重烘焙)3.6 s(本机 Node,aarch64 CPU)

逐顶点方向余弦(两者都移动 > 1 px 的顶点)在 8 个边/角关键帧上为 0.92–0.99;满偏航时 RMS 差 20.4 px,PSD2Live 自身 RMS 位移 32.4 px。

朝霧 朔

男性深棕色短发、碎刘海,写实动漫风,无头饰。

我们 binder 自带门禁:通过(12 个部件)
  • 全部检查通过
看图记录(我的读图,不是视觉验收)
  • PSD2Live:九个姿态都稳定,没有明显破面;转动幅度偏小,像平移多于转头。
  • 我们的:左右转能看到近侧耳朵和脸侧,转头感更强;对角(左上、右上)时头发与头顶分离、下颌轮廓出现锯齿,右上角脸部明显错位。

扫动视频 Sweep

左:PSD2Live(线上字段);右:我们的。先偏航 0 → +30 → −30 → 0,再俯仰 0 → +30 → −30 → 0,循环播放。

9 个姿态 Poses

朝霧 朔 左上角,PSD2Live朝霧 朔 左上角,我们的 PSD2Live我们的
左上角 X / Y = −30 / +30
朝霧 朔 抬头,PSD2Live朝霧 朔 抬头,我们的 PSD2Live我们的
抬头 X / Y = 0 / +30
朝霧 朔 右上角,PSD2Live朝霧 朔 右上角,我们的 PSD2Live我们的
右上角 X / Y = +30 / +30
朝霧 朔 左转,PSD2Live朝霧 朔 左转,我们的 PSD2Live我们的
左转 X / Y = −30 / 0
朝霧 朔 正面,PSD2Live朝霧 朔 正面,我们的 PSD2Live我们的
正面 X / Y = 0 / 0
朝霧 朔 右转,PSD2Live朝霧 朔 右转,我们的 PSD2Live我们的
右转 X / Y = +30 / 0
朝霧 朔 左下角,PSD2Live朝霧 朔 左下角,我们的 PSD2Live我们的
左下角 X / Y = −30 / −30
朝霧 朔 低头,PSD2Live朝霧 朔 低头,我们的 PSD2Live我们的
低头 X / Y = 0 / −30
朝霧 朔 右下角,PSD2Live朝霧 朔 右下角,我们的 PSD2Live我们的
右下角 X / Y = +30 / −30

指标 Metrics

测量PSD2Live(线上)我们的(#181)
折叠三角形(面积 ≤ 0)0.719 %0.012 %
拉伸 中位 / p99 / 最大1.01 / 2.03 / 4.231.01 / 1.88 / 3.38
满偏航时脸平均位移(脸半宽)0.2570.275
满偏航时鼻子位移(脸半宽)0.3150.641
满抬头时脸上移(脸半宽)0.0740.125
网格数 / 顶点数24 / 1,83820 / 2,123
字段大小 原始 / gzip975 KB / 183 KB1.10 MB / 376 KB
生成耗时未单独测(线上 Modal 重烘焙)3.0 s(本机 Node,aarch64 CPU)

逐顶点方向余弦(两者都移动 > 1 px 的顶点)在 8 个边/角关键帧上为 0.89–0.99;满偏航时 RMS 差 22.8 px,PSD2Live 自身 RMS 位移 28.3 px。

局限 Limitations

下一步实验 Next experiments

链接 Links