VRoid→Blender→PlayCanvasでwebに3Dキャラクターを表示してみる

# 初めに
お手軽に(~~お金をかけずに~~)3Dモデルやゲーム開発エンジンを使いたい人向けに、最近流行りのVRoid Studioで3Dキャラクター生成し、WebGLベースのゲーム開発エンジン **PlayCanvas** で動かせるようにしてみます。

流れとしては…
**1. VRoid Studioでアバターを形成してエクスポート**
**2. Blender 2.8でVRoidの拡張子.vrm を .fbx に変換**
**3. PlayCanvasにインポート - PUBLISH公開**

基本、これだけです。
アニメーションを付けたり、アバターをカスタマイズするのはBlenderで行いますが、今回の記事では割愛します。


# 必要な環境

## VRoid Studioでアバターを生成するために
VRoid Studioをダウンロード↓

https://vroid.com/studio 

## Blenderで.vrmを.fbxにExportするために

Blenderをダウンロード↓
※バージョンは2019/10時点の安定版2.8を基準に解説します。

https://www.blender.org/download/

何かと話題の "統合型3DCG作成ソフト" オープンソースなんだぜ！

## PlayCanvasにインポートするために

PlayCanvasのアカウントを作成！

https://playcanvas.jp/

[PlayCanvas](https://playcanvas.jp)は、JavaScriptsで作られたHTML5/WebGLで動作するゲームエンジンです。
インストールの必要もなく、開発から公開までWebブラウザ一つで動くクラウドにホストされるため、URLにWebブラウザからアクセスすることで複数人で開発、公開したコンテンツを一緒に遊ぶことが可能です。

これもオープンソースなんだぜ！[※有償プランもある](https://playcanvas.jp/pricing/)
最後にPlayCanvasで[**PUBLISHしてweb上に公開してみよう！**](https://playcanvas.jp/features/)

# 1. VRoid Studioでアバターを形成してエクスポート

![VRoid1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/d38d73ac-8f4c-4c37-fa12-3dd94998ab05.png)
顔や体形、髪型の形成を行い、撮影・エクスポートタブからエクスポートします。
髪の毛メッシュをBlender上で編集しない場合は、統合にチェックを入れてください。でないと、髪束1つ1つの独立したメッシュとマテリアルがとんでもない数生成されます。

上記画像の右側の**エクスポートボタン**を押すと、下記画像のVRM設定というモーダルが出ます。

![VRoid2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/00dc6fb5-324a-6e77-06a8-0e0b60c112cf.png)

**アバターの人格に関する許諾の設定** 内の **このアバターを用いて暴力表現を演じることの許可** もしくは **このアバターを用いて性的表現を演じることの許可** にチェックを入れてください。
ここのチェックが無い状態でエクスポートするとウェイト設定が入っていない状態で出力されてしまいます。


OKすると.vrmのファイルが生成されます。

![VRoid3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/8581c3cd-2f3f-b3c7-5529-f3ce19a4d2fa.png)


# 2. Blender 2.8でVRoidの拡張子.vrm を .fbx に変換

Blenderをインストールしただけだと、.vrm を読み込むことができません。
github上にある **VRM_IMPORTER** というアドオンをBlenderに入れます。

これで、Blender上で.vrmのインポート/エクスポートが可能になります。

https://github.com/iCyP/VRM_IMPORTER_for_Blender2_8

*※Blenderのバージョンに合わせて、**VRM_IMPORTER_for_Blender2_8**か**VRM_IMPORTER_for_Blender2_79**をインストールしてください。*


## ---Blender Add-onの入れ方---

githubからzipダウンロードし、適当な場所に置いといてください
→blender/編集/プリファレンスを開く


![blender1_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/6c92bf2d-e72c-644a-e411-8b1b923ab998.png)
プリファレンスのウィンドウ内の**アドオン**を選択し、上部の**インストール**ボタンをクリック


![blender1_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/a0ab1e52-4e46-c40c-9dbb-74a7c1a858c4.png)
先ほどダウンロードしたzipを指定して、**ファイルからアドオンをインストール**をクリック


![blender2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/8bb017ea-3034-36af-233e-66d073a40e34.png)
これで、Blenderに.vrmを読み込むことが可能になりました。

![blender4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/5df3a07e-3474-9572-8dfb-3059c8840ea7.png)
VRoid Studioでエクスポートした.vrmのファイルを読み込むと、ウェイト設定が入った状態のキャラクターが出てきます。

![blender5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/27b453b9-6f82-3417-fcc7-efda83304405.png)
この時、.vrmが置いてある場所を確認すると、各種テクスチャーとUnity内で使用するサムネイル画像等々が生成されています。


## ---マテリアルの調整---

この状態でPlayCanvas上にfbxをインポートしてもマテリアルは真白です。テクスチャーもロードされません。
原因はVRoidの.vrmに設定されている **MToon_unversioned** というサーフェイスがPlayCanvasでは対応していない為です。
MToon_unversionedは、UnityとVRoid Hub上で良い感じのセルルック調を出してくれるシェーダーですが、PlayCanvasのデフォルトマテリアルではセルルックを処理できないので(GLSLでカスタムシェーダーを作らない限り)、PlayCanvasが対応できる Blender 2.8 のデフォルトマテリアル **プリンシプルBSDF** に変更します。

![material_transfer0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/db5fe42e-293f-19de-8a48-1fb3d16f595a.png)

オブジェクトを選択 → コンテキストマテリアルを選択 → 設定されているマテリアル一覧から、
変更したいマテリアルを選択 → サーフェイス欄に設定されているMToon_unversionedの右側の **〇** をクリック



![material_transfer2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/a2778877-cc0c-0f49-cc5c-ff903a7d90ec.png)
シェーダーの一覧が出るので、 **プリンシプルBSDF** を選択


![material_transfer3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/71bd6da8-1c98-9c3a-535a-0448510c2a5e.png)

マテリアルを変更したことにより、オブジェクトのカラーは一旦消えます。次に、ベースカラーの右端 **〇** をクリックし、画像テクスチャを選択します。


![material_transfer4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/57b964b2-6ec4-e561-f181-5cd5e8ed8601.png)
白に設定されていたカラーが画像カラーに変更され、画像が未指定なのでオブジェクトカラーは真っ黒になります。
**画像** マークをクリックし、オブジェクトに対応している画像を選択します。



全てのマテリアルをこの手順で調整していきます。今回はとりあえず、肌と服だけ変更しました。
これでマテリアルの設定は完了です。


## ---FBXの保存設定---

そのままfbxのデフォルト設定でエクスポートすると、**PlayCanvas**上でマテリアルが関連付けられてない＆アニメーションが反映されないといった問題がでてきますので、調整します。

まず、キャラクターをオブジェクトモードで選択状態にし、ショートカットキー **A** でキャラオブジェクト直下の全ての要素を選択状態にします。

Blender上で **ファイル/エクスポート/fbx** で保存ウィンドウが開きます。
左下の **FBXをエクスポート** の▼をクリックすると詳細設定が出てきます。

### ■メインタブ
**選択したオブジェクト** のチェックを入れる。*※これをしないとライトやカメラも含まれます。*


![fbx_export1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/7ff2dc84-7592-abdb-49e7-9f8210e93198.png)
一番下に、 **パスモード** という項目があります。
これを **自動** から **コピー** に変更し、文字横の非アクティブになっているマークをアクティブにします。

**ジオメトリ**、**アーマチェア** は調整する部分はありません。


### ■アニメーション

![fbx_export2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/173b7ec4-344b-fd39-19dc-58465165c23f.png)
**NLAアクション**、**全アクション**、**強制的に開始/終了キーを挿入**のチェックを外してください。
アニメーションのフレーム飛びや、モディファイアで何か設定している場合**PlayCanvas**側で正確に反映されなくなる原因になります。


これで、設定完了です。右上の **FBXをエクスポート**で保存してください。


# 3. PlayCanvasにインポート - PUBLISH公開

PlayCanvasはクラウド型のゲーム開発エンジンなので、ダウンロードやインストールが一切不要です。全ての機能がここから利用できます。

まず、[PLAYCANVAS日本公式サイトの無料アカウント作成](https://playcanvas.jp/)からアカウントを作ってください。

![playcanvas1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/2a7283d2-e334-6a9c-d97e-30208f0a9999.png)
次に、マイページから**NEW**ボタンで新規のプロジェクトを作成します。


![playcanvas2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/7d65adf5-f4b8-7957-ed18-e850a82345de.png)
どの形式のプロジェクトで作成するかを選ぶモーダルが出ます。
最終的にマウスやタッチ操作でグリグリキャラクターを動かしたいので、 **Model Viewer Starter Kit** を選択。
DETAILSにプロジェクトの名前を任意に設定すると、右下の**CREATE**ボタンがアクティブになりますので、これをクリック。
作成したプロジェクトページに切り替わります。


- Blank Project ： 基本的なProject
- Model Viewer Starter Kit ： カメラの制御に関するコンポーネントが既に- 設定されているProject
- VR Starter Kit ： VR対応の二画面構造で出力されるProject


![playcanvas1_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/7f90ecb8-7013-375f-8252-79a524d8efb0.png)
作成したプロジェクト名が入ったページの **EDITOR** ボタンをクリックするとPlayCanvasエディターが開きます。

エディターの説明はここでは割愛しますが、以下を参照ください
1. EXPLORE: 多数の参考プロジェクト。構成要素やスクリプトを見ることができる
2. FORUM: お知らせ/講演資料(国内)/ご契約(有償プラン)/テクニカル(国内のハンズオン資料)/チュートリアル
3. DOCS: APIリファレンス/ユーザーマニュアル等々

## PlayCanvasへFBXをインポート

とても簡単です。

![playcanvas4_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/8e8eb9ee-c96d-99b2-c64d-0b3c2e3839b5.png)
PlayCanvasエディターのASSETS欄にローカルフォルダ内の.fbxをドラッグ＆ドロップすると、javascriptが解析できる **.json形式に自動変換** されます。

また、使用するのは変換された .json の方だけなので、 .fbx は破棄してしまっても問題ないですが、残しておいてもプロジェクトの容量を消費するだけなので消しましょう。



![playcanvas8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/c82cf3d5-f689-c16c-c0d2-23285a51b9e9.png)
マテリアルの調整で肌と服のマテリアルだけ **プリンシプルBSDF** に変更した部分だけ、テクスチャーが引き継がれているのが確認できます。

![playcanvas8_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/f7f59ce2-52b7-3e28-14e7-957c518307fc.png)
また、アニメーションを含んだ.fbxをアップすると、 **アニメーションの.json** と **オブジェクトの.json** に**自動的に分けられて変換**されます。


## プロジェクトをPUBLISHして公開

PlayCanvasは公開用のURLを素早く簡単に生成できます。

![playcanvas9_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/b8a906c2-b999-8f57-3494-2f5e7ac8bc61.png)
ビューポート上部の"**Manege Scenes**"をクリック


![playcanvas9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/bf9a327c-5d15-6d97-4b49-695b95935eca.png)
最初にエディターを起動した時に出たモーダルが表示されます。

**PUBLISH** をクリックし、**PUBLISH TO PLAYCANVAS** をクリック



![playcanvas10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/3ff8f02f-b9cc-7ccd-1050-a4bb71784837.png)
**PUBLISH NEW BUILD** ページに移動します。

一番下までスクロールすると**PUBLISH NOW** をクリックするとビルドが開始されます。


![playcanvas11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341892/58040d98-e41f-3288-6179-ad1569030097.png)
**BUILDS** ページへ自動で移動します。上部URLが公開用のURLです。

---

**以上になります!**

blenderでの調整がちょっとめんどいですが、PlayCanvasでの工程は非常にシンプルです。
作成した3Dモデルを、簡単にWEB上に公開することができるのは、PlayCanvasの最大の特徴かと思います。
また、HTML5との親和性が非常に高くiframeで埋め込むことが可能なです。
自身のサイトやTwitter(Twitter Cardにもできる)、LINEなどに埋め込んで、リッチな3Dコンテンツをどんどん作りましょー！


## 更新(2023/04/07): 
PlayCanvasのアニメーションは、今は **AnimStateGraph** で設定するようにアップデートが行われています。

AnimStateGraphを学ぶならこちらのチュートリアルをご覧ください

https://support.playcanvas.jp/hc/ja/articles/16231783006873