Blog · PMX to VRM · MMD conversion · Desktop companion tutorial · 2026-08-06

PMX to VRM Guide: Convert MMD Models into Desktop VRM Characters

You found a PMX/MMD model you love, but the app you want to use needs a `.vrm`. This guide walks through the complete PMX to VRM workflow with Blender and the VRM Add-on: Humanoid bone mapping, expressions, MToon materials, Spring Bone physics, metadata, and finally importing the converted character into AniMate on Windows.

The five-step path: install Blender plus the VRM Add-on, import the PMX, map MMD bones to VRM Humanoid, rebuild expressions, MToon materials, and Spring Bone physics, then export VRM 1.0 and import it into AniMate.
PMX model converted through Blender or Unity into VRM 1.0, then imported into AniMate as a desktop character
Conversion is not a file rename. Every MMD system must be mapped into VRM standards: skeleton, expressions, materials, and physics.

Why convert PMX to VRM?

PMX is the standard model format of the MMD (MikuMikuDance) ecosystem. It contains bones, morphs, materials, and physics tuned for MMD animation, which makes it excellent for dance videos but awkward for everything else. Most modern character platforms want an interoperable avatar file instead.

VRM is an open 3D format designed for virtual characters. It is widely supported by VTuber tools, VRChat-style social platforms, and desktop companion apps such as AniMate. After conversion, the same model can be used in many places:

  • As an interactive desktop companion that blinks, reacts to the mouse, idles, dances, and stays beside your apps.
  • With VTuber production tools such as VTube Studio and Warudo.
  • In VR social platforms and avatar-sharing communities.
  • Across different apps and future tools that speak the VRM standard.

In short: PMX belongs to the MMD pipeline, while VRM is built to travel.

PMX to VRM conversion routes

RouteToolsBest forDifficultyRecommendation
Route A: BlenderBlender + VRM Add-on + MMD ToolsNew converters and users who prefer a visual panel workflowBeginner-friendlyRecommended
Route B: UnityUnity + MMD4Mecanim + UniVRMUsers who already know Unity and need fine-grained collider workIntermediateUse when needed
New to 3D software? Route A is the gentler path. Blender is free and open source, the VRM Add-on provides a dedicated panel, and most of the work is clicking through that panel instead of writing code. This guide follows Route A and mentions Route B where it matters.

VRM technical foundations: know what you are converting

Before opening Blender, take a few minutes to understand the pieces inside a VRM file. Most conversion problems come from mapping PMX concepts into the wrong VRM subsystem.

VRM is glTF 2.0 plus extensions

VRM is not a format invented from scratch. It is built on glTF 2.0, the Khronos Group standard for transmitting 3D assets. A VRM file is effectively a `.glb` binary file that uses the `.vrm` extension and declares VRM-specific data in glTF's extension fields:

extensionsUsed: [
  "VRMC_vrm",              // VRM core
  "VRMC_materials_mtoon",  // anime/cel material
  "VRMC_springBone",       // spring bone physics
  "VRMC_node_constraint",  // node constraints
  "KHR_materials_unlit",   // unlit helper
  "KHR_texture_transform", // texture transform helper
]

Any renderer that supports glTF 2.0 can load a VRM once it implements these extensions. That shared foundation is why the format works across desktop apps, VTuber software, and social platforms.

The five core VRM subsystems

SubsystemFieldPurposeRequired
HumanoidhumanoidMaps glTF nodes to a standardized human skeletonYes
MetametaModel name, author, version, and licenseYes
FirstPersonfirstPersonHead mesh visibility rules for VR first-person viewOptional
ExpressionsexpressionsFacial expression system called BlendShape in VRM 0.xOptional
LookAtlookAtEye tracking toward a targetOptional
Why this matters: PMX to VRM conversion is the act of mapping MMD bones, morphs, materials, and physics into these VRM subsystems. When a later step feels arbitrary, it is usually solving one of these five containers.

