0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】VRChatアバターをVRM化してVSeeFaceで表情を動かすまで詰まった話

0
Last updated at Posted at 2026-07-08

VRChatで使っているアバターをVRM化してVSeeFaceに読み込んだとき、

  • 首は動く
  • でも口が動かない
  • 目もまばたきしない

という状態になったときの対処メモです。

結論から言うと、VRMのBlendShapeClipにBlendShapeは登録されていたけれど、Weightが0だったのが原因でした。


1. VRMをUnityへImportし直す

Unity上部メニューから、

VRM0
↓
Import VRM 0.x...

を押して、VSeeFaceに入れる予定の.vrmファイルをImportします。


2. 生成されたPrefabをHierarchyへ置く

ImportするとProject内にPrefabができます。

それをHierarchyへドラッグします。


3. Prefabの一番上を見る

Hierarchy上のPrefabの一番親を選択します。

Inspectorに以下のようなコンポーネントがあるはずです。

VRM Blend Shape Proxy

これを開きます。


4. BlendShapeAvatarを開く

VRM Blend Shape Proxy の中にある BlendShapeAvatar を開きます。

すると、以下のような表情ボタンが出ます。

A
I
U
E
O
Blink
Blink_L
Blink_R
Joy
Angry
Sorrow
Fun

5. A / I / U / E / O / Blink にWeight 100を入れる

最低限、以下を設定します。

A       → Body / vrc.v_aa / 100
I       → Body / vrc.v_ih / 100
U       → Body / vrc.v_ou / 100
E       → Body / vrc.v_e  / 100
O       → Body / vrc.v_oh / 100
Blink   → Body / まばたき / 100
Blink_L → Body / ウィンク / 100
Blink_R → Body / ウィンク右 / 100

Body の部分はアバターによって名前が違う場合があります。

Skinned Mesh Renderer のBlendShapesに、vrc.v_aaなどが並んでいるオブジェクトを選びます。


6. 重要:Weightが0だと動かない

ここが一番のハマりポイントでした。

例えば A の中身がこうなっていると動きません。

A → Body / vrc.v_aa / 0

正しくはこうです。

A → Body / vrc.v_aa / 100

BlendShape Listに項目があっても、右側の数値が0なら表情は動きません。


7. Unity上で口が動くか確認

BlendShapeAvatarA を選び、BlendShapeタブで vrc.v_aa を100にします。

その時点でUnity上のPreviewの口が「あ」の形になればOKです。


8. 再Exportする

設定できたら、もう一度VRM0としてExportします。

VRM0
↓
Export VRM 0.x

または、使っている環境に合わせてVRM Converter側からExportします。

重要なのは、設定後のPrefabをExportすることです。


9. VSeeFaceで読み込み直す

再ExportしたVRMをVSeeFaceに読み込みます。

これで、首だけでなく口やまばたきも動くはずです。


使ったもの

Unity
VRChat SDK
UniVRM
VRM Converter for VRChat
VSeeFace
Webカメラ
VRChat用アバター

今回の環境では以下を使いました。

UniVRM 0.128.1
VRM Converter for VRChat 41.5.2

全体の流れ

VRChatアバター
↓
VRM Converter for VRChatでVRM0 Export
↓
UnityにVRM0 Import
↓
生成されたPrefabをHierarchyへ配置
↓
VRM Blend Shape Proxyを開く
↓
BlendShapeAvatarを開く
↓
A/I/U/E/O/BlinkにBlendShapeを設定
↓
Weightを100にする
↓
再Export
↓
VSeeFaceで確認

口パクの対応表

VRChatのVisemeが以下のように入っている場合、

vrc.v_aa
vrc.v_ih
vrc.v_ou
vrc.v_e
vrc.v_oh

VRM側ではこう対応させます。

A → vrc.v_aa
I → vrc.v_ih
U → vrc.v_ou
E → vrc.v_e
O → vrc.v_oh

まばたきの対応表

今回のアバターでは日本語名でした。

Blink   → まばたき
Blink_L → ウィンク
Blink_R → ウィンク右

アバターによっては、以下のような名前の場合もあります。

Blink
blink
Eye_Close
eyes_closed

実際にSkinned Mesh RendererのBlendShapesを見て、目が閉じるものを選びます。


首だけ動いて口・目が動かないときに見る場所

VSeeFaceで首だけ動く場合、HumanoidやWebカメラはだいたい正常です。

見るべき場所はここです。

VRM Blend Shape Proxy
↓
BlendShapeAvatar
↓
A / I / U / E / O / Blink
↓
BlendShape List
↓
Weight

