HololensでVRMキャラクターをランタイムロードする

2018年12月31日

こんにちはホロ元です

Hololens Adventcalendar24日目の記事です。

皆さん良いクリスマスを過ごせましたか?

え?もう大みそか、そしてお正月だって?

皆さん気が早いですねぇ!

嘘です♡ 24日に公開する予定が怪獣バグ・エラーヌルとの戦いで気が付いたら大みそかになっていました。

では本題を

・HololensでVRMキャラクターをランタイムロードしてボーン操作

 VRMというものは最近になって登場した新規格の3Dモデルのことで、VRChatやVカツなどで使用できます。

 またVRoid StudioとVRoid Hubを用いることで今まで高度な知識と経験を要求されていた3Dキャラクターを誰でも簡単に作成し、公開することもできます。

 VRoid Studioに関してはこちらでまとめています。


 これを使っていて、3Dモデルを作成することがメインのソフトではあるのですが、漫画やイラスト作成に用いる方も多くいます。

 それはVRoid Studio上で3Dモデルにポーズや表情を付け、画像として出力する機能があるためです。

 今回この機能を目指し、『Hololensを用いて現実空間上でVRoid Hubからダウンロードしたモデルに自由なポーズを付ける』ということをします。

 このアプリを用いれば例えばイラストレーターが外で「この景色いいな」と思ったらその場でHololensをかぶり、自分のキャラクターを表示させポーズを付け、その風景に会う気に入ったポーズで3Dモデルを見ながらイラストを描くことができます。

ランタイムロードに関してはまだまだ勉強が必要でほとんど参考ページをもとにしたので詳しい解説は省きます。

完成物


動作環境

Unity 2018.2

VisualStudio 2017

UniVRM v0.46c


VRMのランタイムロード

このアプリの必要な機能としては以下の二つです

・HololensのファイルエクスプローラーからダウンロードしてあるVRMモデルを読み込む。

・ボーンを自由に操作できるようにする。


今回ランタイムロードには以下のページを参考にFilePickerを用いました。

HoloLensでFilepickerから選択したVRMファイルを読み込む

手順としては参考ページの通りなのですが、一部ハマってしまったので書きます。

・空のプロジェクトを作成。

・MRTKをインポート

・MRTKのConfigureでscene設定とプロジェクト設定を行う。

・参考ページの[VRMRuntimeLoaderUsingFilePicker.cs]を作成し、からゲームオブジェクトにアタッチ。

・それとは別にHierarchyに空のゲームを作成し[VRMRoot]として[VRMRuntimeLoaderUsingFilePicker.cs]の[VRMRoot]ゲームオブジェクトとしてアタッチする。

この時点ではVRMを読み込むことができないためエラーが表示されていると思います。

 VRMをUnityで扱うためにはUniVRMを用いるためUniVRMをインポートするのですが、どうも参考ページからダウンロードできるSampleプロジェクトに同梱されているUniVRMのバージョンではSpatial Mappingとの間で競合の問題が発生しているようでSpatial Mappingを扱うことができませんでした。

そのため、UniVRMのバージョンによってSpatial Mappingやその他のエラーが発生する可能性があります。


・UniVRM(v0.46c)をインポート


これでアプリ起動時にファイルエクスプローラーが展開し、[3D Object]内のVRMファイルを読み込み、表示することができます。


ここまでは参考のページをもとに行ったので大雑把に解説しました。

ココカラはただ表示させるだけではつまらないのでボーン操作にうつります。

Final IKでモデルのボーン操作を行う

私はVRMモデルのボーン操作としてFinal IKの[VR IK]を用いました。

 Final IK自体が有料のアセットとなりますが(通常90ドルですが年末セールで45ドルになってます。)、モデル操作としてはこれ以上ないというほど有名で扱いやすいツールです。

・Final IKをインポート

・VRMRootのゲームオブジェクトにVR IKをアタッチ

 このスクリプトをVRMRootに付けることによって、VRMRootにVRMモデルが読み込まれた際自動的にボーンの情報が[References]に取得され、[Solver]を弄ることでボーンに対しアクションを行うことができます。

 今回の場合以下のように頭、腰、右腕、左腕、右足、左足の6点にスフィア(球)を配置し、それぞれ[VRIK]の[Solver]の対応する部位の[Targer]に配置することで球のPositionとRotationに連動してボーンが動くことができます。

 球を動かす点に関してはMRTKの[Two Hand Manipulatable]を使っています。

スフィア配置は上のようにしました。

最初に全体のポジションを移動させるためのマスタースフィアの子オブジェクトとして各スフィアとVRMRootが入っています。

以上でVRMモデルのランタイムロードポーズ付けアプリの完成です。



最後に

今日で2018年は終わります。

IT知識が全くなかった私がHoloRangerになって、来月で丸一年が立とうとしています。

それでも自分の想像したアプリをまだ想像通りではなくても作れるようになったり、それを発信できるのはコミュニティーや今この分を見てくれている方々のおかげです。

ありがとうございます。

そして我が師匠ガチ本さんはじめ、我が地元熊本のKumaMCNのコミュニティの方々

本当にありがとうございました。


良いお年を・・・