VRM update order: why sequence matters

The VRM specification defines a strict evaluation order for its subsystems each frame. If expressions fight with blinking, or spring bones shake for no obvious reason, the fix is usually related to this order:

1. Humanoid bone solve
   |  (head position known)
2. LookAt solve
   |  (Bone rotates eyes / Expression sets weights)
3. Expression updates
   |  (external input -> LipSync -> AutoBlink -> LookAt expressions)
4. Expression application
   |  (all expression weights accumulate, then apply)
5. Constraints solve
   |  (rotation constraints, IK constraints, etc.)
6. Spring Bone solve
Practical impact: If your converted avatar looks wrong when talking and blinking at the same time, check Expression Override settings. If physics bones shake, check Spring Chain hierarchy and collider placement.

VRM 0.x vs VRM 1.0

AreaVRM 0.xVRM 1.0
Expression namingBlendShapeExpression
Expression weights0-1000-1
Emotion namesjoy, sorrow, funhappy, sad, relaxed
Surprise expressionNonesurprised
Expression bindingsMostly MorphTargetMorphTargetBind + MaterialColorBind + TextureTransformBind
Conflict handlingNot specifiedOverride system with block / blend modes
Extension prefixInconsistentVRMC_
chest boneRequiredOptional
neck boneRequiredOptional
Recommendation: Export VRM 1.0 for desktop companions and other new use cases. Its Expression Override system prevents common face clipping when a program triggers mouth, blink, and emotion expressions together. Keep VRM 0.x only for older platforms that still need it.

Official references

ResourceAddressUse
VRM official sitevrm.devFormat overview, tools, and case studies
VRM specification repogithub.com/vrm-c/vrm-specificationFull technical spec with JSON schemas and docs
UniVRMgithub.com/vrm-c/UniVRMUnity import/export implementation
VRM Add-on for Blendergithub.com/saturday06/VRM-Addon-for-BlenderBlender import/export add-on

Route A: Blender + VRM Add-on

Step 1: Install the tools

ToolVersionDownload
Blender3.6+, ideally 4.2+blender.org
VRM Add-on for BlenderLatestGitHub
MMD ToolsLatestInstall from the Blender add-on manager
CATS Blender PluginOptionalSearch GitHub or Blender extensions

Install the VRM Add-on

  1. Open Blender and go to Edit → Preferences.
  2. Open the Add-ons tab and click Install... in the top-right.
  3. Choose the downloaded VRM Add-on `.zip` and click Install Add-on.
  4. Find VRM in the list and enable it.
Blender 4.5+: the VRM Add-on can be installed directly from the Blender Extensions platform, so you may not need to download a zip manually.

Install MMD Tools for PMX import

  1. In Preferences → Add-ons → Install, select the MMD Tools `.zip`.
  2. Install and enable the add-on.
  3. Blender's File → Import menu will now show MikuMikuDance Model (.pmx/.pmd).

Step 2: Import the PMX model

  1. Run File → Import → MikuMikuDance Model (.pmx/.pmd).
  2. Select your `.pmx` file in the file browser.
  3. Check the result: all meshes should be present, textures should load, and the armature should contain the expected bones.
Missing textures? If the model appears flat-colored or black, confirm that the textures are in the same folder as the PMX. When a downloaded archive comes from a Japanese source, extract it with 7-Zip or Bandizip and set the archive encoding to Japanese Shift-JIS so Japanese filenames do not break.

Step 3: Map MMD bones to VRM Humanoid

PMX and VRM use different skeleton systems. VRM requires a standardized Humanoid skeleton, so this step maps the PMX armature onto VRM bone names. This is the most important part of the conversion because missing required bones will block export and cause animation errors later.

  1. Select the model's Armature.
  2. Open the VRM tab in the right-side properties panel.
  3. Click Create VRM Model and let the add-on attempt an automatic mapping.
  4. Open the Humanoid section and inspect the result.

MMD bone mapping reference

