妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

VRoid -> Blender -> AutoRig Proで動かせるようにする実験

確認したバージョン
Blender 2.79
AutoRig Pro3.40

blendermarket.com

「SubstancePainterで材質の件はいいとして、どうやって動かすのかという問題が未解決。そこでBlenderのAutoRig Proというアドオンを購入」

妹「そういうのもう買ってなかったっけ?」

「AllRight Rigは、動かせる状態のキャラクターをUE4上で動かすやつだから。動かせるようにするのに使う」

妹「名前が紛らわしい……」

「この手のプラグインはRigって名前に付いてるの多いから。これはBlenderからUE4という流れを想定したプラグインだから、鬼門になってるFBXのやりとりもスムーズにできるという利点もある。ゲームエンジン対応はComplete版じゃないと駄目だけど」

f:id:una_unagi:20181207231516p:plain
MakeHumanのキャラ。関節の位置などをマーカーで指定

f:id:una_unagi:20181207231549p:plain
指以外は問題ないんだけど

「とりあえずなんでもいいから骨入れたいなということで、まず思いついたのがMakeHuman。標準のボーンはあるけど、AutoRigProで設定できれば、データを加工した後に骨の入れ直しが出来るなあと。でも指の認識が上手くできず……」

妹「指の認識?」

「関節の位置を設定していくと、手首の先にあるポリゴンを指だと認識してくれる。手動で直せばいいんだけど、この指のとこにボーンを入れるのが大嫌いだからAutoRig Proを買ってるわけで、こんなぐちゃぐちゃになったら意味がない。MakeHumanの標準ポーズだと、手のひらが下を向いてなかったり、指を閉じてたり、あんまり認識しやすいモデルじゃなかった」

imoue.hatenablog.com
前回VRoidのキャラを読み込んだ時の

github.com
このアドオンを使う

「そこでVRoidのモデルを使ってみることにした。Blenderに読み込むところまでは前回と一緒。手が下を向くように、VRoid上でTポーズに設定してからエクスポート。マテリアルはやっぱりちょっとおかしいけど、そのへんは今回目をつぶる。ボーンは上手く読み込めてないっぽい状態で入ってるから、いったん消してメッシュだけ残す」

http://www.lucky3d.fr/auto-rig-pro/doc/auto_rig.html
マニュアルが英語なので、なんとなく雰囲気でやる

youtu.be

「Smartモードを使うと、関節の位置をアバウトに設定するだけで、全身の骨が入るという、まあなんというか、Mixamoのやつみたいなモードなんだけど。首、顎、肩、手首など、指示にしたがって関節の位置を調節していく。関節ってどのへんだろ? みたいなのは、動画を見るとわかる」

f:id:una_unagi:20181207233437p:plain

youtu.be

「その時選択中のオブジェクトだけが表示されて、関節の認識にもその部分を使う。だから細かいパーツとかは選択しない方が骨がスッキリ入りそうな気がする。あと今回スカートだったんで、ワンピースがじゃまで股関節の位置がわからなくなる。なので服も別オブジェクトにして、Smartモードの途中では表示しない方が簡単だった」

f:id:una_unagi:20181207232755p:plain

「問題だった指は問題なし。VRoidのもそんなに指開いてないんだけど、これぐらいスキマがあれば大丈夫なのかなあと。自作モデルを作る時の参考用に」

妹「なんでスキマが要るの? ポリゴンは分かれてるわけだし」

「どうもポリゴンの流れじゃなくて、ボクセル的な判定で、手首の先に指っぽいかたまりがあるかどうかって判定になってるみたい。ポリゴンの流れとは関係ないから、指輪とか爪とか別オブジェクトになってても、指同士にスキマがあれば大丈夫なんじゃないかと思う」

f:id:una_unagi:20181207234339p:plain

「骨がズレてたら適当に調整してから、リグで操作できるようにする。この手順は、Blender上でアニメーションを作らないんだったら不要かもしれない」

f:id:una_unagi:20181207234739p:plain
バインドする

「骨や関節の位置が決まったので、それに連動してオブジェクトが動くようにバインドするという処理がある。これをやらないと、いくらリグを動かしてもオブジェクトが反応しない」

f:id:una_unagi:20181207234542p:plain
どうにか動くようになったけど……

「バインドまでうまくいくと、リグをポーズモードで動かしたら、それにあわせてメッシュも変形するようになる。ただ、ここが実はよくわかってないところなんだけど、バインドの処理にすごく時間がかかる。服だけならすぐ終わったんだけど、胴体には30分ぐらいかかった。フリーズしたかと思ってた」

妹「30分……なかなかつらい気が」

「PCの性能でも違うだろうと思うけど。髪の毛のバインドに至っては、3時間待っても終わらなかったから諦めた」

妹「そういうものなの?」

「それはわからないけど。ポリゴン数が多いと遅くなるっていうのはありそう。ただポリゴン数だけでは説明がつかない。ポリゴン数削減してボディと同じぐらいにした状態でも時間変わらなかったから。Blender2.8でも実験しようとしたけど、こっちはまだAutoRigProのSmartモードに対応してないみたいだったので断念。また何か手を思いついたら再開するけど、現時点ではここまで。VRoidじゃなくて自作モデルだったら問題なさそうだし」

