BlenderとUnityで作ったものをVR(Meta Quest/Oculus Link)で動かします

ブログの女の子を作る #61 頭を小さくして頭身を上げる【Blender,Unity】

 
 
Oculus Linkを使ってキャラクターを見ていると、背が低すぎるのと頭が少し大きい気がしました。
イラストなど正面から見る分には良いのですが、VRで見る時はかなり近い位置から見るので、頭の大きさが強調されるようです。
 
今回の記事では、頭を小さくして頭身を少し上げてみます。前回の記事で頭のオブジェクトを分離したのでちょうど良いですね。
 
いろいろ試してますが、結局はBlenderでのスケール修正はやめて、Unity側での設定のみになりました。難しい。。。



開発環境

・Blender 2.90.1
・Unity 2019.4.15f1
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Meta Quest 2(Oculus Link利用)
 

(1) まずはUnityで試してみる

Blender側でサイズを変更する前に、まずはUnity側で変更してどんな感じに見えるのかを確認しておきます。
 

別のキャラと比べてみる

他の記事でも使わせていただいている「アリシア・ソリッド(ニコニ立体ちゃん)」を横に並べてみます。
比べてみると、かなり小さいですね。。。
 
以前の記事で頭を小さくするために、Blenderからエクスポートする際のスケールを0.9倍にしてるからなんですが、それでも小さすぎる。
 
頭一個分くらい大きくしたい。
 

足を1.25倍してみる

とりあえず、足を長くしてみましょう。
 
このキャラの場合、「UpperLeg_L」と「UpperLeg_R」のスケール(Y軸のみ)を1.25倍ですね。
 
かなり背が伸びました。単純に足を長くしてるだけなので、足が細すぎる感はありますが。
 
上から見た感じは、アリシア・ソリッドとほぼ同じ高さ。
身長はこれくらいを目標にします。
 

頭も小さくしてみる

まだ頭の大きさは変わってませんので、少し小さくしてみます。
 
まずは普通の状態です。
 
Neck」のスケールをすべて 0.95 にしてみます。
 
0.9 ならこれくらい。
一割程度であれば、元のサイズから小さくしても問題無さそうです。
 


(2) Blenderで足と頭を小さくしてみる

スケール感が分かりましたので、実際にBlenderで3Dモデルのスケールを小さくしてみます。
 

足のスケールを1.2倍にする

修正前の状態です。
 
ポーズモード」に変更して、
 
足部分のボーンを選択して、
 
スケールを 1.2 に変更します。
足が伸びましたね。
 

頭のスケールを0.95倍にする

同じ要領で、頭のボーンを選択してスケールを変更していきます。
 
まずは元のサイズです。
 
スケールを 0.95倍 にしてみました。
 
以前より頭身が上がりましたね。
 
保存してFBXファイルにエクスポートしておきます。
 

Unityにインポートすると地面を突き抜ける

修正前の状態です。
 
新しいFBXファイルをインポートしてみると、何かがおかしい。
身長が変わっていないと思ったら、足部分が地面を突き抜けてました。
 

(3) Blenderで再調整する

Blender側の設定が何か足りなかったようです。
 

Blenderで調整してみる

足を伸ばした時に気になってたんですが、靴部分が軸の原点?より下にありますね。
これのせいで、地面を突き抜けてるようです。
 
すべてのボーンを選択して、キャラクター全体を上方向に移動してみます。
この操作が正しいか分かりませんが。。。
 

Unityで確認してみる

再度、Unityにインポートしてみて動作を確認します。
 
修正前の状態です。
 
FBXファイルをインポートすると、今度は地面を突き抜けません!
 
これで大丈夫と思ってましたが、PlayボタンでUnityを動かしてみると、やはり地面を突き抜けてしまいました。
うーん、わからん。
 

足の形もおかしくなった

いろいろ試していると、足の形もおかしくインポートされてることに気づきました。
 
靴の位置がずれてるのは置いておくとして、足の形がかなり変ですね。
 
PlayボタンでUnityを動かすと直る?ようなのですが、おかしい状態になってるのは間違いなさそう。
 
このキャラクターは普通のPrefabでなく「Prefab Variants」を使ってます。なんとなくですが、これが影響を与えてる気がします。
 


(4) Blenderで頭だけ小さくする

Prefab Variantsを解除するのも大変なので、足をBlenderで伸ばすのはあきらめることにしました。
 
次の案として、「頭だけならできるかも?」ということで試してみました。
 

再度Unityで試す

再度、Unity側でスケールを変更してみて、どんな感じに見えるかを確認しておきます。
 
まずは、Blenderからエクスポートする時のスケールが 0.9 の場合です。
これまでのデフォルト状態ですね。
 
これを 1.0 でエクスポートし直してみます。
元のサイズに戻りました。が、なんか一割以上大きくなってるような。。。そういうもんですかね。
気にせず、この状態で頭を小さくしてみましょう。
 
まずは元のサイズの場合。
 
Neck」のスケールを 0.9 にしてみました。
 
これくらいなら問題無さそうですね。今回は足は伸ばしてないので、足が細すぎるということもありません。
 

頭のスケールを0.9倍する

Blender側で、実際にスケールを変更してみましょう。
 
こんな感じになりました。
 

追加で設定が必要でした

今回は頭だけとは言え、同じ操作をするだけでは失敗しそうだったのでネットで調べてみると、追加で設定が必要なことが分かりました。
 
こちらのサイトを参考にさせていただきました。
ありがとうございました!
 

設定1:アーマチュアを適用する

ポーズモードでボーンのスケールを変更するのは合っていたようですが、その後でアーマチュア」モディファイアーを適用する必要があるらしい。
 