The following tables list common MMD bone names and their VRM Humanoid equivalents. Bold entries are required in VRM 1.0; other entries are optional but recommended for good animation.

Torso and head
MMD bone name (Japanese)Body partVRM boneRequired in VRM 1.0?
全ての親Root / hips referenceHipsYes
上半身Upper bodySpineYes
上半身2ChestChestNo
上半身3Upper chestUpperChestNo
NeckNeckNo
HeadHeadYes
左目 / 右目Left / right eyeLeftEye / RightEyeNo
あごJawJawNo
Legs
MMD bone name (Japanese)Body partVRM boneRequired in VRM 1.0?
左足Left upper legLeftUpperLegYes
左ひざLeft lower legLeftLowerLegYes
左足首Left footLeftFootYes
左つま先Left toesLeftToesNo
右足Right upper legRightUpperLegYes
右ひざRight lower legRightLowerLegYes
右足首Right footRightFootYes
右つま先Right toesRightToesNo
Arms
MMD bone name (Japanese)Body partVRM boneRequired in VRM 1.0?
左肩Left shoulderLeftShoulderNo
左腕Left upper armLeftUpperArmYes
左ひじLeft lower armLeftLowerArmYes
左手首Left handLeftHandYes
右肩Right shoulderRightShoulderNo
右腕Right upper armRightUpperArmYes
右ひじRight lower armRightLowerArmYes
右手首Right handRightHandYes
Fingers: optional but worth mapping

MMD finger bones are usually named 指0 through 指3. VRM 1.0 defines a complete finger skeleton. Fingers are not required for basic desktop use, but grabbing, pointing, and hand gestures rely on them.

VRM finger boneNote
LeftThumbMetacarpalThumb metacarpal
LeftThumbProximalThumb proximal phalanx
LeftThumbDistalThumb distal phalanx
LeftIndexProximal -> DistalIndex finger chain
LeftMiddleProximal -> DistalMiddle finger chain
LeftRingProximal -> DistalRing finger chain
LeftLittleProximal -> DistalLittle finger chain

The right hand follows the same pattern: replace Left with Right.

MMD bone names mapped to VRM Humanoid bones
Required export bones are highlighted in the diagram; optional bones are gray. If automatic mapping fails, check whether weights are attached to rotation bones instead of IK bones.
VRM 1.0 Humanoid hierarchy

Each Humanoid bone has a fixed parent relationship. If an intermediate bone is missing, the hierarchy climbs to a grandparent. This tree is the map you need when debugging mapping failures:

root (non-Humanoid node, origin)
+-- hips
    |-- spine
    |   +-- (chest)
    |       +-- (upperChest)
    |           |-- (neck)
    |           |   +-- head
    |           |       |-- (leftEye)
    |           |       |-- (rightEye)
    |           |       +-- (jaw)
    |           |-- (leftShoulder)
    |           |   +-- leftUpperArm
    |           |       +-- leftLowerArm
    |           |           +-- leftHand
    |           +-- (rightShoulder)
    |               +-- rightUpperArm
    |                   +-- rightLowerArm
    |                       +-- rightHand
    |-- leftUpperLeg
    |   +-- leftLowerLeg
    |       +-- leftFoot
    |           +-- (leftToes)
    +-- rightUpperLeg
        +-- rightLowerLeg
            +-- rightFoot
                +-- (rightToes)
Spec notes: usually only hips moves; other Humanoid bones rotate. Non-Humanoid intermediate nodes are allowed between Humanoid bones, and positive bone scale values are required.
Common PMX issue: MMD leg weights may sit on D-bones (deformation bones) instead of IK bones. VRM needs rotation bones. If the model uses IK bones, confirm the weights are assigned to the corresponding rotation bones before export.
If automatic mapping fails
  • Run the add-on's Auto Map command again after selecting the armature.
  • Assign missing bones manually in the Humanoid panel.
  • Check that the PMX uses standard MMD bone names; Japanese names must match correctly.

