• v0.2.5 eebccd55b4

    zijunchiang released this 2026-09-16 18:55:25 +08:00 | 22 commits to main since this release

    OpenDance Studio -- Web 管理服务端 v0.2.5

    MMD 材质/着色对齐: 修复 PMX 转换后"颜色/贴图看起来不对"。契约不变
    (rest-api / data-models / model-formats 0.4.0、database 0.3.0)。

    诊断(本地真 Assimp 6.0.4 + 样本逐项核对)

    PMX 的着色模型(卡通阶梯 + 球面贴图 + 平坦环境光)与 glTF PBR 不是一回事。
    样本 【奥黛塔】_by_原神.zip(39 个材质)核对结果:

    项目 结论
    双面(不剔除背面) PMX 里 36 个材质有该标志; 导出的 GLB 里 doubleSided 一个都没有 -> 头发/裙摆/睫毛这类薄片被单面剔除, 这是"贴图/颜色不对"的主因
    specular / shininess PMX 为 (0,0,0) / 1.0; Assimp 写出 KHR_materials_specular(黑色)与 KHR_materials_volume 等与 MMD 无关的扩展
    环境光 / toon MMD 的平坦环境光与 toon 阶梯在 glTF core 里没有对应项
    球面贴图(SPH/SPA) 该模型 15 项; glTF core 无槽位
    accessor.min/max Assimp 写坏(实测 min = 2.2250738585072014e-308), Godot 用它算包围盒

    本次改动

    1. 新增 models/pmx-materials.ts: 只读 PMX 材质段(布局与权威库 mmd-parser 一致,
      注意贴图索引宽度是 1 字节), 拿到 diffuse / specular / shininess / ambient /
      drawFlag / 球面贴图 / toon / faceCount;
    2. 新增 models/glb-materials.ts: 转换后按索引把 PMX 参数补回 GLB ——
      doubleSided(按 drawFlag bit0)、metallicFactor=0、
      roughnessFactor=clamp(1-shininess/100, 0.5, 1)、baseColorFactor x diffuse(含 alpha);
      清掉 KHR_materials_specular / volume / transmission / ior / emissive_strength;
      修正全部浮点 accessor 的 min/max;
    3. 新增 MODEL_SHADING(默认 pbr, 可选 unlit): unlit 给每个材质写
      KHR_materials_unlit, 颜色 = 贴图 x baseColorFactor、与场景光照无关,
      最接近 MMD 的平涂观感(three.js 与 Godot 都支持);
    4. 能力边界(不假装保留): 球面贴图与 toon 阶梯无法用 glTF core 表达, 数量写进
      模型的 conversion_note, 审核面板可见;
    5. 新增 9 项测试; 测试规模 15 文件 / 220 项。

    关于"增加支持的库进行转换"

    换一个 PMX->glTF 转换器不能解决这件事: 球面贴图(matcap)与 toon 阶梯是
    视点相关/光照相关的着色, 无法烘进 baseColorTexture; glTF 2.0 core 也没有这两个
    槽位。行业做法只有三条: ①按 glTF 能力补齐(本次做的双面/PBR 规范化),
    ②交付 KHR_materials_unlit 的平涂颜色(本次的 MODEL_SHADING=unlit),
    ③只在支持 MToon 的查看器里用 VRM(VRMC_materials_mtoon 有 matcapTexture)——
    但 Godot 客户端不认 MToon, 所以服务端仍以 GLB 为准。

    升级后需要重新导入模型

    材质修正在转换时生效:

    • 重新上传该 PMX 压缩包(或在管理端删除后重传);
    • reanalyze-models.mjs 不会重转材质, 它只刷新分析与缩略图。

    想用平涂颜色: 在 deploy/.env 里加 MODEL_SHADING=unlit 后重跑 deploy/install.sh
    并重新导入模型。

    校验

    opendance-web-v0.2.5.tar.gz sha256: c1988dd4e9fceff48c8ae368e50adc0d6ba1275aa7f7abe643d1bbab7ddb3c4f

    Downloads