技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Unity の Humanoid モデルを VRM モデルに変換してみた

目的

Humanoid モデルを VRM モデルに変換して、VirtualMotionCapture でいじれる様にしようか。
尚、説明レベルは「Unityとか名前しか知らない」レベルで。

基本的に、Booth 等で販売されてるモデルは Humanoid*1 ベースが殆ど。

というのも、現実的に VRM 形式だと変更/修正などが容易ではなく、カスタムして使うということが実質不可能だからだと思われる。
(なんかやる方法探せばないこともなさそうではあるけど…)

因みに、著作権の問題から、変換モデルの配布とかはしないので、試す人は買ってどうぞ。

ざっくり流れ

  1. Unity でプロジェクトを作成して、プラグインを突っ込む
  2. お目当てのHumanoidモデルを読み込む
  3. VRM 用にモデルを編集する
  4. VRM エクスポート

事前準備

  1. Unity を用意しましょう。(この記事を書いてる時のバージョンは 2019.4.9f)
    unity.com
  2. Uni-VRM をダウンロードしておきましょう。検証したバージョンは「0.59.0_873a」で、バージョンアップで使えなくなってたらメンゴ
    Releases · vrm-c/UniVRM · GitHub
  3. Humanoid モデルを用意しましょう
    3Dキャラクターに関する人気の同人グッズ6221点を通販できる! - BOOTH
    尚、利用規約に改変が可能かはきっちり見てください。

自分が買ったのはコレ。
booth.pmアルビノっ子大好きなので)

1. Unity でプロジェクトを作成して、プラグインを突っ込む

起動したら、とりあえず「新規作成」。
まぁ 3D だよね
f:id:white-azalea:20200902192802p:plain

起動したら左下の「Assets」を右クリックして「Package import」
f:id:white-azalea:20200902193131p:plain

先ほどダウンロードどしておいた UniVRM-0.59.0_873a.unitypackage を指定する。
f:id:white-azalea:20200902193239p:plain

何か色々言われるけどそのまま import を実行
f:id:white-azalea:20200902193549p:plain

すると Assets の中がこんな感じになってるはず
f:id:white-azalea:20200902193648p:plain

2. お目当てのHumanoidモデルを読み込む

今回買ってダウンロードしてた Noy は、Unity パッケージが一緒だったので、パッケージインポートを行う。
そうでない場合は、「fbx」ファイルを直接取り込むことになる。
f:id:white-azalea:20200902194858p:plain

読み込んだらモデルを「Hierarchy」にドロップ
f:id:white-azalea:20200902195437p:plain

ドロップすると、「Scene」にキャラクターが表示されます。
f:id:white-azalea:20200902195629p:plain

3. VRM 用にモデルを編集する

モデルを読み込んだら、それを Humanoid として認識させる。
Hierarchy からモデルを選択すると、Inspector に「Avatar」なる項目が出るので、それをシングルクリックする。 f:id:white-azalea:20200902200633p:plain

すると、モデルの fbx が表示されるので、そいつをクリック f:id:white-azalea:20200902200756p:plain

Inspector の内容が変わるので、「Rig*2」を選択して「Humanoid」を指定する。
(モデルによっては Generic になってるらしい) f:id:white-azalea:20200902200940p:plain

これでまずは Humanoid 化はできたと。

そのままだとシェーダ*3VRM で標準ではない(要するに使えないソフトとかが出る)状態になってしまうので、シェーダーを片っ端から変更していく。

これは body (という fbx)を開くと、Inspector 上で色々表示されている。
f:id:white-azalea:20200902201610p:plain

で、このシェーダーですがVRMの標準で対応しているのが

  • Standard : テクスチャ+標準影表示
  • VRM/MToon : トゥーン(アニメ調)レンダリング(+影)
  • VRM/UnlitTexture : 外部光の影響を受けない(Unlit) テクスチャ貼り付けのみ
  • VRM/UnlitCutout : 外部光の影響を受けない(Unlit) 透過設定サポート
  • VRM/Transparent : 外部光の影響を受けない(Unlit) αチャンネル(透過)対応のテクスチャ貼り付け
  • VRM/TransparentZWrite : 外部光の影響を受けない(Unlit) ... だとは思うけど良くわからん

で、対象モデルはトゥーンでいいはずなので、全部MToon にしてしまおうと思う。
で、顔だけ MToon にしてみた結果がこれである。

f:id:white-azalea:20200902211823p:plain

うおっ!まぶしっ!

これは何が起こっているかと言うと、モデル自体が発光してしまってます。
発光もある程度は必要です(でないと、暗い画面においてモデルが真っ黒でみえなくなるからです)。
調整しようと思ったら、テクスチャを Emission の左の空欄にもっていき

f:id:white-azalea:20200902213728p:plain

すぐ右の HDR をクリックして、明るさ調整します。
ライトのアイコンを切って、Intensity をほどほどに調整します。

f:id:white-azalea:20200902214232p:plain

こんな感じの調整を周りのテクスチャにも適用します。

f:id:white-azalea:20200902215017p:plain

4. VRM エクスポート

モデルのルートを選択して、「VRM > UniVRM-0.59.0 > Export humanoid」で、保存先を指定して保存。
これで一旦は完成です。

f:id:white-azalea:20200902215601p:plain

本当はエクスポートした後に眼球の移動範囲、表情の調整、服の揺れ設定などもあるのですが…そこまでやるなら下記参照してください。

qiita.com

因みにこの記事の内容は上記をスクショ込み、操作方法込みで書いてるだけです。

*1:Humanoidは、人型のモデル用に作られたモーションを他の人型モデルにも適用できるようにする仕組みです。 【Unity】Humanoid / Genericアニメーションについての基礎知識 - LIGHT11

*2:インポートしたモデルのメッシュ(ポリゴンのカクカク)にどのようにデフォーマー(≒角の取り方)をマッピングするかを定義し、アニメーション化できるようにします。

*3:3D の表面に、光や影、質感を与えるための設定