よくある原因

BlendShapeClipはあるが中身が空

ABlinkのボタンは存在するのに、BlendShape Listが空の場合は動きません。

Weightが0

今回の原因です。

A → vrc.v_aa → 0

これだと、Aを呼んでも口は0%しか動きません。

A → vrc.v_aa → 100

にします。

違うMeshを見ている

元のVRChatアバター側ではなく、Importし直したVRMのPrefab側を見た方が確実です。

VRM ConverterでBakeされたMeshは、元の名前と変わっていることがあります。


最終チェックリスト

[ ] VRM0で出力している
[ ] UnityにVRM0をImportし直した
[ ] Import後のPrefabをHierarchyに置いた
[ ] VRM Blend Shape Proxyを開いた
[ ] BlendShapeAvatarを開いた
[ ] A/I/U/E/O/Blinkがある
[ ] A → vrc.v_aa → 100
[ ] I → vrc.v_ih → 100
[ ] U → vrc.v_ou → 100
[ ] E → vrc.v_e → 100
[ ] O → vrc.v_oh → 100
[ ] Blink → まばたき系 → 100
[ ] Unity上のPreviewで口や目が動く
[ ] 設定後のPrefabを再Exportした
[ ] VSeeFaceに読み込み直した

まとめ

VSeeFaceで、

首は動く
でも口と目が動かない

場合、まず疑うべきはBlendShapeClipです。

特に今回のように、

BlendShapeClipはある
BlendShape名も合っている
でもWeightが0

という状態だと、見た目上は設定されているように見えるのに、実際には何も動きません。

A/I/U/E/O/Blinkに正しいBlendShapeを入れて、Weightを100にするのが重要でした。


追記:髪・カチューシャ・アクセサリを揺らしたい場合

ここからは、口・目が動いたあとに、髪やカチューシャなどの揺れ物を動かすためのメモです。

VRChatでは揺れ物に VRC Phys Bone を使いますが、VRM / VSeeFace側ではそのままでは基本的に動きません。

VRM側では、代わりに以下を使います。

VRM Spring Bone

つまり考え方としては、

VRC Phys Bone
↓
VRM Spring Bone

に置き換える、または変換する必要があります。


PhysBoneからSpringBoneへ変換する

今回は以下のような流れで試しました。

VRChatアバターの複製を作る
↓
PhysBone → SpringBone変換ツールを使う
↓
VRM Spring Boneが追加される
↓
VRM0でExport
↓
VSeeFaceで確認

変換ツールを使う場合、secondary という管理用オブジェクトに VRM Spring Bone がまとめて追加されることがあります。

これは異常ではありません。

VRM Spring Bone は、元の VRC Phys Bone と同じ場所に付いていなくても大丈夫です。

大事なのは、コンポーネントの置き場所ではなく、以下です。

VRM Spring Bone
↓
Root Bones
↓
実際に揺らしたい髪・服・アクセサリのボーン

SpringBoneコンポーネントは元のPhysBoneの場所に移動しなくてよい

最初は、

元のPhysBoneが付いていた場所にSpringBoneを移動した方がいいのでは?

と思いました。

しかし、基本的には不要です。

secondary のような管理用オブジェクトに VRM Spring Bone が複数付いていて、各SpringBoneの Root Bones に対象ボーンが登録されていればOKです。


RootBones is not active と言われる場合

VRM Export時に以下のようなエラーが出ることがあります。

[VRMSpringBone] secondary.RootBones[0] is not active
[VRMSpringBone] secondary.RootBones[1] is not active

これは、

secondaryが非アクティブ

という意味ではありません。

正確には、

secondaryに付いているVRM Spring Boneの
Root Bones[0] / Root Bones[1] に登録されている参照先ボーンが非アクティブ

という意味です。

つまり見るべき場所はここです。

secondary
↓
VRM Spring Bone
↓
Root Bones
↓
Element 0 / Element 1

その Element に入っているボーンが、Hierarchy上で非アクティブになっていないか確認します。


RootBones is not active の対処

対処はどちらかです。

使うパーツなら有効化する

髪やアクセサリなど、実際に使うパーツのボーンなら、そのボーン、または親オブジェクトを有効化します。

使わないパーツならSpringBoneを削除する

非表示の衣装、使っていないアクセサリ、不要なパーツのSpringBoneなら、その VRM Spring Bone コンポーネントごと削除してOKです。

最初は欲張らず、髪やカチューシャなど、動かしたいものだけ残す方が安全です。