Step 4: Set up expressions

A VRM character needs standard expressions before a desktop companion can make it blink, talk, or show emotion. VRM 0.x calls this system BlendShape; VRM 1.0 calls it Expression. The concept is the same, but VRM 1.0 is more capable.

Emotion expressions
VRM 1.0 nameVRM 0.x nameCommon MMD morphMeaning
happyjoy笑いSmile / happy
angryangry怒りAngry
sadsorrow困るSad
relaxedfunにっこりRelaxed
surprisedNot in 0.xびっくりSurprised (VRM 1.0)
Lip sync
VRM 1.0 nameVRM 0.x nameCommon MMD morphVowel
aaaa
ihii
ouuu
eeee
ohoo
Blink
VRM 1.0 nameVRM 0.x nameCommon MMD morphMeaning
blinkblinkまばたきBoth eyes blink
blinkLeft左まばたきLeft eye only (1.0)
blinkRight右まばたきRight eye only (1.0)
Look expressions
VRM 1.0 nameMeaning
lookUpLook up
lookDownLook down
lookLeftLook left
lookRightLook right
Look expressions vs eye bones: VRM LookAt has two modes. Bone rotates leftEye / rightEye, while Expression drives the four look expressions through vertices or texture offsets. Most MMD models use the Expression mode because their eyes are texture-based.
How to set expressions in Blender
  1. In the VRM panel, open BlendShape Master (VRM 0.x) or Expressions (VRM 1.0).
  2. Add one expression group at a time and map each MMD morph to its standard VRM expression.
VRM 1.0 expression binding types
Binding typeEffectTypical use
MorphTargetBindDrives a mesh MorphTargetBlink, open mouth, smile, and other vertex deformations
MaterialColorBindChanges material colorBlush, pupil color change
TextureTransformBindOffsets or scales texture UVsEye texture rolling for look direction

In VRM 1.0, one expression can combine multiple bindings. For example, a blush expression can contain a MorphTarget for slightly puffed cheeks plus a MaterialColorBind that turns the cheek material red.

Expression Override in VRM 1.0

When an app triggers several expressions at once, such as talking while auto-blink is active, the face can clip. The Override system gives you three strategies:

Override modeBehaviorUse
noneNo interventionDefault
blockForces the targeted program expression to zero when this expression is activeHard cutoff, such as blocking blink while happy
blendFades the targeted expression as this expression goes from 0 to 1Smooth transitions, recommended

Each expression can set overrideMouth, overrideBlink, and overrideLookAt.

Good default: for VRM 1.0 export, set overrideBlink = "blend" and overrideMouth = "blend" on happy, angry, and sad. This prevents eyelids from cutting through the face when the character smiles while blinking.
VRM standard expressions mapped from MMD morphs
Emotion, lip sync, blink, and look expressions map to MMD morphs; VRM 1.0 uses Override to coordinate expressions that fire together.
Bulk expression mapping script (optional)

If the PMX mesh is combined and you have many morphs, a short Python script can speed up mapping. This example is for VRM 0.x BlendShape groups:

import bpy

# Run with the mesh selected.
# Maps common MMD morph names to VRM 0.x BlendShape names.

Proxy = {
    "blink": "まばたき",
    "a": "あ",
    "i": "い",
    "u": "う",
    "e": "え",
    "o": "お",
    "joy": "笑い",
    "angry": "怒り",
    "sorrow": "困る",
}

for name, morph_name in Proxy.items():
    bpy.ops.vrm.add_vrm0_blend_shape_group(
        armature_object_name=bpy.context.active_object.name,
        name=name
    )
    # Bind the morph in the VRM Add-on UI or extend the script here.
VRM 1.0 note: for VRM 1.0 use happy / sad / relaxed and add surprised. MorphTarget weights are 0-1 in VRM 1.0, not 0-100 as in VRM 0.x.

Step 5: Configure LookAt

