VRoid 衣装に着替えさせる①(VRoid Studio と Blender でモデルを改変する)
VRoid 衣装に着替えさせる②(Unity にモデルをインポートする)
VRoid 衣装に着替えさせる③(VRChat アバターとしてセットアップする)
VRoid 衣装に着替えさせる④(VRM を作成する)
VRM エクスポート(1回目)
- Hierarchy タブにて、モデルを選択する。
- 「VRM0」をクリックする。
- 「Export to VRM 0.x」をクリックする。

- 適当なサムネイルを設定する。
- Information を入力する。
- 「Export」をクリックする。

- 適当なフォルダを作成する。
- 作成したフォルダを開く。
- 適当な名前で VRM を保存(エクスポート)する。
※ 既に存在する vrm ファイルに上書きしてはならない。

BlendShape を設定する
- Project タブにて、「AddBlendShapeClip」という名前の C# スクリプトを作成する。(参考画像内①)
※ 右クリック > Create > C# Script - スクリプトをダブルクリックで開き、以下のコードをコピペする。
using System.IO;
using UnityEditor;
using UnityEngine;
namespace VRM
{
public class AddBlendShapeClip : MonoBehaviour
{
// AssetsフォルダのVRMプレハブをセットしてもらう
public GameObject VRMPrefab;
// 縦の三点リーダーから関数を実行してもらう
[ContextMenu("AddBlendShapeClip")]
public void AddBlendShapeClips()
{
// パスを特定する
var vrmPrefabPath = AssetDatabase.GetAssetPath(VRMPrefab);
var ext = ".prefab";
var blendShapePath = vrmPrefabPath.Replace(ext, ".BlendShapes/BlendShape.asset");
// アバターをロードする
var blendShapeAvatar = AssetDatabase.LoadAssetAtPath<BlendShapeAvatar>(blendShapePath);
// BlendShapeがあるメッシュを特定する
Mesh mesh = null;
int blendShapeCount = 0;
int transformCount = VRMPrefab.transform.childCount;
for (int i = 0; i < transformCount; i++)
{
var transform = VRMPrefab.transform.GetChild(i);
var skinnedMeshRenderer = transform.GetComponent<SkinnedMeshRenderer>();
if (skinnedMeshRenderer != null)
{
blendShapeCount = skinnedMeshRenderer.sharedMesh.blendShapeCount;
if (blendShapeCount != 0)
{
mesh = skinnedMeshRenderer.sharedMesh;
break;
}
}
}
// Clipを追加してゆく
for (int i = 0; i < blendShapeCount; i++)
{
var name = mesh.GetBlendShapeName(i);
var assetName = name + ".asset";
var clipPath = blendShapePath.Replace("BlendShape.asset", assetName);
var DefaultClipPath = blendShapePath.Replace(".asset", "." + assetName);
if (!File.Exists(clipPath) && !File.Exists(DefaultClipPath))
{
var clip = ScriptableObject.CreateInstance<BlendShapeClip>();
clip.name = name;
clip.BlendShapeName = name;
clip.Preset = BlendShapePreset.Unknown;
AssetDatabase.CreateAsset(clip, clipPath);
if (blendShapeAvatar.GetClip(name) == null)
{
blendShapeAvatar.Clips.Add(clip);
}
}
}
// Weightを設定してゆく
var proxy = VRMPrefab.GetComponent<VRMBlendShapeProxy>();
var meshName = mesh.name.Replace(".baked", "");
for (int i = 0; i < blendShapeCount; i++)
{
for (int j = 0; j < proxy.BlendShapeAvatar.Clips.Count; j++)
{
var clip = proxy.BlendShapeAvatar.Clips[j];
if (mesh.GetBlendShapeName(i).ToLower() == clip.BlendShapeName.ToLower())
{
var value = new BlendShapeBinding
{
RelativePath = meshName,
Index = i,
Weight = 100.0f
};
clip.Values = null;
clip.Values = new BlendShapeBinding[1] { value };
}
}
}
}
}
}
- スクリプトを上書き保存する。
- Hierarchy タブにて、GameObject を作成する。(参考画像内②)
※ 右クリック > Create Empty - Inspector タブにて、スクリプトをドラッグ&ドロップでアタッチする。(参考画像内③)
- VRM Prefab に、モデルのプレハブをドラッグ&ドロップでセットする。(参考画像内④)
- 縦の三点リーダをクリックする。(参考画像内⑤)
- 「AddBlendShapeClip」をクリックする。(参考画像内⑥)

- Hierarchy タブにて、モデルを非アクティブにする。
- VRM のプレハブを Hierarchy タブにドラッグ&ドロップする。

- 作成した GameObject と C# スクリプトを削除する。
VRM Spring Bone を設定する
※ Blender にて不要なボーンを削除している場合は失敗するため、Load せずに手作業で Spring Bone を設定する。
- 「VRM0」をクリックする。
- 「Load SpringBone from JSON」をクリックする。

- VRM フォルダにある「VRMSpring.json」を開く。

- 不必要な Spring Bone を削除する。
※ 参考画像では、スカートの Spring Bone コンポーネントを削除している。

VRM エクスポート(2回目)
- Hierarchy タブにて、VRM のモデルを選択する。
- 「VRM0」をクリックする。
- 「Export to VRM 0.x」をクリックする。

- 「Export」をクリックする。
- 適当なフォルダを作成する。
- 作成したフォルダを開く。
- 適当な名前で VRM を保存(エクスポート)する。

VRM ファイルを確認する
- Project タブにて、VRM をエクスポートしたフォルダを開く。
- 適当なファイルを選択して右クリックする。
- 「Show in Explorer」をクリックする。


以上