今回の場合は、「」オブジェクトとかですね。
各種アイコンの右側にある「下三角マーク」をクリックして、「適用」を実行します。
 
すると、「モディファイアーはシェイプキーのあるメッシュには適用できません」というエラーが出ました。
確かに顔オブジェクトにはまばたきや表情を作るためのシェイプキーを設定してますが。。。
 
シェイプキーを消して、アーマチュアを適用して、再度シェイプキーを作り直す」のはかなり大変なので、ネットで調べてみると、シェイプキーがあってもモディファイアーが適用できるようになる「Apply Modifier」という素晴らしいアドオンを見つけました。
 
早速インストールしてみます。
 
顔オブジェクトを選択した状態で、「オブジェクト -> 適用 -> Apply Selected Modifier」をクリックします。
 
アーマチュア」にチェックを入れ、OKボタンをクリックします。
 
適用できたようなので、頭にある他のオブジェクトも同様に適用しておきます。
 

設定2:レストポーズを再設定

次に、「現在の状態(ボーンのスケールを変更した状態)」をデフォルト状態にするために、ポーズモードで「ポーズ -> 適用 -> レストポーズとして適用」を実行します。
 

設定3:アーマチュアを再設定する

最後の設定として、「アーマチュア」モディファイアーを追加しておきます。
 
他のオブジェクトにも追加しておきます。
これで大丈夫なはず。
 

Unityで確認するが顔が怖い

FBXファイルをエクスポートして、Unityにインポートしていきます。
 
修正前の状態です。
 
FBXファイルをインポートし直すと、顔が怖い!!
目のサイズがおかしいようです。
 
ツインテール部分を見てみると、オブジェクト間で隙間が空いてました。
Blender側では問題無くスケール変更できてたんですけどね。。。
 

別の方法でインポートしてみる

ちょっと前に試した時に「Prefab Variantsが影響してるかも」がありましたので、3Dモデルをインポートする方法を変えて見ることにしました。
 
左から、
1. FBXのファイル名を変更して別モデルとしてインポート(色がおかしいのはシェーダー未設定のため)
2. Prefabとしてインポート
3. Prefab Variantsとしてインポート(これまでの方法)
です。
インポート直後の状態では、1と2は問題無さそう。
 
ですが、UnityをPlayボタンで動かしてみると、どの設定でも同じ現象が起きてしまいました。
ガチで怖い。。。
 

(5) Unityで頭だけ小さくする

怖いながらもいろいろ試してみましたが、うまく行きませんでした。他のサイトを見ても基本的なやり方は同じでしたので、今の環境で使ってる何かが影響してるのでしょうね。
 
とりあえず今回の記事ではBlenderでのスケール修正はあきらめました。
最終手段として、Unityだけでスケール変更する方法にします。
 

Unityのみで顔を0.9倍にする

Unityでスケール変更しますので、Blender側ではスケールを1.00でエクスポートしておきます。
 
FBXファイルをインポートしました。通常の状態ですね。
 
Neck」のスケールを 0.9 に変更します。
 
これまでは「Unity側で見た目を確認するだけ」でしたが、今後はこれがデフォルトの状態になります。
 
これで変更作業は完了です。Unityだけならとても簡単ですね。
 

髪の毛が小さくならない?

この状態でUnityを動かしてみると、何か違和感があります。
前髪が伸びた?
 
分かりやすくするために、検証用に顔のサイズを極端に小さくしてみました。
すごいマッシブですが。
 
動かしてみました。
髪の毛が伸びたのではなく、実行時にスケールが変わってないのが原因ですね。
 

Magica Clothの再設定が必要でした

調査したところ、Magica Clothの再設定が必要だったことが分かりました。設定し直さないと以前の頂点情報を保持したままなので、おかしくなるのは納得ですね。
 
MagicaVirtualDeformer」コンポーネントで「Create」ボタンをクリックします。
VertexやLineなどの数値が変わったので、スケール変更後の状態が反映できたようです。
 
MagicaMeshCloth」コンポーネントでも同じく、「Create」ボタンをクリックしておきましょう。
 
この状態でUnityを動かして見ると、髪の毛のスケールが正しく適用されることが確認できました!
良かった。。。
これでできなければ、頭身変更をあきらめるところでした。
 

元のサイズでやっておく

修正方法が分かりましたので、スケールサイズを元に戻して、Magica Clothを再設定しておきます。
 
これで解決です!
 

スケールサイズを微調整する

真正面から確認してみましょう。
 
もう少し全身を大きくして、顔を小さくしても良さそうです。
 
全身を1.05倍、頭を「0.9→0.85倍」に変更してみました。
これで良いでしょう。
 

動画で確認してみる

画像だけでは分かりにくいので、実際にVRモード(Oculus Link)で確認してみました。
 
キャラクターの少し上から見てみると、身長や頭の大きさが良く分かります。
VRで見る時はこれくらいの頭身が良いですね。
 


まとめ 

VRで見た時に頭が少し大きい気がしましたので、頭を小さくして頭身を上げてみました。
 
本当はBlenderだけで完結したかったのですが、うまく行かなかったのでUnityで設定することになりました。
とはいえ、この方法なら気軽に頭身を変更できるメリットはありますね。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

ブログの女の子を作る #60 頭と体のオブジェクトを分離する【Blender,Unity】

ブログの女の子を作る #62 UnityのHDRPをVRで試してみる【Unity】


最近のコメント

だーしゅ
IT関係のお仕事してます。
3Dモデルの女の子は「ブログノ・スージー」。VRは楽しいですね。

[当ブログについて]