気づけばツール漬け

3D,2Dのツールを色々使ってみた記録を書いていきたいです。

「冂と亠で円」制作メモ 3Dモデルについて

f:id:mi-zmix:20190415211206p:plain

第11回ぷちコン応募作の「冂と亠で円」(これとこれでえん)の制作メモ、5つ目は3Dモデルについてです。これで最後です。UE4の内容はありません。
3Dモデルは、MagicaVoxel > MODO > 3Dcoat > MODO> Akeytsu という順で作業したので、それぞれ何をしたか書いていきたいと思います。各ツールの詳しい使い方は割愛します。

前回の記事はこちら

「冂と亠で円」制作メモ 企画について -

「冂と亠で円」制作メモ プレイヤーについて -

「冂と亠で円」制作メモ 敵について -

「冂と亠で円」制作メモ ミニマップについて -

 

MagicaVoxelの作業

漢字のモデルは、MagicaVoxelで下書きのイメージで作りました。

テキストをカーブにしてメッシュに変換する方法は、ムダにハイポリ状態を経由するので避けました。また文字によって微妙に線の太さや角の処理が変わるので、そのあたりも合わせるのが面倒になると思いました。

■に近いシルエットで、長さや太さを簡単に共有できるので、MagicaVoxelのほうがはるかに早いだろうと判断しました。

奥行きは3ボクセル分。縦横は16ドットをイメージし、あとはその中に合わせていきました。「円」の形ができてしまえば、ほとんど使いまわしでできちゃいます。ボクセルを削除したり積んだりしてるだけで、ポリゴン面が自動的に削除されたり、フィルされたりするので、とても早くモデリングできます。

モデルをエキスポートする時、色の境目に頂点が作られるので、わざと色分けして作りました。(頂点がほしいだけなので、別の色になっていれば何色でも良い)

f:id:mi-zmix:20190414174225p:plain

色を塗りつぶすときは、フェイス単位で塗っていくのではなく、BoxモードのPaintで一気に囲むように塗らないと、モデルをエキスポートした時に内側に変なポリゴンができちゃう事があります。下図の様に塗りつぶすのが良いです。

f:id:mi-zmix:20190414175009g:plain
下図の状態が、塗りつぶしに失敗した例です(ポリゴン反転表示してます)。内側のカドに存在する1個分のボクセルは、元あった色として残ってしまった結果です。削除すればいいだけなのですが、それなりに手間がかかります。

f:id:mi-zmix:20190414175530p:plain

ひととおりキャラ分のモデルをつくったら、OBJファイルで書き出してMODOで読み込みました。 

MODOの作業

MagicaVoxelで作った文字をMOODにインポートして整理しました。
まず、MagicaVoxelからのモデルをインポートしたばかりの状態では、各頂点やエッジが結合してないので(全部ばらばら)、メッシュクリーンナップなど使って、重なった位置にある頂点を結合します。それでもくっついてない頂点などがあったら仕方ないので手作業で直します。

Voxelでは、アタリとなる簡単な頂点がほしかっただけなので、エッジ減らしたり頂点動かして調整しました。図のエッジを削除して、斜めにつないでバランス整えたりしました。

f:id:mi-zmix:20190414180524p:plain

こんな感じに調整しました。

f:id:mi-zmix:20190414190448p:plain

敵キャラとして動かすので、外枠の「冂」を抜き取った形も作成しました。

それぞれ調整が終わったら、別のOBJファイルで書き出して、今度は3Dcoatの作業です。

3Dcoatの作業

3DcoatUV展開のためだけに使いました。ですが、結局テクスチャは貼ってないので、UVもあまり意味がありませんでした。なんという贅沢。MagicaVoxelが書き出すUVは、他のDCCツールで選択や編集ができなかったので(Maya,MODOで確認)捨ててしまいます。

3Dcoatなら、ボタンを3,4回押すだけで、かなり良い感じのUV展開をしてくれるので、とても助かりました。1体1~2分程度で終わります。(まっすぐなエッジが多いモデルだったので、美少女キャラモデルとかには当てはまらない場合があります)


UV展開用のモデルとしてOBJファイルを読み込んでインポート設定します。3Dcoatはテクスチャペイント機能もあるので、UV展開したあとペイントするなら、テクスチャの幅と高さを設定しましょう。2の冪乗の正方形にしておけば大丈夫です。(テクスチャのペイントをしない場合でも、サイズを正方形に設定しておきましょう)

f:id:mi-zmix:20190414182346p:plain

展開の手順は以下のとおりです。最も楽と思っている方法です。(他にも多数の選択肢や機能があります)
まず自動シームで、モデルにUVのシーム(切れ目)をつけます。(手動でもつけられます)

f:id:mi-zmix:20190414183504p:plain
UV展開します。