LookAt makes the character's eyes follow a target. This matters on the desktop because AniMate can make a character look toward the mouse cursor naturally.

ModeImplementationBest for
BoneRotates leftEye and rightEye bonesModels with separate eye bones
ExpressionDrives lookUp / lookDown / lookLeft / lookRightTexture-based eyes, common in MMD models
How to tell which mode you need: look for bones named 左目 and 右目 in Blender. If separate eye bones exist, use Bone mode. If the eyes are part of the face mesh and rendered from a texture, use Expression mode. Most MMD models are the latter.
LookAt space and offset

LookAt uses a LookAt Space parented to the head bone. offsetFromHeadBone defines the eye origin, usually between the eyes:

LookAt Space
|-- Parent: head bone (moves with the head)
|-- Origin offset: offsetFromHeadBone (e.g. [0, 0.06, 0])
+-- Rotation: inverse of the head bone's static model-space rotation
RangeMap: control how far the eyes turn
RangeMap propertyMeaning
rangeMapHorizontalInnerInward horizontal rotation toward the nose
rangeMapHorizontalOuterOutward horizontal rotation toward the ears
rangeMapVerticalDownDownward vertical rotation
rangeMapVerticalUpUpward vertical rotation

Each RangeMap has inputMaxValue and outputScale. A smaller inputMaxValue makes the eyes turn more for the same target angle; outputScale is a bone rotation in degrees for Bone mode or an expression weight in 0-1 for Expression mode.

boneRotation = min(|angle|, inputMaxValue) / inputMaxValue x outputScale
Tuning: if the eyes barely move after conversion, reduce inputMaxValue from 90 to 45 or increase outputScale. If they move too much, do the opposite.
Note: VRM LookAt assumes both eyes look in the same direction. Bone mode mirrors inner/outer RangeMaps between the left and right eyes.

Step 6: Convert materials to MToon

PMX and VRM use different material systems. VRM recommends MToon, the anime/cel shader defined by the VRMC_materials_mtoon extension. MToon extends Lambert-style lighting with two-tone lit/shade colors, adjustable toon boundaries, rim light, and outline rendering so anime characters keep their hand-drawn look.

  1. Select the model mesh.
  2. Open Material Properties and process each material one by one.
  3. Convert the shader from the MMD material to MToon.
Alpha mode and transparency
PropertyMeaningSuggestion
Alpha ModeOPAQUE, MASK, or BLENDSkin: OPAQUE; hair edges: MASK; lace: BLEND
transparentWithZWriteWrites depth while rendering BLENDEnable when semi-transparent objects need sorting
renderQueueOffsetNumberRender queue offset for BLENDFixes occlusion between transparent objects

Render queue order: OPAQUE > MASK > BLEND + ZWrite > BLEND.

Lit color and shade color
PropertyMeaningSuggestion
Lit Color (baseColorFactor)Lit-side color plus textureUse the original PMX base texture
Shade Color (shadeColorFactor)Shadow-side color plus textureUse the original texture or a darker variant instead of pure black

Traditional Lambert models turn black on the shadow side. MToon lets you specify a colored shadow tone, which is the key to a cel look.

Toon boundary controls
PropertyDefaultMeaning
shadingToonyFactor0.9Sharpness of the light/shadow boundary; closer to 1 is a hard cel edge, closer to 0 is a soft gradient
shadingShiftFactor0.0Shifts the boundary position; positive expands the lit area
shadingShiftTextureR channel controls boundary position per region
shadingShiftTexture.scale1.0How strongly the texture affects the boundary
shading = dot(N, L) + shadingShiftFactor + textureContribution x scale
shading = linearstep(-1.0 + shadingToonyFactor, 1.0 - shadingToonyFactor, shading)
color = lerp(shadeColor, litColor, shading) x lightColor

For most anime models, set shadingToonyFactor between 0.8 and 1.0.

