人間のあるべき姿の探索

思索・人形・エンジニアリング

アバタを一から作成して動かした

バーチャル空間で動かすアバタを一から作成したというお話.カワウソを作りました.

割と簡単に作成~アップロードまでできたので,手順とハマりポイントのまとめ.基本的にはこちらの記事を参考にしました.

note.com

こちらの記事はVRoidを使って人間を作成していて,デフォルトで人間の型が用意されているので,人間を動かしたい場合はそのまま記事内の手順に従えば良さそうですね.

今回は自分でモデルを作る場合の説明になります.

必要なソフトウェア

  • Cluster:アバタを動かすプラットフォームです.楽しい.
  • Unity Hub及びUnity:VR用のアバタに変換する際に使用.記事に従うと楽
  • UniVRM:Unityの変換用のアドオン.記事に従うと楽.
  • Blender:アバタの作成に使用.公式サイトから2.8(2020/07/03時点で最新)を入れておけば良さそうですね.

必要な技術

  • Blender:基本的な操作ができるとだいぶ変わります.僕はチュートリアル本を一通り写経した程度です.経験がない場合気合が必要です.*1
  • Unity:経験なしで問題ないです.

手順

  1. 形状を作る
  2. 色を塗る
  3. ボーンを設定する
  4. Unityで変換する
  5. Clusterにアップロードする

 

1. 形状を作る.

まずは動かしたいキャラクタの形状を作ります.Blenderモデリングをします.

f:id:godiva_frappuccino:20200703112211p:plain

概ねこんな感じの形にします.僕はBlenderの操作に慣れていないこともあり,UV Sphere(球体のメッシュ)を変形させてくっつけました.

ここで,3Dプリンタで使用したファイルやstlなどのファイル形式のものがあればファイルのImportからそのまま使えます.

僕はUV Sphereで頂点の数の少ないシンプルなものを作りましたが,Importしたファイルは頂点がめちゃくちゃ多かったりします.その場合Blenderで最適化して頂点を減らします.いくつか方法がありますが,とりあえず密になってる場合は距離でマージすれば良い感じになります.*2 

f:id:godiva_frappuccino:20200703113810p:plain

 

後々のことを考えて,上の画像みたいなT-Poseにしてあげてください.手を下げていると後々エラーを吐く可能性があります.

その他の留意点として,普通にUV Sphereを作ると原点中心に作成されますが,足元を原点にする必要があります.最初の画像だと足元に赤い線がありますが,その線がz=0の平面です.*3お腹を原点にして作成したらClusterで胴体が地面に埋まりました.

 

2.色を塗る

Blenderで色を塗ります.方法として,メッシュの各面に色を割り当てることもできますが,目や鼻などメッシュの形に沿わない模様をつけたくなることもあるので,TexturePaintってやつをやります.概要だけ説明するので詳細はググってください.

まず,体表を展開して一枚の画像にしますが,そのために切り取り線を設定します.(上手い方法が分からないので,)適当にお腹の外周の辺を一回り選択して右クリックでMark Seamすると赤線が表示されます.

その後,エディタのモードをUV Editingにして,Smart UV Projectを選択すると一枚の画像になります.

f:id:godiva_frappuccino:20200703113003p:plain

次に,エディタのモードをTexturePaintに変えて色を塗ります.ほぼペイントですね.これの便利な点として,左側を塗ると右側にリアルタイムに反映されますが,右側も直に塗ることができます.当然パソコンは暖房になり,Blenderが落ちるので,こまめに保存した方が良いです.ちなみに,画像をpngでダウンロードして,他のペイントソフトで塗ることができます.*4

f:id:godiva_frappuccino:20200703113822p:plain

色塗りが終わったらモデルに適用してあげます.プレビューだと見えていますが,適用されていないこともあるので,エディタをShadingにして下の図のようにノードをつなぎます.新しいマテリアルの作成をするとPrincipled BSDFとMaterial Outputはデフォルトで存在するので,Vector->Mapping, Texture->Image Texture, Input->TextureCoordinateを作成します.図のように繋いだらImage Textureの画像のところに先ほど作ったテクスチャを選択します.kawacolorって書いてある部分です.

f:id:godiva_frappuccino:20200703114404p:plain


3.ボーンを作る.

鬼門っぽい.Blenderの操作の慣れが必要になるのでしんどいです.VRoidだとすでに設定されているので楽ですが,ボーンの自作はなかなかしんどいです.オブジェクトの中にArmatureというのがあって,これがボーンになります.ひとまず下の図を完全に真似してください.名称も,NeckとかUpperArm.Lとか書いてありますが,これも一致している必要があります.(腕だけ見づらいのでアップにしました)

