MMD 与 glTF 布娃娃适配原理¶
profile、manifest、运行时部署和命令见 API reference。 通用数据与 Caliko 结构见 骨骼动力学原理。
读取层与通用运行时¶
MMD Reader 将作者制作的刚体、关节和 IK 转换为通用骨骼定义,保留原始表供格式访问。 glTF 不提供标准的刚体/IK 表,所以 Reader 只保留按节点排列的物理候选,人体拓扑必须显式描述。 两者进入同一骨骼运行时,骨骼引用、写回策略和尺度信息随定义携带,不在物理步中重新判断模型格式。
作者物理与主体 profile¶
直接使用作者刚体适合裙摆、头发和饰品等次级运动。主体 profile 根据实际骨骼段生成胶囊、 语义质量与关节,把并非用于人体碰撞的作者形状替换为主体碰撞体。 等长骨段按稳定骨骼顺序选择方向,避免对象分配顺序改变碰撞体朝向。
未登记的次级链可以保留原形状、阻尼和过滤关系。主体挂点通过随主体运动的 kinematic proxy 单向驱动次级链,过滤层与主体隔离,避免大量裙摆/发束刚体反向拖动主体。 混合模式的次级骨骼保留动画平移,只写回物理旋转,以免参考系变化拉伸骨段。
尺度与大坐标¶
顶点、骨骼、刚体形状和关节位置必须采用一致导入尺度;重力始终保持世界单位,不能随模型比例 缩小,否则小型角色会以错误的慢动作下落。glTF 的 affine 骨骼层级还保留 scale/shear, 将物理 TR 写回时需在完整父变换中计算局部姿态,避免父缩放被重复应用。
世界平移用独立的 double 锚点保存。骨骼和原生物理使用原点附近的 float 坐标,渲染先用 double 计算世界锚点与相机的差值,再写入 float 矩阵。这样短骨段和小碰撞体不会在大坐标处被量化。
原生关节与环境边界¶
Box3D 负责积分、接触、CCD、休眠、拖拽和关节求解。作者球/盒/胶囊映射到原生形状, Minecraft 环境通过增量静态碰撞体连接。无限平面用沿法线摆放的大型薄盒近似。 PMX 六轴关节目前近似为球形 cone/twist,三轴平移收紧为固定锚点;多种作者关节类型未完整区分。 逐顶点软体和流体浮力未接入。维度切换、退出世界与部署销毁均需解除环境、拖拽和原生资源。