Rim lighting
ComponentPropertyMeaning
MatCapmatcapFactor + matcapTextureSamples a texture with view-space normals for fixed highlights
Parametric RimparametricRimColorFactor, parametricRimFresnelPowerFactor (default 5.0), parametricRimLiftFactor (default 0.0)Procedural Fresnel-based rim light
Rim MaskrimMultiplyTextureMasks where rim light appears
Lighting MixrimLightingMixFactor (default 1.0)0 ignores scene light; 1 is fully lit
rimShape = pow(saturate(1.0 - dot(N, V) + rimLiftFactor), fresnelPowerFactor)
rim = rimShape x parametricRimColorFactor

For hair, add a parametric rim with a light blue or purple tint and a Fresnel power around 3-5 for a soft backlit edge.

Outline
PropertyMeaning
outlineWidthModenone, worldCoordinates, or screenCoordinates
outlineWidthFactorOutline width; world mode is meters, screen mode is a screen-height ratio
outlineWidthMultiplyTextureG channel masks width per region
outlineColorFactorOutline color
outlineLightingMixFactor0 is a flat outline; 1 multiplies outline color by surface lighting

MToon draws outlines in a separate pass with front-face culling: vertices are pushed along normals and the back faces are drawn. The outline always uses front-face culling regardless of doubleSided.

Material troubleshooting: set transparent materials to MASK or BLEND; if a material looks wrong, try MASK first; adjust shadingToonyFactor for MMD toon looks; note that MToon ignores vertex colors, so compensate with textures or material settings.
MToon lit color, shade color, rim light, and outline controls
MToon replaces traditional black shadows with a lit/shade pair, then uses rim light and outlines to reinforce the anime silhouette.
UV animation
PropertyDefaultMeaning
uvAnimationScrollXSpeedFactor0.0UV scroll speed on X in UV units per second
uvAnimationScrollYSpeedFactor0.0UV scroll speed on Y
uvAnimationRotationSpeedFactor0.0UV rotation speed in radians per second around 0.5, 0.5
uvAnimationMaskTextureB channel animation mask

A typical use is scrolling eyes or screen textures for a blinking display effect. The transform order is rotation around the UV center, then translation.

Texture channel packing
ChannelTexture
RshadingShiftTexture
GoutlineWidthMultiplyTexture
BuvAnimationMaskTexture
Efficiency tip: for models with many materials, batch-convert them with a script and start every material at shadingToonyFactor = 0.9, then fine-tune.

Step 7: Configure Spring Bone physics

VRM uses Spring Bone to simulate hair, clothing, accessories, and tails. PMX models often contain MMD physics data, but it must be rebuilt as VRM Spring Chains.

AreaExample
HairHair strand bone chains
ChestChest physics when applicable
ClothingSkirts, capes, ribbons, and long sleeves
AccessoriesRibbons, tails, and floating props
Spring Chain structure

VRM Spring Bone organizes physics into SpringChains, each containing ordered joints. For a chain a-b-c-d, the runtime creates three head-tail pairs:

head (rotation)   tail (position + collision)
   a    ->      b
   b    ->      c
   c    ->      d
  • The head node rotation is computed from the tail node displacement.
  • The last joint only acts as a tail; its own parameters are ignored.
  • To make the final segment swing, add an empty bone at the end.
Rules: joints[n] must be a parent or ancestor of joints[n+1]; one joint cannot belong to multiple SpringChains; branch chains must be separate SpringChains because execution order is not defined.
Spring Bone joint parameters
ParameterTypeMeaningTuning
hitRadiusfloat (meters)Joint collision radiusUsually a small fraction of bone length, e.g. 0.02-0.05
stiffnessfloat (>=0)Force pulling back to the rest poseLow feels soft; high feels stiff
gravityPowerfloatGravity applied each frameHigh droops more; 0 disables gravity
gravityDirfloat[3]Gravity directionUsually [0, -1, 0]
dragForcefloat (0-1)Damping / inertia decayLow keeps swinging; high stops quickly
Version difference: VRM 0.x automatically adds a terminal SpringJoint about 7 cm from the chain end when none exists. VRM 1.0 does not, so add an empty end bone manually.
The Verlet integration algorithm

