◈ VRM importer, exporter, and runtime spring bone physics for Godot Engine 4.3+ ◈
◈ Includes a standalone MToon shader ◈
Important
An active fork and continuation of the excellent V-Sekai/godot-vrm, providing ongoing maintenance and major performance upgrades. Maintained by AzPepoze.
- Contents
- What is VRM?
- What this fork mainly improves
- Installation
- Updating
- Showcase
- Features Status
- Import Options
- Icons
- Credits
- VRM: 3D avatar ecosystem created by Pixiv.
- VRoid Studio: A free tool to easily create your own custom VRM avatars.
| Improvement | Description |
|---|---|
| C++ Physics | Spring bones and node constraints rewritten in C++ (GDExtension) for massive performance gains |
| Wind Support | Directional and turbulent wind simulation for spring bones |
| Environment Collision | Spring bones can collide with Godot's physics bodies (capsule queries) |
| Editor Gizmos | Visualize spring bone colliders and radius directly in the 3D viewport |
| Group Multipliers | Per-instance hit radius scaling for specific spring bone groups (e.g. Hair, Skirt) |
| Shared Settings | Share a single VRMSettings resource across avatars to sync wind, gravity, and collisions — or keep them unique per character |
| Method | Steps | Best For |
|---|---|---|
| Godot Asset Library | Download and install directly from the AssetLib tab in the Godot editor | Quick setup, one-click install |
| Git Submodules | See submodule commands below | Git-based projects, easy updates |
| Manual Install | See manual steps below | Offline setup, full control |
Download and install directly via the Godot Asset Library.
Map the addon branches cleanly to your addons/ folder:
git submodule add -b vrm https://github.com/AzPepoze/godot-vrm addons/vrm
git submodule add -b mtoon https://github.com/AzPepoze/godot-vrm addons/mtoon- Download the latest
.zipfrom the Releases page - Copy
addons/vrminto your project'saddons/vrm— do not rename - Copy
addons/mtooninto your project'saddons/mtoon— do not rename - Enable both plugins in Project Settings → Plugins
| Method | How to Update |
|---|---|
| Godot Asset Library | Use the AssetLib tab in the editor to check for and install updates |
| Git Submodules | See commands below |
| Manual Install | Download the latest release and replace the addons/vrm and addons/mtoon folders |
Git Submodule update commands:
git submodule update --remote addons/vrm
git submodule update --remote addons/mtoon| VRM 0.0 Collision | VRM 1.0 Collision |
|---|---|
![]() |
![]() |
Spring bones can collide with two types of objects:
- Body Colliders: The character's own internal VRM colliders.
- Environment Collision: Godot's external physics bodies (can be toggled in settings).
In the debug images above:
- White wireframe: Spring bone collision radius
- Purple wireframe: VRM character body colliders
- Yellow line: Orthogonal surface normal at the hit point
- Red X: The exact point of collision with the environment
Warning
Known Issue: Spring bones may occasionally pass through colliders (clipping). I honestly suck at collision algorithms, so if you are a math wizard, PRs to help improve collision stability are very much needed and welcome!
| VRM 0.0 Import | VRM 1.0 Import |
|---|---|
![]() |
![]() |
| Capsule Gizmo | Line Circle Gizmo |
|---|---|
![]() |
![]() |
| Feature | Status | Details |
|---|---|---|
| VRM 0.0 Import | ✅ | |
| VRM 1.0 Import | ✅ | |
VRM 1.0 Export (.vrm / .glb) |
Exports metadata, MToon, and node constraints, but humanoid bones/expressions are WIP | |
| Metadata | ✅ | License, screenshot parsing |
| Feature | Status | Details |
|---|---|---|
| Core Physics | ✅ | High-performance C++ GDExtension physics |
| Wind Support | ✅ | Direction, strength, turbulence, frequency |
| Environment Collision | ✅ | Capsule queries against Godot's physics environment. Can be toggled. |
| Group Multipliers | ✅ | Per-instance hit radius scaling for specific groups (e.g. Hair, Skirt) |
| Editor Gizmos | ✅ | Visualizes spring bone colliders and radius in the 3D viewport |
.gltf Standalone Export |
Spring bones are not currently exported to glTF |
| Feature | Status | Details |
|---|---|---|
VRMC_materials_mtoon |
✅ | Standard MToon shading |
VRMC_materials_hdr_emissive |
✅ | HDR emissive textures |
| Feature | Status | Details |
|---|---|---|
humanoid |
✅ | SkeletonProfileHumanoid via unique skeleton name |
expressions |
✅ | Blend shape / material animation tracks |
firstPerson |
Head hiding supported via import options | |
lookAt |
Generates animation tracks (app must use BlendSpace2D manually) |
|
VRMC_node_constraint |
Has known issues with retargeting |
Available in the Import dock when selecting a .vrm file:
| Option | Description | Values |
|---|---|---|
| Head Hiding Method | Controls first/third-person head visibility | ThirdPersonOnly, FirstPersonOnly, FirstWithShadow, Layers, LayersWithShadow, IgnoreHeadHiding |
| First/Third Person Layers | Render layer masks for Layers mode |
Layer bitmask (default: first=2, third=4) |
| Bone Rename | How skeleton bones are renamed on import | See Bone Rename Modes |
| Skeleton Name | Skeleton node name after import | Skeleton3D (default, for Blender) or GeneralSkeleton (for BoneMap profiles) |
| Remove End Bones | Strips empty end-bone nodes from the skeleton | true / false |
Note
Import options are shown under the Advanced mode.
Set defaults once in Project Settings → General → VRM → Import instead of configuring per-file:
| Setting | Purpose |
|---|---|
vrm/import/head_hiding_method |
Default head hiding mode |
vrm/import/bone_rename |
Default bone rename mode |
vrm/import/skeleton_name |
Default skeleton node name |
vrm/import/remove_end_bones |
Default remove end bones |
vrm/import/v1_rotate_180 |
Rotate VRM 1.0 models 180° on Y axis |
In the import dialog, Override Global Defaults (disabled by default) lets you override settings for a specific file.
| Mode | Description |
|---|---|
| None | Keep original VRM bone names as-is |
| Humanoid | Convert to standard Godot humanoid names (Hips, Spine, etc.) |
| Symmetrize VRoid | Mirror VRoid bone names on the X axis |
For a smooth Blender ↔ Godot animation workflow:
- Install the VRM Add-on for Blender
- Import your
.vrminto Blender with the addon - Animate your model in Blender
- Import your
.blendfile into Godot - In the Import dock for the
.blendfile:- Locate the VRM skeleton (may be called Skeleton3D)
- Go to Skeleton → Retarget → Bone Map
- Click Add Bone Map (create a new one)
- Set its profile to SkeletonProfileHumanoid
- Verify each bone is mapped correctly
Recommended import settings for Blender:
| Setting | Recommended Value | Why |
|---|---|---|
| Bone Rename | Humanoid |
Works with the skeleton setup above; other modes (None, Symmetrize VRoid) are optional if you know what you're doing |
| Skeleton Name | Skeleton3D |
Matches skeleton names inside .blend imports |
Originally created by V-Sekai. This fork and continuation is maintained by AzPepoze.
Original Contributors:







