はいぬっかメモ

キャラクターモデルをVR空間で眺めたい

VRoidでかんたん!パーフェクトシンク(1/3)VRoidモデルのFBXエクスポート

f:id:hinzka:20200821073149p:plain


 iPhoneフェイストラッキング向けBlendShape追加 VRoid編
<概要>
雛形モデルからターゲットモデルへ、Blender上でBlendShapeを複製するための条件を整える
 
 
ゴゴちゃんによるBlendShape転送の検証結果

 

BlenderVRM IMPORTERアドオンで直接VRMを読み込む
        → メッシュの状態が変わってしまう。シェイプキーのコピー失敗
・中間ファイルとしてGLTF(.glb)を経由
        → メッシュの状態が変わってしまう。シェイプキーのコピー失敗
・中間ファイルとしてFBXを経由
        → メッシュの状態は変更されない。シェイプキーのコピー成功
 
上記のリサーチ結果に基づき、メッシュ頂点の状態を維持したままBlenderにインポートするため、中間ファイルとしてFBXを採用しました。エクスポートにはUnityのFBX Exporterを使用します。
 

f:id:hinzka:20200821225841p:plain

 

 

____________________________________________________________________________________

!本記事の記載内容は過去の手順となります!

 

現在、VRoidにパーフェクトシンク対応のBlendShapeを実装するには

くにやんさん @nikutokuni 作の 超かんたんBlendShapeコピーツールがおすすめです

booth.pm

VRoid用の表情データセット同梱(VRoidStudio V0.11.3対応)
Blenderを経由せず、Unityだけで簡単にVRoidモデルのパーフェクトシンク対応ができます

Unity初めてのかたでもわかりやすいように手順書を書きました

hinzka.hatenablog.com

____________________________________________________________________________________

 

 

 

本解説で使用しているUnity・Blenderのバージョンは以下の通りです。

Unity:2019.4.0f1

Blender:v2.83.2

 

1.【Unity】VRMモデルをFBXにエクスポート

1-1.準備

VRMファイル
VRoid Studioの対応バージョンから直接出力されたVRMである必要があります。
 マテリアルやメッシュの削減は行わず、デフォルトの状態で出力してください。
 
 
 
■UniVRM
以下から最新版をDLしインストールしておきます。
 
 
VRMモデルをプロジェクトにドラッグ&ドロップすると読み込まれます。
今回は、BlendShapeのコピー先モデルとしてViviを使用します。
 
 
■FBX Exporter
Unity公式で提供されているFBX Exporterを使います。
最新版はPackage Managerからインストールします。
(アセットストアにあるFBX Exporterはバージョンが古く、正しくエクスポートできません)

f:id:hinzka:20200727055019p:plain f:id:hinzka:20200716092645p:plain

f:id:hinzka:20200716092727p:plain

1-2.FBXエクスポート

VRMモデルをプロジェクトに読み込み、Scene上に配置します。

Hierarchy ウィンドウでモデルを右クリックし、FBXエクスポートを行います。

f:id:hinzka:20200727055339p:plain f:id:hinzka:20200716101303p:plain

BlenderはASCII形式のFBXファイルをサポートしてないため、Binaryを選ぶ必要があります。

Exportを実行すると、Destinationで指定したディレクトリにFBXファイルが作成されます。デフォルトではプロジェクトのAssetフォルダ直下です。

 

2.【Blender】FBXモデルのインポートとマテリアル調整

2-1.FBXインポート

[ファイル]→[インポート]→[FBX(.fbx)] でFBXモデルをインポートします。

f:id:hinzka:20200727053740p:plain

3Dビューの表示設定をマテリアルプレビューモードに切り替えます。ボーンを非表示にします。

f:id:hinzka:20200727053720p:plain

読み込んだ直後はマテリアル設定が正しく行われていません。 

【比較用】アドオン( VRM_IMPORTER )でVRMをインポートした場合

f:id:hinzka:20200727054112p:plainf:id:hinzka:20200727054134p:plain


 

今回の作業ではBlendShapeをツールで自動コピーします。
また、顔以外は、最終的に元のVRMから持ってくるので修正の必要はありません。
このため(見た目はよくないですが)このままで作業を進めることにします。
マテリアルの割り当てはUnityでVRM化する際に行います。
 
ただし、一部マテリアルとメッシュとの対応関係がおかしくなっている部分があります。このメッシュ割り当てだけはここで修正しておきます。
 
Blenderのデフォルトだと、カメラが近づいたとき3D Viewの表示が欠けるのでビューの設定をしておきます。
クリックで展開

f:id:hinzka:20200727053052p:plainf:id:hinzka:20200727053118p:plain

 

2-2.メッシュへのマテリアル再割り当て

編集モードで作業します。

f:id:hinzka:20200727060017p:plain

 Faceオブジェクトで、以下のメッシュに対してマテリアルを再度割り当てます。

1) 耳

 耳のメッシュに「EyeExtra」のマテリアルが当たってしまっています。

メッシュをリンク選択して「Face_00_Skin」のマテリアルを割り当てます。

リンク選択では白目や口内もまとめて選択されてしまうため後で個別に直します(耳だけスマートに選択する方法があったら教えてください)

 リンク選択

