バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事では、VRoidのBodyメッシュと服をblenderで分離させて裸にしてみたよ。
ついでにunityに持って行ってスクリプトで服を脱がせてみました(笑)。
2023/05/20現在、blender2.93LTS、blender3.3LTS、とVRoid Studio v1.22.1でもこの記事のやり方でできました。







なぜこんなことをするのか?(´;ω;`)
VRoid Studioでエクスポートすると、Bodyメッシュに体と服がくっついているから。
体と服を別オブジェクトに分離しておくと、unityのインスペクターオンオフで簡単に服が着脱できて便利。
「いざ!」って時にただちに服を脱ぐことができて捗る(笑)。
服を細かく分離しておけば、上半身だけ脱がすとか特定の部分だけ脱がすとかできて便利。
2023/05/08追記:単に裸にしたいだけならVRoidStudioで服とインナーを非表示にすればできます
「VRoidを裸にする方法」みたいなキーワードでたまにアクセスがあるからここに追記しておくけど、単に裸にしたいだけならVRoidStudioで服とインナーを非表示にすればできます。
服プリセットの一番上にある何もないやつを選べばOK。
インナーはカスタムアイテムに何もないやつがあったからそれ選んだら裸にできたけど、これ最初からあったかは忘れた(~_~;)
インナーが消せない場合は、右にある「テクスチャを編集」でインナー部分を消しゴムで消せばいけると思う。
ブラシを大きくしてささっと消して、左上にある×を押して保存すればOK。
以上追記終わり。
VRoidの服を分離する方法
私の服はVRoid Studioのワンピースプリセットをベースにやってるので、それでやります。
BOOTHで売ってるけどこれね↓(;^_^A



全ての服プリセットで試したわけじゃないけど、VRoid Studio正式版で追加された服でも普通にできたから多分どれでも大丈夫だと思う。
1,VRoid Studioでエクスポートする
使用したVRoid Studioのバージョンはv1.6.0です。(2023/04/19追記: v1.22.0でもできました)
右上の L↑」 みたいなアイコンをクリックしてVRMエクスポートを選び、モデル情報を入力したら保存すればOK。
それにしてもVRoid Studioは使うたびになんかこう、胸がキュンキュンしてきますね( *´艸`)
でもなんか反動でちょっと疲れる気がする(笑)。
軽くしたいならポリゴンを削減しておく
webglとかで使う場合は、ポリゴン数はできるだけ削減して軽くしておいたほうがいいかも?
やりすぎるとカクカクになっちゃうから適度に(;^_^A
「髪の断面形状を変更する」にチェックすると髪がローポリになるっぽい?ポリゴン数が6000も減ったので軽くしたいなら使った方がいいかも。
これVRoid Studio正式版になってから「透明メッシュを削除」が効かなくなった?バグ?と思ったら、削除度のパラメーターが0の部位は透明でも削除してくれないっぽい?
私の服みたいに透明部分がある衣装でも、衣装の削除度0だとblenderに読み込んでも透明部分は削除されてなかった。
削除しすぎない程度に指定しておいたほうがいいかも。
2,blenderにVRMファイルを読み込む
VRM_addon_for_blenderっていうやつを使うとインポートできます。
導入の仕方は↓こちらに詳しく書いてあるので割愛。
これすごい便利だから寄付とかお返ししたいけど、受け付けてるのかな?チームで管理してる感じっぽいから難しいか?(;^_^A
blenderを起動して、VRMファイルをインポートします。
armatureは一時的に非表示にしといたほうがやりやすいかも
邪魔になっちゃうから一時的に非表示にしといたほうがいいかも。
エクスポート時に戻しておかないとダメですが(;^_^A
3,bodyを選択して編集モードに、Pキー → 「構造的に分離したパーツで」 を選ぶ
これで構造的に分離してるパーツを、blenderが勝手に推測して分離してくれます。便利すぎる…。
たくさん分離されてますね。
4,かなり細かく分離されるので、部位ごとにShift選択して結合(Ctrl+J)していく
数えたらbody.070まで分割されてました(;^_^A
bodyも入れると71個?
いくつに分割されるかは、モデルの服やエクスポート時の削除数とかでも変わってくると思う。
ちなみに使ってる私の服はこれね↓(;^_^A



流石にこんなにたくさんあったら管理しきれないので、部位ごとに一塊になるように結合していきます。
Shift押しながら複数選択して、Ctrl+Jでチマチマ結合していきます。
注意点1:シーンコレクションのshift選択で上手くいかない場合、シーン画面で直接クリックして選択する
シーンコレクションでShiftキーを押して選択すると、「ここからここまで」の範囲選択になってしまうので、別の部位のメッシュまで選択されてしまうことも。
シーン画面でShiftキー押しながら直接メッシュをクリックしても選択できるので、離れた番号のメッシュはこの方法でやったほうがいいと思う。
注意点2:指や爪部分は小さくて見落としがちなので注意
爪あたりは小さいので見落としがち。
でも結局は服部分と体部分に分離できればいいので、体部分と結合させちゃえばいいと思う。
分かりやすいように名前を変えておく
ついでに分かりやすいようにリネームしといたほうがいいかも。
シーンコレクションでメッシュをダブルクリックすれば名前を変更できます。
5,動作チェック。非表示にすると脱がせる!すごい!( *´艸`)
まぁ大体できたかな。
マテリアルビューにして見てみよう。
非表示にすると服を脱がせるゾ!( *´艸`)
うーむ素晴らしい。
指先一つでバーチャル女子の服を脱がせる力を手に入れてしまった…(笑)。
6,VRMエクスポートする
最初にアーマチュアを非表示にしたけど、エクスポートする時は戻すのを忘れずに。
一応blendファイルも保存しとくと後でいじれて良いと思います。
最初謎のエラーが出たけど、いじってたら普通にエクスポートできたΣ(゚Д゚)
スクショ撮る前にいじってたら何故か解決してしまった…ので原因は不明(~_~;)
検索したら出なかったけどこんなエラー。同じ人がいるかもしれないから一応貼っておく。
Python: Traceback (most recent call last): File “C:\Users\MK-Mayumi\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\VRM_Addon_for_Blender-release\io_scene_vrm\exporter\__init__.py”, line 60, in execute vrm_bin = glb_obj.convert_bpy2glb(“0.0”) File “C:\Users\MK-Mayumi\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\VRM_Addon_for_Blender-release\io_scene_vrm\exporter\glb_obj.py”, line 96, in convert_bpy2glb self.mesh_to_bin_and_dic() File “C:\Users\MK-Mayumi\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\VRM_Addon_for_Blender-release\io_scene_vrm\exporter\glb_obj.py”, line 1342, in mesh_to_bin_and_dic bpy.ops.object.mode_set(mode=”OBJECT”) File “C:\Program Files\Blender Foundation\Blender 2.93\2.93\scripts\modules\bpy\ops.py”, line 132, in __call__ ret = _op_call(self.idname_py(), None, kw) RuntimeError: Operator bpy.ops.object.mode_set.poll() failed, context is incorrect location: <unknown location>:-1
検索バーにコピペしたプレーンテキストが残っていたのを貼っただけなので、どこで改行されてたかは忘れた(~_~;)
まぁエクスポートできたから良いかな。
unityで動作チェックをする
インスペクターオンオフで切り替えできる!
これはいいぞ( *´艸`)
せっかくだからキー入力で切り替えてみる
なんて恐ろしい能力だ…(;゚д゚)ゴクリ
これもっと細かく分離させておけば、ダメージ受けたら少しずつ服が剥げていくみたいにできるかもしれない(笑)。
上手く下着のオブジェクトを付けられれば、このすばのカズマさんがやってたスティールで下着盗むやつもできるかもw
バーチャル女子の服を脱がせる!すごいC#スクリプト( *´艸`)
単にインスペクターオンオフを切り替えるだけですw
特にすごくはないw
↓をコピペしたら動いたから多分大丈夫なはず。
HideObject.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HideObject : MonoBehaviour { public GameObject Hide; private bool Flag; void start() { Flag = false; } void Update () { if(Flag == false) { //Cが押されたら消して出現 if(Input.GetKeyDown(KeyCode.C)) { //Hideを非アクティブに Hide.SetActive(false); //フラグをtrueに Flag = true; } } else { //Cが押されたら戻す if(Input.GetKeyDown(KeyCode.C)) { //Hideをアクティブに Hide.SetActive(true); //フラグをfalseに Flag = false; } } } }
適当なオブジェクトにスクリプトをアタッチして、消したいオブジェクトを指定して実行中にCキーを押せばOK。
今回はモデルの服を消すわけだから、モデルにアタッチしとくのが無難かな。
おわりに
簡単に体と服を分離させて別オブジェクトにできました。
blenderのオブジェクト分割能力が優秀すぎますね。
紳士向けに使うなら便利かもしれません( *´艸`)