# Blender to VRM Workflow for Robotics
**Create custom VRM models in Blender for robots, machines, and non-humanoids - despite VRM's humanoid limitations**
[](README.md)
[](README.md)
[](README.md)
---
## ๐ฏ **The Challenge: VRM for Non-Humanoids**
**VRM format is designed exclusively for humanoid avatars with standardized bone structures:**
- Head, spine, arms, legs, hands, feet
- Humanoid proportions and animations
- Facial blend shapes for expressions
**For robots and machines, VRM is NOT ideal, but here's how to make it work anyway.**
### **โ ๏ธ VRoid Studio vs. Blender: Know Your Tools**
#### **VRoid Studio = Pretty Anime Humanoids Only** ๐จ
**VRoid Studio is fantastic for:**
- โ
**Beautiful anime-style humanoids** (perfect proportions, cute faces)
- โ
**Pretty clothes, hairstyles, decorations** (thousands of options)
- โ
**Facial expressions and accessories** (glasses, hats, jewelry)
- โ
**Easy VRM export** (one-click for humanoids)
- โ **Does NOT do anything else**
- โ **No robots, animals, or machines**
- โ **No custom non-humanoid shapes**
- โ **No mechanical parts or technical models**
**VRoid Studio = Human beauty salon for VRM avatars**
#### **Blender = Everything Else (Including Robots!)** ๐ง
**For VRM dogbots, caterpillars, articulated arms, or ANY non-humanoid:**
- โ
**Custom robot modeling** (from scratch or modifications)
- โ
**Animal creation** (dogs, cats, insects, dinosaurs)
- โ
**Machine design** (excavators, arms, vehicles)
- โ
**Mechanical animations** (joints, hydraulics, servos)
- โ
**Complex rigging** (beyond humanoid constraints)
- โ
**VRM export** (with workarounds for non-humanoids)
**Blender = Full workshop for any 3D model imaginable**
#### **The Reality Check:**
```
Want a cute anime girl with twintails? โ VRoid Studio
Want a VRM caterpillar robot? โ Blender (DIY required)
Want a humanoid avatar? โ VRoid Studio
Want a VRM dogbot? โ Blender (DIY required)
```
### **Why Use VRM Despite Limitations?**
- โ
**Unity compatibility** (direct import)
- โ
**VR platform support** (VRChat, Resonite, Cluster)
- โ
**Blend shapes** for mechanical animations
- โ
**Standardized format** for sharing
- โ **Humanoid-only** bone requirements
- โ **Limited to bipedal structure**
### **Better Alternatives for Non-Humanoids:**
- **FBX/GLB** (recommended for robots)
- **Custom glTF extensions**
- **Proprietary formats** (USD, etc.)
---
## ๐ง **AI-Powered Research Phase (Architect First)**
**Before touching any 3D software, let AI be your research assistant.** Build comprehensive knowledge of the "VRM scene" through systematic information gathering. Implementation becomes dramatically easier with a solid research foundation.
**๐ [General AI Research Workflow](AI_RESEARCH_WORKFLOW.md)** - This VRM-specific research phase follows our comprehensive AI-powered research methodology for all development projects. The general workflow covers domain mapping, tool discovery, community intelligence, and web scraping integration across all technology domains.
### **Why Research First?**
- **Avoid dead ends** - Know which tools actually work for non-humanoids
- **Understand constraints** - VRM's humanoid limitations become clear
- **Find communities** - Connect with experienced developers
- **Discover alternatives** - FBX/GLB options when VRM doesn't fit
- **Save time** - Don't reinvent solutions that already exist
### **AI Research Workflow:**
#### **Phase 1: Domain Mapping**
```
Prompt AI: "Map the VRM ecosystem for robotics applications"
- Standards organizations (VRM Consortium)
- Official repositories and documentation
- Current limitations and workarounds
- Success stories with non-humanoid VRM
```
#### **Phase 2: Tool Discovery**
```
Prompt AI: "Find all VRM creation tools beyond VRoid Studio"
- Blender add-ons and plugins
- Unity packages and scripts
- Alternative 3D software with VRM export
- Web-based VRM editors
- Command-line tools and APIs
```
#### **Phase 3: Community Intelligence**
```
Prompt AI: "Research VRM communities and resources"
- GitHub repositories with examples
- Subreddits (r/VRchat, r/VRM, r/3Dmodeling)
- Discord servers and forums
- YouTube tutorials and channels
- Academic papers and research
```
#### **Phase 4: Web Scraping Integration**
```
Prompt AI: "Use web scraping to collect comprehensive VRM information"
- Scrape official VRM documentation
- Collect community forum discussions
- Gather tutorial links and resources
- Extract code examples and snippets
- Build knowledge base of best practices
```
### **Web Scraping as Research Tool**
**BrightData MCP tools are perfect for this research phase:**
- **Bypass restrictions** - Access locked documentation sites
- **Comprehensive coverage** - Scrape entire communities and forums
- **Structured collection** - Organize information systematically
- **Real-time updates** - Get latest developments and tools
**Fetch MCP tool works for accessible sites:**
- GitHub repositories and documentation
- Official websites and blogs
- Open forums and communities
- Public code examples
### **Research Output Goals:**
#### **Knowledge Base Structure:**
```
VRM_Research/
โโโ standards_and_specs.md # Official VRM specifications
โโโ tools_and_software.md # Creation and conversion tools
โโโ communities_and_forums.md # Where to get help
โโโ tutorials_and_guides.md # Learning resources
โโโ code_examples.md # Implementation snippets
โโโ success_stories.md # Real-world applications
โโโ limitations_and_workarounds.md # Known issues and fixes
โโโ future_developments.md # What's coming next
```
#### **Tool Evaluation Matrix:**
- **Compatibility** with non-humanoid models
- **Community support** and documentation quality
- **Learning curve** and ease of use
- **Cost and licensing** considerations
- **Integration** with existing workflows
---
## ๐ง **Blender VRM Creation Workflow**
### **Phase 1: Model Preparation**
#### **1. Create Base Model**
```
1. Model your robot/machine in Blender
2. Use proper scale (real-world units)
3. Keep polygons reasonable (<50k triangles)
4. UV unwrap for texturing
5. Create materials (PBR workflow)
```
#### **2. Rigging for VRM (The Tricky Part)**
**VRM requires humanoid bone structure - map your robot parts to human bones:**
```
Humanoid Bones โ Robot Parts Mapping:
Hips (Root) โ Main body/chassis
โโโ Spine โ Main body (duplicate for multi-segment)
โโโ Chest โ Upper body section
โโโ Neck โ Neck/head mounting
โโโ Head โ Camera/sensor head
Left Arm โ Left manipulator arm
โโโ Left Shoulder โ Arm base joint
โโโ Left Upper Arm โ Upper arm segment
โโโ Left Lower Arm โ Lower arm segment
โโโ Left Hand โ End effector/gripper
โโโ Fingers โ Individual gripper fingers
Right Arm โ Right manipulator arm (same structure)
Left Leg โ Left locomotion system
โโโ Left Upper Leg โ Hip/thigh joint
โโโ Left Lower Leg โ Knee/shin segment
โโโ Left Foot โ Wheel/track system
Right Leg โ Right locomotion system (same structure)
```
#### **3. Create Humanoid Armature**
```python
# Blender Python script to create VRM-compatible armature
import bpy
def create_vrm_armature():
# Create armature object
bpy.ops.object.armature_add(enter_editmode=True, location=(0, 0, 0))
# Get armature and bones
armature = bpy.context.object
bones = armature.data.edit_bones
# Create required VRM bones
root_bones = [
('Hips', (0, 0, 0.8)),
('Spine', (0, 0, 1.0)),
('Chest', (0, 0, 1.2)),
('Neck', (0, 0, 1.4)),
('Head', (0, 0, 1.6)),
('LeftShoulder', (-0.2, 0, 1.3)),
('LeftUpperArm', (-0.4, 0, 1.2)),
('LeftLowerArm', (-0.7, 0, 1.0)),
('LeftHand', (-1.0, 0, 0.8)),
('RightShoulder', (0.2, 0, 1.3)),
('RightUpperArm', (0.4, 0, 1.2)),
('RightLowerArm', (0.7, 0, 1.0)),
('RightHand', (1.0, 0, 0.8)),
('LeftUpperLeg', (-0.1, 0, 0.6)),
('LeftLowerLeg', (-0.1, 0, 0.3)),
('LeftFoot', (-0.1, 0, 0.1)),
('RightUpperLeg', (0.1, 0, 0.6)),
('RightLowerLeg', (0.1, 0, 0.3)),
('RightFoot', (0.1, 0, 0.1)),
]
# Create bones with proper hierarchy
for bone_name, location in root_bones:
bone = bones.new(bone_name)
bone.head = location
bone.tail = (location[0], location[1], location[2] + 0.1)
# Set parent relationships (simplified)
bones['Spine'].parent = bones['Hips']
bones['Chest'].parent = bones['Spine']
bones['Neck'].parent = bones['Chest']
bones['Head'].parent = bones['Neck']
# Arm hierarchy
bones['LeftUpperArm'].parent = bones['LeftShoulder']
bones['LeftLowerArm'].parent = bones['LeftUpperArm']
bones['LeftHand'].parent = bones['LeftLowerArm']
# Same for right arm and legs...
return armature
# Run the script
create_vrm_armature()
```
### **Phase 2: VRM-Specific Setup**
#### **1. Install VRM Add-on for Blender**
```
1. Download from: https://github.com/vrm-c/UniVRM/releases
2. Install VRM add-on in Blender preferences
3. Enable "VRM Format" add-on
```
#### **2. VRM Bone Naming Convention**
**Blender bones must use VRM standard names:**
```
โ
Correct: Hips, Spine, Head, LeftUpperArm
โ Wrong: hip, spine_01, robot_head, arm_left
```
#### **3. Create VRM Required Objects**
```
Required for VRM export:
โโโ Armature with humanoid bone names
โโโ Mesh objects parented to armature
โโโ Materials (PBR with metallic/roughness)
โโโ UV maps for all meshes
โโโ Optional: Shape keys for blend shapes
```
#### **4. VRM Meta Information**
```
VRM requires metadata:
โโโ Title: "DogBot V1" or "Articulated Arm V2"
โโโ Author: Your name
โโโ Contact: email (optional)
โโโ Reference: URL (optional)
โโโ License: Select appropriate license
โโโ Allowed User: Everyone (recommended)
โโโ Violent Usage: Not allowed (for robots)
โโโ Sexual Usage: Not allowed (for robots)
โโโ Commercial Usage: Allow (for robotics)
โโโ Modification: Allow (open source robotics)
```
### **Phase 3: Export from Blender**
#### **1. Prepare for Export**
```
1. Select all mesh objects + armature
2. Ensure proper hierarchy (mesh โ armature)
3. Apply transforms if needed (Ctrl+A)
4. Check UV maps are assigned
5. Verify materials are PBR compatible
```
#### **2. VRM Export Settings**
```
File โ Export โ VRM (.vrm)
โโโ [โ] Export Textures
โโโ [โ] Export Binary
โโโ Pose: T-Pose (required for VRM)
โโโ [โ] Export Invisible Meshes (if any)
โโโ Thumbnail: Add preview image (optional)
```
#### **3. VRM Validation**
```
After export, VRM file contains:
โโโ model.vrm (binary glTF container)
โโโ Thumbnail image
โโโ Metadata (title, author, license)
โโโ Bone mappings
โโโ Materials and textures
โโโ Blend shapes (if created)
```
---
## ๐จ **Non-Humanoid VRM Examples**
### **DogBot VRM Model**
**Map quadruped to bipedal structure:**
```
DogBot Parts โ VRM Humanoid Bones:
Hips โ Main chassis/body
Spine โ Body extension
Head โ Sensor/camera head
Left Arm โ Front left leg
โโโ Shoulder โ Hip joint
โโโ Upper Arm โ Upper leg
โโโ Lower Arm โ Lower leg
โโโ Hand โ Paw/foot
Right Arm โ Front right leg (same)
Left Leg โ Rear left leg
โโโ Upper Leg โ Hip joint
โโโ Lower Leg โ Knee joint
โโโ Foot โ Rear paw
Right Leg โ Rear right leg (same)
```
### **Articulated Arm VRM**
**Map robotic arm to humanoid arm:**
```
Robot Arm โ VRM Arm Bones:
Shoulder โ Base mounting point
Upper Arm โ First arm segment
Lower Arm โ Second arm segment
Hand โ End effector/wrist
Fingers โ Individual gripper fingers (if applicable)
```
### **Digger Machine VRM**
**Map excavator to humanoid:**
```
Excavator โ VRM Structure:
Hips โ Main chassis
Spine/Chest โ Operator cabin area
Head โ Boom/arm base
Left Arm โ Excavator arm
โโโ Shoulder โ Arm pivot
โโโ Upper Arm โ Boom
โโโ Lower Arm โ Stick/dipper
โโโ Hand โ Bucket
Right Arm โ Additional attachment (hammer, etc.)
Legs โ Undercarriage/tracks
```
---
## ๐ **Unity Import & Setup**
### **Phase 1: Import VRM**
```
1. Drag .vrm file into Unity Assets
2. UniVRM importer dialog appears
3. Configure import settings:
โโโ [โ] Extract Textures
โโโ [โ] Extract Materials
โโโ [โ] Extract Meshes
โโโ [โ] Generate Animation Clips
โโโ [โ] Generate MToon Materials
```
### **Phase 2: Fix Humanoid Mapping**
```
Unity humanoid system expects human proportions:
1. Select imported model
2. Go to Rig tab โ Animation Type: Humanoid
3. Unity tries to auto-map bones
4. Manually adjust mappings for robot parts:
โโโ Hips โ Robot main body
โโโ Head โ Robot "head" (camera/sensor cluster)
โโโ Arms โ Manipulator arms
โโโ Legs โ Locomotion system
```
### **Phase 3: Animation Setup**
```csharp
// Create custom animations for non-humanoid movements
using UnityEngine;
public class RobotAnimationController : MonoBehaviour
{
private Animator animator;
void Start()
{
animator = GetComponent<Animator>();
// Override humanoid animations with robot-specific ones
}
// Custom methods for robot animations
public void ExtendArm()
{
// Use VRM "arm" bones for manipulator extension
animator.SetTrigger("ExtendArm");
}
public void Dig()
{
// Use VRM "hand" bones for bucket operation
animator.SetTrigger("Dig");
}
public void Walk()
{
// Override bipedal walk with robot locomotion
animator.SetFloat("Speed", 1.0f);
}
}
```
### **Phase 4: Blend Shapes for Robotics**
```csharp
// Use VRM blend shapes for mechanical animations
public class MechanicalBlendShapes : MonoBehaviour
{
private SkinnedMeshRenderer meshRenderer;
void Start()
{
meshRenderer = GetComponent<SkinnedMeshRenderer>();
// Set up blend shape indices
}
public void OpenGripper(float amount)
{
// Map blend shape to gripper opening
meshRenderer.SetBlendShapeWeight(0, amount * 100f);
}
public void ExtendArm(float amount)
{
// Use blend shapes for arm extension
meshRenderer.SetBlendShapeWeight(1, amount * 100f);
}
public void ShowStatus(string status)
{
// Use blend shapes for status indicators
switch (status) {
case "working": SetBlendShapeWeight(2, 100f); break;
case "error": SetBlendShapeWeight(3, 100f); break;
case "charging": SetBlendShapeWeight(4, 100f); break;
}
}
}
```
---
## ๐ **Advanced Robotics Applications**
### **Custom Blend Shapes for Machines**
```
Create shape keys in Blender for:
โโโ Gripper open/close
โโโ Arm extension/retraction
โโโ Wheel/track movement
โโโ Status indicators (LEDs, screens)
โโโ Damage states
โโโ Operational modes
```
### **Multiple VRM Variants**
```
Create different VRM files for:
โโโ Base model (no attachments)
โโโ With manipulator arms
โโโ With different end effectors
โโโ Different color schemes
โโโ Damage/wear variants
```
### **VRM for Robot Teams**
```
Use VRM avatars to represent:
โโโ Individual robots in a swarm
โโโ Robot operator avatars
โโโ Virtual robot twins
โโโ Training simulations
```
---
## โ ๏ธ **Limitations & Workarounds**
### **VRM Humanoid Limitations:**
- **Bone count:** Limited to humanoid skeleton
- **Proportions:** Human-like scaling expected
- **Animations:** Designed for bipedal movement
- **Blend shapes:** Limited to facial expressions
### **Workarounds:**
- **Multiple VRM files:** Different models for different configurations
- **Custom animations:** Override humanoid animations with robot-specific ones
- **Secondary rigs:** Use additional non-humanoid bones for complex mechanisms
- **Hybrid approach:** VRM for avatar representation, FBX for detailed mechanics
### **When NOT to Use VRM:**
- **Complex robotics:** Better with FBX/GLB
- **Non-humanoid shapes:** VRM validation may fail
- **High-polygon models:** VRM has size limits
- **Real-time simulation:** FBX often better for physics
---
## ๐ **Alternative Formats for Non-Humanoids**
### **FBX/GLB (Recommended for Robots)**
```csharp
// Unity import for FBX robot models
public class RobotFBXImporter : MonoBehaviour
{
[MenuItem("Tools/Import Robot FBX")]
static void ImportRobotFBX()
{
string path = EditorUtility.OpenFilePanel("Select FBX", "", "fbx");
if (string.IsNullOrEmpty(path)) return;
// Import FBX with custom settings
var assetPath = "Assets/Models/" + Path.GetFileName(path);
File.Copy(path, Application.dataPath + assetPath);
AssetDatabase.ImportAsset(assetPath);
// Configure for robotics
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
ConfigureRobotPrefab(prefab);
}
static void ConfigureRobotPrefab(GameObject prefab)
{
// Add robot-specific components
prefab.AddComponent<RobotController>();
prefab.AddComponent<ArticulationBody>(); // For physics
// Configure joints, colliders, etc.
}
}
```
### **Custom glTF Extensions**
```json
// Extended glTF for robotics
{
"extensions": {
"ROBOT": {
"joints": [
{
"name": "shoulder_joint",
"type": "revolute",
"limits": {"min": -180, "max": 180},
"axis": [0, 0, 1]
}
],
"sensors": [
{
"name": "camera",
"type": "camera",
"resolution": [1920, 1080]
}
]
}
}
}
```
---
## ๐ง **Complete Workflow Summary**
### **Blender โ VRM โ Unity Pipeline:**
```
1. Model robot/machine in Blender
2. Create humanoid armature (map robot parts to human bones)
3. Rig model to armature
4. Create materials and textures
5. Add blend shapes for mechanical animations
6. Set VRM metadata
7. Export as .vrm using VRM add-on
8. Import into Unity with UniVRM
9. Configure humanoid rig (with manual adjustments)
10. Create custom animations for robot movements
11. Implement robot control scripts
12. Test in VR environment
```
### **Best Practices:**
- **Start simple:** Begin with basic robot shapes
- **Test frequently:** Import to Unity often to catch issues
- **Use references:** Study existing VRM robot models
- **Plan bone mapping:** Design robot to fit humanoid structure when possible
- **Have fallbacks:** Be ready to use FBX if VRM doesn't work
---
## ๐ **Resources & Examples**
### **VRM Robot Examples:**
- **GitHub VRM repos:** Search for "robot VRM" or "mechanical VRM"
- **VRM community:** Forums with robot avatar examples
- **Open-source robots:** Models available for modification
### **Blender VRM Tutorials:**
- **VRM Add-on documentation:** https://vrm.dev/
- **Blender VRM workflow:** YouTube tutorials
- **Community guides:** VRM creation for non-humanoids
### **Unity Robotics Integration:**
- **Unity Robotics Hub:** https://github.com/Unity-Technologies/Unity-Robotics-Hub
- **ROS# for Unity:** ROS integration
- **Articulation Body:** Unity's robotics physics
### **Alternative Tools:**
- **Mixamo:** For humanoid animations (if adapting)
- **Blender Robot Add-on:** For mechanical modeling
- **Unity's Robot SDK:** For industrial robot simulation
---
## ๐ฏ **When to Use VRM vs Alternatives**
### **Use VRM When:**
- โ
**VR platform deployment** (VRChat, Resonite)
- โ
**Avatar representation** of robots
- โ
**Social robotics** applications
- โ
**Blend shapes** for status indicators
- โ
**Standardized sharing** format
### **Use FBX/GLB When:**
- โ
**Complex robotics** with many joints
- โ
**Non-humanoid shapes** (quadrupeds, machines)
- โ
**High-fidelity simulation** required
- โ
**Physics-based interaction** needed
- โ
**Industrial applications**
### **Hybrid Approach:**
```
- Use VRM for avatar representation
- Use FBX for detailed mechanics
- Combine in Unity scenes
- Best of both worlds
```
---
**Despite VRM's humanoid limitations, this workflow enables creating robot avatars for VR platforms while maintaining compatibility with existing tools!** ๐ค๐ฎ
*Note: For serious robotics work, consider FBX/GLB formats instead of forcing non-humanoids into VRM's humanoid constraints.*