Centerについて

VRM Spring Bone には Center という項目があります。

Center

これは揺れ計算の基準になるTransformです。

None でも動く場合はありますが、アバター全体の移動や回転が絡むと、揺れ方が不安定になったり、分かりにくくなったりする場合があります。

頭アクセサリなら、

Head

髪なら、

Head
Chest
UpperChest

あたりを試すとよいです。

今回、カチューシャや頭アクセサリでは、Head または Chest が候補になりました。


カチューシャ・飴アクセサリのSpringBone設定例

今回、カチューシャについている飴アクセサリにバネ感を付けたかったので、以下のような設定を試しました。

Stiffness Force: 0.4
Gravity Power: 0.25
Gravity Dir: X 0 / Y -1 / Z 0
Drag Force: 0.25
Center: Chest
Root Bones: Bone.005

この設定で、バネっぽい揺れ方がちょうどよくなりました。


パラメータの意味

Stiffness Force

元の形に戻ろうとする力です。

低い → 柔らかく揺れる
高い → 硬く、すぐ戻る

カチューシャの飴アクセでは、今回は 0.4 くらいがよさそうでした。


Gravity Power

重力の強さです。

高い → Gravity Dir方向へ強く引っ張られる
低い → あまり引っ張られない

Gravity Dir

重力方向です。

下に垂れ下がる場合は、だいたい以下になっています。

X 0 / Y -1 / Z 0

上方向に引っ張りたい場合は、

X 0 / Y 1 / Z 0

にすることで、上向きの力を加えられます。

ただし、上方向のGravityは強すぎると不自然になりやすいので、Gravity Powerは小さめから調整します。


Drag Force

揺れの減衰です。

低い → ぷるぷる揺れ続ける
高い → すぐ止まる

今回のカチューシャでは、0.25くらいが扱いやすかったです。


Root Bones

実際に揺らすボーンです。

カチューシャ全体を揺らすより、飴やリボンなど、動かしたい先端パーツの根元ボーンだけを入れる方が自然です。

カチューシャ本体:揺らさない
飴・リボン・先端:SpringBoneで揺らす

という考え方がよさそうです。


髪やアクセサリが揺れないときに見る場所

[ ] VRM Spring Bone が存在する
[ ] Root Bones に対象ボーンが入っている
[ ] Root Bones の参照先が非アクティブではない
[ ] Stiffness Force が強すぎない
[ ] Drag Force が強すぎない
[ ] Center が必要なら Head / Chest などに設定されている
[ ] Export対象が、表情修正済みかつSpringBone追加済みのPrefabである

注意:SpringBone追加後に首・目・口まで動かなくなった場合

髪が揺れないだけならSpringBone設定の問題ですが、

首も動かない
目も動かない
口も動かない

となった場合は、SpringBoneの問題ではなく、Export対象を間違えている可能性があります。

例えば、

表情修正済みPrefabではないものをExportした
VRM Humanoid / VRM Blend Shape Proxy が付いていないRootをExportした
別の複製アバターをExportした

などです。

Exportするときは、必ず以下が付いているRootを選びます。

VRM Meta
VRM Humanoid Description
Animator
VRM Blend Shape Proxy
VRM First Person
VRM Look At Head

最終チェックリスト:髪・アクセサリ揺れ編

[ ] 表情が動くVRMを先に作ってある
[ ] そのPrefabを複製してSpringBone作業用にしている
[ ] VRM Spring Boneが追加されている
[ ] Root Bonesに揺らしたいボーンが入っている
[ ] RootBones is not active のエラーがない
[ ] CenterをHead / Chestなどに設定した
[ ] Stiffness / Gravity / Dragを調整した
[ ] Unity上またはVSeeFace上で揺れを確認した
[ ] 設定済みPrefabをExportした

まとめ

今回の作業では、まず表情まわりで、

BlendShapeClipはある
BlendShape名も合っている
でもWeightが0

という罠にハマりました。

その後、髪やアクセサリの揺れでは、

VRC Phys BoneはVRMではそのまま動かない
VRM Spring Boneへ変換・設定する必要がある

ことが分かりました。

特に重要なのは以下です。

口・目が動かない → BlendShapeClipのWeightを見る
髪・アクセが揺れない → VRM Spring BoneのRoot Bonesを見る
RootBones is not active → 登録先ボーンが非アクティブ

VRChatアバターをVSeeFace用にVRM化する場合、
「VRMとしてExportできた」だけでは完了ではなく、Importし直して中身を確認するのが大事でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?