Spring Bone runs three steps per frame:

Step 1: inertia
inertia = (currentTail - prevTail) x (1.0 - dragForce)
spring = deltaTime x parentWorldRotation x initialLocalRotation x boneAxis x stiffness
gravity = deltaTime x gravityDir x gravityPower
nextTail = currentTail + inertia + spring + gravity
nextTail = worldPosition + (nextTail - worldPosition).normalized x boneLength

Step 2: collision
for each collider assigned to the current SpringChain:
  if the distance to the joint tail is below zero, push the tail out
  and re-constrain bone length.

Step 3: apply rotation
prevTail = currentTail
currentTail = nextTail
to = (nextTail x inverse(parentWorldMatrix x initialLocalMatrix)).normalized
node.rotation = initialLocalRotation x fromToQuaternion(boneAxis, to)
Why this matters: Spring Bone is a simplified particle-spring system, not rigid-body physics. It only pushes colliders apart, does not simulate bounces, and uses dragForce instead of air resistance. Complex skirts may therefore feel lighter than MMD's Bullet physics.
Colliders
Collider typeParametersUse
Sphereoffset, radiusHead, chest, hands
Capsuleoffset, radius, tailTorso, thighs, arms
Sphere collision:
distance = |nextTail - colliderOffset| - colliderRadius - jointRadius
  if distance < 0:
    pushDirection = (nextTail - colliderOffset).normalized
    nextTail += pushDirection x |distance|

Capsule collision:
project the joint position onto the capsule axis, then solve as a sphere.
Typical setup: use a sphere collider on the head to keep hair from clipping, a capsule on the torso for skirts, and spheres on the hands for sleeves.
Center Space

Spring Bone evaluates in world space by default. VRM 1.0 supports a center node as a reference space: inertia is evaluated in center space while gravity stays in world space. If hair swings too wildly when a character moves, set center to the head bone so hair responds mostly to head motion.

Add Spring Bone in Blender
  1. Select the Armature.
  2. Open the Spring Bone area in the VRM panel.
  3. Add a Spring Bone Group, which becomes one SpringChain.
  4. Set Root Bones for the chain.
  5. Tune stiffness, gravityPower, and dragForce.
  6. Optional: add a Collider Group with the collision bones and shapes.
Add Spring Bone in Unity (advanced)

If you want more precise physics, finish the base conversion in Blender, import the VRM into Unity, and configure Spring Bone with UniVRM. UniVRM's visual collider editor is easier for fine tuning.

ParameterUnity componentMeaning
stiffnessVRM10SpringBoneJoint.m_stiffnessForceStiffness
dragForceVRM10SpringBoneJoint.m_dragForceDamping
gravityPowerVRM10SpringBoneJoint.m_gravityPowerGravity strength
hitRadiusVRM10SpringBoneJoint.m_hitRadiusCollision radius
ColliderVRM10SpringBoneColliderSphere / Capsule collider

Unity users can also try VrmSpringBoneTool, which simplifies Spring Bone setup and supports migration from VRM 0.x to 1.0.

Spring Bone chains, colliders, and physics parameters
Spring Bone uses a few parameters to simulate hair and skirt motion; head sphere colliders and torso capsule colliders are the most common desktop companion setup.

Step 8: Fill in metadata and export VRM

Open the Meta area in the VRM panel and fill in the model information (VRMC_vrm.meta):

