-
released this
2026-09-16 04:02:35 +08:00 | 23 commits to main since this releaseOpenDance Studio -- Web 管理服务端 v0.2.4
修复「导入 PMX 后模型显示为白模、脸部颜色丢失」。 契约与 v0.2.3 相同
(rest-api / data-models / model-formats 0.4.0、database 0.3.0)。定位结论:GLB 数据没问题,问题在缩略图渲染器
本地装真 Assimp 6.0.4 完整复现该模型(
【奥黛塔】_by_原神.zip)后逐层核对:检查项 结论 转换 正常: 23.7 MB GLB、643 骨骼、93,350 面、1.2 s 贴图内嵌 18 张贴图与压缩包原图逐字节一致 材质 -> 贴图对应 用权威 PMX 解析器比对, 39 个材质完全一致(不是映射错) UV 采样 正确: 脸部材质取到的就是皮肤色 (246,221,216) 缩略图渲染器 它刻意不解码 baseColorTexture, 只用 baseColorFactor上色; 而 MMD 模型的 baseColorFactor 基本都是白色 -> 缩略图必然全白管理端 3D 预览(three.js)本来就有贴图, 白模只出现在列表页与审核面板的缩略图。
本次改动
model-thumbnail.ts内置极简 PNG 解码器(zlib inflate + 逐行反滤波, 8 位非隔行,
colorType 0/2/3/4/6), 按baseColorFactor x 贴图逐像素采样(透视校正 UV);
解码失败 / 非 PNG / 隔行扫描时回退纯色, 绝不抛错;- 按
alphaMode处理透明度: OPAQUE 忽略贴图 alpha(MMD 语义)、MASK 按
alphaCutoff丢弃、BLEND 做 source-over; - 取景收紧(FRAMING 1.6 -> 1.3), 40px 列表缩略图主体更清楚;
- 新增 6 项测试(含"白模"回归: baseColorFactor 全白 + 红贴图必须输出偏红);
测试规模 14 文件 / 211 项。
关于"要不要默认转 VRM"
不必, 也解决不了这个问题:VRM 就是 GLB + humanoid 元数据, 材质管线与 GLB
完全相同(同样只有 baseColorTexture, 没有 MMD 的球面/卡通贴图槽位);
而该模型 humanoid 映射为 0/22, 转 VRM 也会按设计回退交付 GLB。
真正让贴图显示出来的是本次对渲染端的修复。这个模型本来也不用球面贴图
(diffuse 全白、无 sphere), 所以核心 GLB 没有"丢贴图"。升级后请重新生成缩略图
已有模型的缩略图是旧渲染器生成的, 升级后执行一次(v0.2.3 起服务端已带该脚本):
cd /opt/opendance/web-server node scripts/reanalyze-models.mjs --url http://127.0.0.1:3000 --force只重算单个:
--model-id 22; 先看清单:--dry-run。校验
opendance-web-v0.2.4.tar.gzsha256:138f31220afe5455cda187ca64c6b45624b35e4865eecf6af4d86e0f3284399cDownloads