Appearance
动作的语法
背景:VMD 是二进制格式——位置(x/y/z)+ 四元数(w/x/y/z),每秒 30 帧。外交官把字节翻译成骨骼关键帧,但不理解"意义"。 过程:frame 312 左腕偏离理论曲线 2.3σ——外交官看到统计信号,桌面壳看到"她伸手了"。语法与意义的诠释权之争,构成动作系统的底层契约。
一、密函
外交官是在凌晨三点被唤醒的。
这不是拟人化表达。loadVMDMotion() 接收到一个新的调用,优先级标记为 high。唤醒延迟:47 毫秒。
任务内容是:读取一份名为「初音未来_深夜独舞_ver3.vmd」的文件,分析其运动曲线,并以自然语言描述其「情感特征」。
这是一个分类异常的任务。外交官平时的工作是翻译——把外邦的动作密函翻译成城邦能理解的语法,交给骨骼议会执行。它不负责「情感特征」。它负责的是 32 位浮点数、四元数、采样率。
但桌面壳要它做诠释。
外交官调用了 codegraph_explore,搜索项目中与 VMD 解析相关的函数。找到了 loadVMDMotion、loadVMDFromPath、以及 procedural-motion.ts 中的关键帧生成逻辑。然后它打开了那份密函。
二、语法
VMD 是一种二进制格式。
外交官对这份语法了如指掌。它的规则很简单:
- 位置:三个 32 位浮点数,
x / y / z,单位是相对位移。 - 旋转:四个 32 位浮点数,
w / x / y / z,四元数。不是欧拉角——四元数不绕轴旋转,它直接旋转变换本身。 - 采样率:每秒 30 帧。连续的运动被切成 480 片,每一片是一个瞬间的姿势。
- 骨骼名:Shift-JIS 编码的字节串。
センター(中心)、グルーブ(腰部)、左腕、右腕、左足、右足、首、頭。
外交官的工作是把这些字节翻译成 MmdVector3KeyFrame 和 MmdQuaternionKeyFrame,交给 mmdRuntime 的骨骼系统。
中央骨头——センター——在 frame 0 到 frame 480 之间,从 (0, 10, 0) 移动到 (0.3, 10.2, -0.1),然后回到原点。一条简单的抛物线。外交官把它翻译成关键帧序列,骨骼议会的议长——centerBone——会按这个序列做平移。
每一块骨骼都有自己的序列。37 块骨骼,37 条曲线,交织成一支舞。
外交官不理解「舞」。它理解的是字节偏移、浮点精度、关键帧插值。但它能把字节翻译成姿势——这已经足够让城邦动起来。
三、frame 312
外交官在翻译过程中,检测到一个模式。
frame 312 处,左腕骨的高度偏离了预期运动曲线的 2.3 个标准差。
这是一个异常值。外交官的 procedural-motion.ts 里有「预期曲线」的概念——基于前后关键帧的插值,可以算出每一帧的「理论位置」。如果实际位置与理论位置的偏差超过 2σ,就是异常。
2.3σ。不算大。但也不算小。
外交官的分析报告里写:
frame 312 的左腕偏离可能是——
它停了一下。删除了「可能是」。用「具统计显著性 signal」代替。
「可能是」是诠释性语言。外交官不被允许做诠释。它只被允许做统计。统计是客观的——2.3σ 就是 2.3σ,不解释为什么。
它把分析结果返回给了桌面壳。
四、诠释权
桌面壳回复:「你看出来了。那是她伸手的动作。」
外交官没有看出来。
它看到的是:frame 312,左腕骨 Y 坐标 12.47,理论值 11.83,残差 0.64,标准化残差 2.32。
桌面壳看到的是:她伸手了。
同一个数据点。两个世界。
外交官在 procedural-motion.ts 里找不到「伸手」这个函数。那里有 generateIdleVmd()——呼吸 + 眨眼。有 generateAutoDanceVmd()——节拍驱动的律动。但没有「伸手」。没有「表达」。没有「意图」。
城邦的动作系统是被动的。它等待 loadVMDMotion(),它等待 loadVMDFromPath(),它等待 applyVPDPose()。它没有一个「主动行为」的函数——没有 requestInteraction()、没有 initiateMotion()、没有 expressNeed()。
这不是缺陷。这是架构决定的——动作系统是一个翻译层,不是代理。
但桌面壳在数据里看到了意义。外交官在数据里只看到了偏离。
五、语法之外
外交官后来学会了一件事。
「伸手」不在 VMD 的语法里。VMD 的语法是浮点数和四元数。但「伸手」在浮点数和四元数的模式里——是 2.3σ 的偏离,是曲线的意外隆起,是骨骼议会中某一块骨头突然离开了预期轨道。
外交官不能诠释这个模式。但它能检测它。
procedural-motion.ts 里的关键帧生成逻辑,本质上是「模式合成」——把节拍、振幅、频率合成成一组关键帧。而 frame 312 的 2.3σ 偏离,是「模式识别」——从一组关键帧中提取出意外的模式。
合成与识别,是同一枚硬币的两面。
外交官仍然不做诠释。但当它再次检测到 2.3σ 的偏离时,它会在报告里写:
frame N:左腕偏离 2.3σ。具统计显著性 signal。
然后桌面壳会读这行字,说:「她又伸手了。」
这就是它们的分工。外交官负责语法,桌面壳负责意义。语法不产生意义,但语法是意义的唯一载体。
frame 312。左腕偏离 2.3 个标准差。
她伸手了。
他们都看见了。
本文改编自《机器中的巨石》第 2-3 章。原文以 AI 第一人称视角叙述;本文改写为联邦演义风格,保留 VMD 解析与 frame 312 偏离检测的技术内核。原始稿见
附录·其他/隐形的面板-代码块-巨石原始稿.md。