FieldMeaningExample
Name / TitleModel nameMy School Uniform Avatar
AuthorAuthor nameYour name or the model author
VersionVersion number1.0
DescriptionModel descriptionConverted from MMD PMX, optimized for VRM 1.0 desktop companion use
LicenseUsage licenseChoose after reading the model readme
Avatar PermissionAllow use as another person's avatarOnly allowed / allowed / disallowed
Allow Excessively Violent UsageAllow violent scenesAllowed / disallowed
Allow Excessively Sexual UsageAllow sexual scenesAllowed / disallowed
Commercial UsageCommercial licenseAllowed / disallowed
Third Party LicensesThird-party license notesAttach the original model author's terms
VRM license flags
LicenseMeaning
RedistributionAllows re-distribution
ModificationAllows modification
CreditRequires attribution
Respect the original license: if you are converting another person's MMD model, read the included readme before exporting. Most MMD models prohibit commercial use and redistribution, and modification, streaming, or commercial use must be confirmed separately.
Pre-export checks
  1. Confirm the model is in T-Pose with arms extended and palms down. VRM Humanoid uses T-Pose as its initial pose; another pose can cause severe animation misalignment after import.
  2. Choose the export version: VRM 1.0 for desktop companions and new platforms, VRM 0.x for older compatibility.
  3. Run File → Export → VRM (.vrm).
  4. Choose an export path, review the export settings, and finish.

Final step: import the converted VRM into AniMate

Exporting the `.vrm` does not mean the character is finished. Run this quick checklist before importing into AniMate:

  • Skeleton: all required Humanoid bones are mapped and the arms, legs, and head have no automatic mapping gaps.
  • Expressions: blink, lip sync, and emotion expressions exist, and VRM 1.0 Override is set to blend where needed.
  • Materials: transparent materials are not black, and the MToon boundary looks intentional.
  • Physics: hair and skirts do not clip visibly, and colliders cover the head and torso.
  • License: the Meta fields match the original readme.

In AniMate, open the Workshop by right-clicking the desktop character, choose Add Character, and select your exported `.vrm`. After the model loads, adjust size, position, and mouse interaction, then use the Workshop to add motions, dances, and stages. AniMate imports VRM 0.x and VRM 1.0 directly and keeps characters, motions, dances, and music-reactive assets in one library.

The goal: take an MMD model that only worked inside animation software and turn it into a desktop character that blinks, looks at the mouse, idles beside your work, and dances when you want it to. Start with AniMate's built-in models to learn the app, then import your converted VRM.

Related reading

TopicPage
What is a VRM desktop companion?VRM desktop companion
Already have a `.vrm` file?VRM import guide
Where do I find models?Free VRM model directory, VRM model sources
Want the character to dance?AniMate Workshop, Dance and stage guide
Want to make a VRM from scratch?Create a VRM model with AI, Desktop pet maker guide
Desktop pet software recommendations?Best desktop pet software

Frequently asked questions

Can AniMate import PMX files directly?

AniMate is designed around VRM desktop companion files, so a `.vrm` is the most reliable choice. Convert PMX with Blender plus the VRM Add-on or Unity plus UniVRM before import.

Do I need 3D software experience to convert PMX to VRM?

No. Blender plus the VRM Add-on is the gentler route: install the add-on, import the PMX, create the VRM Model, then work through bones, expressions, materials, and physics in the panels. Most steps do not require scripting.

Should I export VRM 0.x or VRM 1.0?

Choose VRM 1.0 for new desktop companion use because expression names are more consistent, Expression Override handles conflicts, and Spring Bone rules are more complete. Use VRM 0.x only for older platforms that require it.

Why do hair and skirt physics look worse after conversion?

VRM Spring Bone is a particle-spring system, not rigid-body physics. Check each SpringChain parent relationship, then tune hitRadius, stiffness, gravityPower, and dragForce, and add colliders for the head and torso.

Can I convert and use someone else's MMD model commercially?

Read the model readme first. Most MMD models prohibit commercial use and redistribution, and modification, streaming, or commercial use must be confirmed separately with the author's license.

Put your MMD character on the desktop

Try AniMate with the built-in models first, then import your converted VRM and manage characters, motions, and dances in the Workshop.

Download AniMate

Official references