f:id:mi-zmix:20190414183544p:plain
UVをパックを選択します。(パック2もあります。パックの方法が違います)

f:id:mi-zmix:20190414184959p:plain
UVセットを適用を選択します。これでモデルのUVが決定します。

f:id:mi-zmix:20190414184107p:plain
パックボタンを押すたびに並び方は変わったりしますが、おおむねいい感じの隙間を開けて配置してくれました。隙間多めかもしれないですが、下手にポリゴンを拡大縮小して詰め込まれるよりましです。

f:id:mi-zmix:20190414185208p:plain

3DcoatでUV展開したものを、ファイルメニューのエキスポートからOBJファイルで書き出して、MODOへインポートしなおし、スケール等調整してFBXで書き出しました。次はAkeytsuでリギングとアニメーションです。

Akeytsuの作業

MODOから書き出したFBXAkeytsuにインポートして、骨入れとアニメーション作成をしました。
Akeytsuは、スキニング、リギングおよびアニメーション作成に特化したソフトウェアです。この分野を専門にしたソフトは少ないので特殊な存在です。独特な操作が多いですが、全体がシンプルです。

この記事では使い方はあまり書かず、何をしたかを書いていきます。

リギングパート

キャラクターバンクでキャラを作り、ジョイントを配置してスキニングします。Akeytsuの場合は、半分だけ配置して反対側はとりあえずほっとくのがお作法です。
「冂」と「円」は、すこしぐにゃっと動かすためにエッジを足しました。

f:id:mi-zmix:20190415225028p:plain

ローポリにしたので、ウェイト調整も楽です。ほとんど、0,0.5、1.0という値しか設定しませんでした。これも半分だけで良いのでスピーディーです。Akeytsuのウェイト値は0~1の間で設定し、複数のジョイント間で合計1になるように必ず正規化されます。ウェイト調整がおわったら「ミラーリング」して反対側を作りました。スキンウェイトも同時にミラーされます。

f:id:mi-zmix:20190415225457p:plain

反対側のジョイントもできたなら、必要なところにIKを設定します。人型の場合は、「リバースフット(RF)」という足首やつま先の制御に便利な方法も設定可能ですが、人型ではないのでこのキャラクターでは見送ってIKを設定しました。IKノードは円形をしていて、白い状態はFKの動きになります。右クリックすると赤くなりIKとして動きます。IKとFKはキーフレーム毎に自由に切り替え可能です。

f:id:mi-zmix:20190415225657p:plain
Akeytsuは、「レフポーズ」という機能によって、アイドリングの1フレーム目を全てのアニメーションで共有できます。これは、スキン&チェックモードで作成できます。大幅な時間短縮につながるので作っておきます。軽く膝?を曲げた感じで作りました。タイトル画面で屈伸してるやつです。

f:id:mi-zmix:20190415230809p:plain

アニメーションパート

アニムバンクでアニメーションを登録すると、先に作成しておいたレフポーズが0フレーム目に入って、すでにキーが打たれた状態になります。ここからスタートして必要なキーとポーズを作成し、キーの間隔を調整したりしてアニメーションにしていきます。

f:id:mi-zmix:20190415231321p:plain
Akeytsuの「ループキー」の機能により、1フレーム目と最終フレームが自動的に同じポーズになります。このため、間に作るポーズとタイミングだけ気にすればよくなります。

f:id:mi-zmix:20190415231651p:plain

レフポーズを使わずにアニメーションを作成することもできます。ループキーによって、歩きや走りなども問題なく作成できます。 ※少し問題ありです。
※「レフポーズ」について追記。
レフポーズはアイドリングの1フレーム目として使えるのですが、左右対象のポーズにしておかないと、アニメーションの作成や修正時に苦労しました。
ミラーリングや、サイクルアニメーション機能を使う場合、左右非対称のレフポーズだとおかしな変形をすることがあります。今回の作業では、たまたま左右対称のポーズだったので、問題が出なかっただけでした。
「レフポーズは左右対称にする。または、アイドリングの0フレーム目をコピーする」
という方法が安全だと思います。

f:id:mi-zmix:20190416220407g:plain

AkeytsuはポーズToポーズという方法でアニメーションを作成していきます。ジョイント一つ一つに個別のキーフレームは設定できず、キーフレームを作ったら必ず全部のジョイントにキーが入ります。この特徴(制限とも言えそう)は他のDCCツールと違うので戸惑う部分にになると思います。
アニメーションを一通り作りUE4で使う準備ができたら、AkeytsuFBXにエキスポートします。
アニメーション作成時に
IKのノードを追加していますが、Akeytsuでエキスポートしたときは、アニメーションは各ジョイントにベイク(これは設定で変えられる)されて、IKノードは自動的に削除されます。気にしないでエキスポートして大丈夫です。