ほぼこれですね.

styly.cc

f:id:godiva_frappuccino:20200703115047p:plainf:id:godiva_frappuccino:20200703115156p:plain

これを作ったらObjectモードでアバタを選択して,その後Armatureも同時に選択してObject->Parent->With Automatic Weightsで関連付けします.そうするとボーンを動かすと胴体も一緒に動くようになります.

ここから調整です.自動的に関連付けされていますが,腕を動かすと腰がえぐれたり,足を上げると中身がはみ出したりするので調整します.基本的にはPoseモードで確認とWeightsPaintモードで調整を繰り返します.

f:id:godiva_frappuccino:20200703115809p:plain

各Armatureを選択して,グリグリ回してみます.Clusterで動かす分にはUpperLegとUpperArmとHeadが綺麗に動けば問題ないです.カワウソの頭が伸びていますが,僕は気にしていません.*5一応歩行する際に動きそうな軸は全て試した方が良いです.

調整はWeightsPaintです.各Armatureを選択すると,アバタが青〜赤に染まります.Armatureが動いた時に,青い部分は動かず,赤い部分は動きます.緑色とか黄色だとちょっとだけ動きます.

f:id:godiva_frappuccino:20200703120221p:plain

今は右足ですが,赤い部分,太腿の部分だけ動きます.Poseモードで腰がえぐれる場合は腰の部分も赤くなっているので,腰を青くします.同様に他の部位も直します.

 

ここまできたらアバタ自体は完成です.ファイルのExportから.fbx形式を選択して書き出したら,Unityを開きます.

 

4. Unityで変換する

基本的には先ほどの記事の通りなので,追ってください.

note.com

VRoidなら基本的に問題ないと思うのですが,自作した場合のハマりポイントを紹介します.

Humanoidに設定する際にエラーを吐くことがあります.Blenderで一度モデルとArmatureを関連付けしましたが,Unityで再度くっつけます.この時,何かしらの理由で関連付けをミスるとうまくくっついてくれないので自分で設定し直す必要があります.*6エラーを吐いたらそのままエラーメッセージをコピペすれば解決します.(調べていた記事を消失しました…以下,問題を再現できないので文字だけの説明です.問題が起こらなければ無視して良いです)

character is not in T poseの場合,キャラクタがTポーズになっていないだけなので,ConfigureからEnforce T poseでTポーズに直せばOKです.関連付けがうまくいっていない場合,その部位を個別に選択するだけで解決することもありますが,一応MappingをClear,ポーズをSample Bind-Poseに変更,その後MappingをAutoMapで設定して赤い部分の部位を設定し直し,Enforce T-Poseすると直ります.このあとがハマりポイントで,Configureの直後はApplyボタンが押せません.一度何か別の項目を変更してからApplyする必要があるみたいですが,適当にいじると今やった変更がリセットされます(辛い).Configureの少し下にあるOptimize Game Objectにチェックを入れてApplyするとうまくいくので,Applyできたらチェックを外してもう一度Applyするといった面倒な手順を踏んで解決しました.

 

最後に,手順は書いてありますが,.vrmを書き出します.

 

5. Clusterにアップロードする.

Clusterを開いたら,右上のタブからアバタのページを開いてアップロードを選択,作成した.vrmファイルを投げれば使用できるようになります.Clusterでワールドに入る際に毎回使用するアバタを聞かれるので,その時に選択すれば自作したアバタが動いてくれます.嬉しいね.

f:id:godiva_frappuccino:20200703123319p:plain

初対面の人にチョークで"カワウソカワイイ"って書いてもらいました.嬉しい.

 

ちなみに,アップロードした際にアバタに変な影がついてしまうことがありました.多分モデリングの仕方がよくないのですが,ひとまず解決する方法としてUnityの設定でMaterialのShadingを変える際にVRM/MToonからVRMの他のオプションに変えると影が無くなったりします.この辺りはいろいろ試したいですね.

余談

カワウソの尻尾を実装し忘れました. 

 

 

 

*1:基本的にはBlender モデリングとかでググることになります

*2:細かい部分などは頂点が消えたり形状がフラットになってしまうことまり,良い感じにならないこともある

*3:正面から見ているのでy軸の線が表示されていません

*4:あとでアップロードして適用する必要がありますね…

*5:Clusterに萌軸は実装されていないみたいなので…

*6:多分Armatureの形が良くないとか,その辺りかなと思います