Skip to content

服装变体配置指南

概述

在模型所在目录放置 outfits.json 即可启用服装变体功能。无配置时自动扫描子目录。

方式一:自动发现(零配置)

将替换纹理放入模型目录下的一级子目录即可自动识别为变体。

模型目录/
├── model.pmx
├── face.png               ← PMX 原始纹理
├── costume_diff.png
├── costume_toon.png
├── swim/                   ← 自动识别为 "swim" 变体
│   ├── face.png            ← 同名文件替换 diffuse
│   └── costume_diff.png    ← 同名文件替换对应槽位
└── casual/                 ← 自动识别为 "casual" 变体
    ├── face.png
    └── costume_toon.png

匹配规则

  • 子目录名 → 变体名
  • 子目录内的文件与 PMX 原始纹理的 basename 匹配即替换
  • 仅替换有匹配的槽位,未匹配的保持原始贴图
  • 递归深度:仅一级子目录

方式二:显式配置(outfits.json)

基本结构

json
{
  "version": 1,
  "variants": [
    {
      "name": "我的变体",
      "all": {
        "diffuse": "alternative_diff.png",
        "toon": "alternative_toon.png"
      }
    }
  ]
}

字段说明

字段类型必填说明
versionnumber固定为 1
variantsarray变体列表,至少一项
variants[].namestring显示名称,在 UI 中展示
variants[].allobject应用到所有材质
variants[].byCategoryobject按部位分类应用
variants[].byMaterialobject按材质名精确应用

纹理槽位

每个变体配置(all / byCategory / byMaterial 内的值)支持以下槽位:

槽位键对应贴图类型MMD 术语
diffuse漫反射贴图(主贴图)toon color
toon卡通渲染贴图toon texture
spa球面反射贴图sphere map
normal法线贴图bump
emissive自发光贴图emissive

所有槽位均为可选,未指定的保持原始贴图。

按部位应用(byCategory)

json
{
  "version": 1,
  "variants": [
    {
      "name": "泳装",
      "byCategory": {
        "服装": { "diffuse": "swim_costume.png", "toon": "swim_costume_toon.png" },
        "皮肤": { "diffuse": "swim_skin.png" }
      }
    }
  ]
}

支持的四类部位:

  • 皮肤 — skin/face/body 等材质
  • 头发 — hair/髪/ahoge 等材质
  • 眼睛 — eye/目/iris/瞳/pupil 等材质
  • 服装 — 以上均不匹配的材质

按材质名精确应用(byMaterial)

json
{
  "version": 1,
  "variants": [
    {
      "name": "丝袜颜色",
      "byMaterial": {
        "socks": { "diffuse": "black_socks.png" },
        "ribbon": { "diffuse": "red_ribbon.png", "toon": "red_ribbon_toon.png" }
      }
    }
  ]
}

材质名来自 PMX 文件内部定义的材质名称,不区分大小写。

三层混合示例

json
{
  "version": 1,
  "variants": [
    {
      "name": "完整示例",
      "byMaterial": {
        "socks": { "diffuse": "black.png" }
      },
      "byCategory": {
        "服装": { "diffuse": "costume.png" }
      },
      "all": {
        "toon": "night_toon.png"
      }
    }
  ]
}

优先级:byMaterial > byCategory > all 最终每材质每槽位的值 = byMaterial[name] ?? byCategory[cat] ?? all ?? 原始贴图。

贴图路径

outfits.json 中写的路径是相对 PMX 文件所在目录的路径。

模型目录/
├── model.pmx
├── default_diff.png
├── swim/
│   └── alt_diff.png
└── outfits.json

变体配置写法:

json
{
  "all": { "diffuse": "swim/alt_diff.png" }
}

支持的图片格式

与 MikuMikuAR 整体支持的格式一致:PNG、BMP(DXT)、TGA、JPEG、DDS、KTX、EXR、HDR。