スキンメッシュのウェイトコピー(骨の使い回し)

主人公メッシュを置き換える(増やす)作業もAkeytsuでできました。Akeytsu使って良かったポイントでした。

簡単に手順を解説します。

・リギングパートに入り、スキン&チェックモードにします。SKIN ATELIER(スキンアトリエ)は、このモードでアクティブになります。
・既存のキャラクターをコピーして増やします。こちらは移し替える先になります。(以下、デスティネーションと呼びます)
TREEパネルで右クリックからデュプリケートを選択です。

f:id:mi-zmix:20190416201636p:plain

・入れ替える予定のメッシュを、FBXでインポートします。例として「肉」メッシュをインポートしました。TREEパネル内の青い■箱アイコンが新しいメッシュです。まだどのキャラクターにも関連づいてません。

f:id:mi-zmix:20190416201748p:plain

・デスティネーション側のスキンメッシュを削除してジョイントの階層だけにします。スキンメッシュは黄色い皮ぽいアイコンになってます。
・インポートしたメッシュと、デスティネーション側のスケルトンをバインドします。このバインドはきっちりやらなくても大丈夫。スキンメッシュにする必要があるので、仮でバインドしておきます。
「肉」メッシュが、スキンメッシュになりました。

f:id:mi-zmix:20190416202159p:plain
・元にするキャラクター(以下、ソースと呼びます)を選択します。
・ソースのスキンメッシュの頂点を全選択します。頂点の選択は、SHIFTキーを押しながらドラッグします。

f:id:mi-zmix:20190416202405g:plain

選択しているキャラクターに含まれるメッシュの頂点しか反応しないので大丈夫。大雑把に全部囲めばOKです。
f:id:mi-zmix:20190416202124p:plain

このときSKIN ATELIER にある全頂点選択をONにしておくと、裏側にある頂点も楽に選択できます。

f:id:mi-zmix:20190417215805p:plain
・頂点を全選択したら、スキンアトリエ内のコピーアイコンをクリック。(Alt+cとAlt+vという特殊なショートカットです

f:id:mi-zmix:20190417220317p:plain

頂点が青くなると、コピーされた状態です。
f:id:mi-zmix:20190416202747p:plain
・次は、デスティネーション側のキャラクターを選び、これもメッシュの頂点を全選択します。選択しているキャラクターの頂点しか反応しないので大丈夫です。すでに選択済みのソース側の頂点は選択解除になったりしないので(これがすごく便利)気にせず囲みましょう。
ソースとデスティネーションの両方の頂点を全選択できました。お互い頂点の数が全然違いますが大丈夫です。

f:id:mi-zmix:20190416203102p:plain

・デスティネーション側を選択したら、スキンアトリエのペーストボタンをクリック。コピーアイコンの隣にあります。

f:id:mi-zmix:20190417220407p:plain

・これで、ソース側のスキンメッシュのウェイトが、デスティネーション側のスキンメッシュへコピーされました。ソースのキャラクターを非表示にして確認します。

f:id:mi-zmix:20190416203401p:plain
以上で終わりです。
このスキンウェイトのコピペは、アニメーションがすでに存在しているスケルトンに対して行っても大丈夫です。コピペができたら、アニメーションもそのまま動きます。
例に出した「肉」メッシュの場合、内側に対応するジョイントが何もないので、両膝に頂点が引っ張られています。ジョイントが無い部分の頂点のウェイトは、近くのジョイントからの距離によって補間されます。
頂点がほぼ同じだった、「冂」と「円」は難なくコピペできました。
「スキニング後だけど、メッシュを更新しちゃいました」という状況はよくあると思いますが、ジョイントの位置や数、頂点数がほぼ一緒なら、問題なく入れ替えができると思います。

f:id:mi-zmix:20190416221436g:plain
ジョイントがずれているのは、今回のメッシュでは意図通りなのですが、Akeytsuはジョイントの位置をバインド後からでも自由に変えることができます。アニメーション付きのジョイントでも、位置の変更は可能です(ただし変更前と全く同じ動きになりません)。

UE4へインポート

オリジナルのモデルなので、Akeytsuからのスケルタルメッシュはなんなくインポートできました。プレイヤーキャラは、複数あるメッシュで骨を使い回すので、最初の一体だけ骨ごとインポートして、残りはインポート済みのやつを指定してインポートします。
Akeytsuのアニムバンクで設定したアニメーションは、各アニメーションファイルとして自動的に分離されます。敵は骨がそれぞれ違うので、骨ごとインポートしました。

おわりに

毎度ぷちコンは勉強になっているのですが、今回のは不具合対応で勉強になったと思います。過去のは「なんで動かないん?」というのが多かったのですが、今回は「動いてるけど、このままにはできない、どうしよう?」というのが多かった感じです。
学び楽しい。