VRoid 衣装に着替えさせる④

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」をクリックする。

以上

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です