Interior ToolkitにSubstancePainterで着色する

f:id:una_unagi:20181204005536p:plain
Interior Toolkit(Demonstration_Map)

UE4マーケットプレイスで無料アセットのラインナップが、12月になったから更新されてたんで、そのうちの1つ Interior Toolkit というのを眺めてみる。名前の通りインテリアのアセットで、ベッドとかタンスとかのスタティックメッシュが入ってる。それを適当に配置して部屋を作るというやつで、サンプルのマップデータも付いてる」

妹「なんか前回の変なグレーマンがいるような」

「同じプロジェクトで試したらそのままだった……それはそれとして、今回もSubstancePainterの実験をする」

imoue.hatenablog.com

「同じような手順で、今回はスタティックメッシュのカーテンの色を変えてみようかと」

f:id:una_unagi:20181204010716p:plain

「元々はこういう白いカーテン。真っ白ではなくて、生地の模様というか、布っぽいマテリアルになってるんだけど」

f:id:una_unagi:20181204011516p:plain
SubstancePainterに送って、適当なテクスチャを貼り付け

f:id:una_unagi:20181204011645p:plain
さらに変更

「このように、適当なマテリアルで塗りつぶすとカーテンの材質が変わる。この部屋は明るめのライティングになってるから、SubstancePainterの表示より明るい。材質を色々用意しておけば数分で塗りかえできる。UVマッピングが変だと面倒なことになるけど」

妹「絵も描けるんだよね?」

「できるよ。落書きしたり、金の縁取りをつけたり。単純に色を変えるだけならマテリアル側の調整でもいいと思う。今はSubstancePainterの実験も兼ねてるからあれだけど。もっと沢山材質を準備しておけば、色々と融通が効きそう」

SubstancePainterでUE4のグレーマンを塗り変える

f:id:una_unagi:20181129225354p:plain
変色したグレーマン

「今日は、先日のブラックフライデーで買ったSubstancePainterというもの使って、グレーマンを塗り変える実験をしている」

妹「また無駄づかいしてる……」

「使いこなせるかどうかは別にして、なかなかハイテクなやつなのは間違いない。今回の実験でもそのポテンシャルの高さがわかる」

妹「あんまりいい感じに塗れてるとはいいがたいような」

「問題はそこじゃなくて、グレーマンをエクスポートして、塗って、インポートして……みたいなことをやらなくていいというところが、まず凄い」

手順

1. Substance in UE4 というプラグインをインストール(マーケットプレイス・無料)

2. プロジェクトのPluginsの設定で、さっきのプラグインをEnabledにする

3. SubstancePainterを起動(体験版でも可能)

4. コンテンツブラウザから、グレーマンのスケルタルメッシュを右クリックして、"Send To SubstancePainter"をクリック
f:id:una_unagi:20181129225942p:plain

5. こういうエラーメッセージがでる
(自作アセット以外だとこうなるみたい。今回はOKを押せばとりあえず動いた)
f:id:una_unagi:20181129230411p:plain

6. 設定もとりあえず標準のままで
f:id:una_unagi:20181129230400p:plain

7.SubstancePainter側にグレーマンのモデルデータが出現

f:id:una_unagi:20181129230523p:plain
UE4とSubstancePainterの同時起動中

「こういう手順でできるんだけど、途中でファイルに保存して、読み込んで……という作業がない。そして塗ったら2、3秒でUE4側にも反映される。だから別のソフトというか、同じソフトの色塗り画面みたいにして使える。こういう連動のことをLive Linkというらしいけど」

妹「見た目も同じかんじだね」

「光の当たり具合とかで変わってくるけど、色があって、ラフネスやメタリックがあって、法線マップがあってという、基本的な原理は同じだからだいたい同じ表示になる。普通は塗り終わってからUE4にインポートするんだろうけど、その後でやっぱり塗り直したくなるってこともあるわけで。実際にゲーム中の表示を見ながら塗れるのは便利」

f:id:una_unagi:20181129231439p:plain

「そして不思議なのが、いったん塗り終わってSubstancePainterを閉じた後、もう一回4.の手順からやると、前に塗った時にSubstancePainter側に作ったレイヤが残ってるという」

妹「レイヤを作ったんだったら、あるのが普通じゃないの?」

「たしかにそうなってて欲しいけど、こういう場合普通は色とかメタリックとか、それぞれのテクスチャは1枚になる。実際コンテンツブラウザで見ると1枚にまとまってるように見えてるし。たぶんどこかに隠しデータがあって、UE4的には1枚のテクスチャとして扱えるようにして、元のデータもどっか別の場所に残ってるんじゃないかと思うんだけど。とりあえず元のデータ構造が残ってるというのはとても助かる」

妹「これはグレーマン以外のも塗れるんだよね?」

「塗れるけど、事前にUVマップが設定されてないメッシュは塗れないということで、デフォルトのキューブとかでは駄目だった」