f:id:hinzka:20200727061528p:plainf:id:hinzka:20200727061608p:plainf:id:hinzka:20200727062221p:plain

マテリアルの割り当て

f:id:hinzka:20200727062518p:plain

耳のメッシュに顔のマテリアルが適用されます。

 

 

2) EyeExtra

後ろから見ると、><の目のメッシュに「FaceMouth」のマテリアルが当たってしまっています。

メッシュを選択して「EyeExtra」のマテリアルを割り当てます。

f:id:hinzka:20200727063058p:plainf:id:hinzka:20200727063120p:plain

 

3) 白目

※EyeExtraのメッシュが邪魔なのでいったん非表示にしています。

メッシュを非表示にする(クリックで展開)

メッシュを選択した状態で、

[メッシュ] > [表示/隠す] > [選択物を隠す] でメッシュを非表示にできます。

[メッシュ] > [表示/隠す] > [隠したものを表示]で再表示されます。

f:id:hinzka:20200727063651p:plainf:id:hinzka:20200727063711p:plain

 耳のマテリアルを再設定したとき、白目のメッシュに「Face_00_Skin」のマテリアルが当たってしまうのでここで直します。

後ろから見ると、白目のメッシュに「FaceMouth」のマテリアルが当たってしまっています。

メッシュを選択して「EyeWhite」のマテリアルを割り当てます。

 

白目の裏にある交点を選択し、選択の拡大を2回繰り返すと白目を選択できます。

f:id:hinzka:20200727065007p:plain f:id:hinzka:20200727064805p:plain

f:id:hinzka:20200727065225p:plain

「EyeWhite」のマテリアルを割り当てます。

 

4) 口内

耳のマテリアルを再設定したとき、口内のメッシュに「Face_00_Skin」のマテリアルが当たってしまうのでここで直します。

白目と同様、中央の交点を選択し、選択の拡大を4回繰り返して唇の際まで選択します。「FaceMouth」マテリアルを適用します。

f:id:hinzka:20200727070638p:plainf:id:hinzka:20200727070738p:plain

 

 完了した状態 

f:id:hinzka:20200727070131p:plainf:id:hinzka:20200727070151p:plain

 

この状態で一旦Blenderファイルを保存します。

次の手順で、雛形モデルからBlendShapeをコピーします。

 

3.【おまけ】Blenderでマテリアル手動調整

当初は下記の通り丁寧にマテリアルを直していたのですが、よく考えたらここで見た目を綺麗にする必要はとくになかった

何かの役に立つかもしれないのでおまけとして残します。

3-1.マテリアルの透過設定

クリックで展開
オブジェクトモードで作業します。ここでは眉のマテリアルを編集しています。
 
・編集対象のマテリアルを選択し、Shadingタブに切り替えます。

f:id:hinzka:20200717074342p:plain

 マテリアルのノードが表示されます。

f:id:hinzka:20200716220037p:plain

ノードをいったん全部削除し、新規で作成します。
ここを参考に
 

f:id:hinzka:20200717074536p:plain

「追加」から以下の要素をノードエディタに追加して接続します。
  • 画像テクスチャ(Image Texture)
  • テクスチャ座標(Texture Coordinate)
  • 透過BSDF(Transparent BSDF)
  • ディフューズBSDF(Diffuse BSDF)
  • シェーダーミックス(Mix Shader)
  • マテリアル出力(Material Output)

f:id:hinzka:20200830080628p:plain

 画像テクスチャの項目で、対応するテクスチャ画像を割り当てます(ここでは眉)。

 
Layout表示に戻ります。
マテリアルの設定で、ブレンドモードにアルファクリップを設定します。

f:id:hinzka:20200717001505p:plain

3Dビューでテクスチャが透過表示されることを確認します。
 
ノードはコピペができます。複数のマテリアルに同一の設定を行うときはノード画面をコピペするのがよいと思います。画像テクスチャのみ差し替えます。
コピペした場合も、アルファクリップの設定は個別に行う必要があります。
 

3-2.メッシュへのマテリアル割り当て

クリックで展開
編集モードで作業します。ここではシャツに対してマテリアルを割り当てます。
 
シャツのメッシュを選択します。
頂点グループを追加していく方法もありますが、リンク選択が便利です。

f:id:hinzka:20200717080353p:plain

f:id:hinzka:20200717080430p:plain

f:id:hinzka:20200717080450p:plain

メッシュを選択した状態で対象のマテリアルを選択し、「割り当て」をクリックします。
 マテリアルが割り当てられ、メッシュにテクスチャが表示されます。

f:id:hinzka:20200717081224p:plain

 透過が必要な場合は、このマテリアルにも 2-2. のノード設定を行います。
 
マテリアル調整が完了した状態

f:id:hinzka:20200716064641p:plain

※髪や眉・睫毛等は頂点カラー未設定のため白くなっています
 
VRoid編(2/3)
BlendShape複製作業、VRMモデルの顔オブジェクト置き換え
 
VRoid編(3/3)
Unity上でのマテリアル調整、BlendShape Clipの追加、VRM出力