UnrealEngine4でアニメ制作過程録1

自主制作でちまちま作っていたアニメーションの素材が結構貯まってきたのでこれまでにやってきたことを振り返っていこうかなと思いブログを開設しました。

ちなみに現状こんな感じ。女子高生姉妹の日常ショートアニメを目指しております。

そもそも始めはアニメを作るつもりは全くなく、モデリングの練習のために作っていた車が完成しかけた段階で

「車だけでは味気ないなぁ…」

↓背景作る

「人がいない背景ってなんだかなぁ…」

↓キャラクター作る

「せっかくだし動かしたいかも…」

って感じで全て行き当たりばったりで雪だるま方式にやることが増えていった感じです。人間性が出ています。

 

加えて、キャラモデリングやそれに係るリギング等のセットアップ、モーション、カットシーンの知識はほとんど0だったため、めちゃくちゃ失敗しました。そのあたりのことも書こうと思うので参考になる人が少しでもいれば幸いです。

一番初めに作った車。橋の上からでは全然映らずもっと簡素でよかった…

背景

序盤に取り掛かった背景の制作過程ですがこれに関しては特に言及することはないかもしれません。ラフモデルを置いて簡素なテクスチャ貼って何となくの雰囲気が掴めたくらいでキャラが欲しいなと思ったので、キャラの配置場所を決めてその近くのアセットを作っていく感じです。下の画像を見てもらえれば分かると思いますがラフモデルやテクスチャが貼られていないものがあります。これは後々対処します。多分…

基本アセット7~8割は自作で賄いましたが道路のマテリアルや損傷や汚れのデカールはMegascans、植物や遠景の建物の他、一部プロップ類、車、天候はマーケットプレイスの物を使いました。天候アセットのUltradynamicsは有料ですが買って損はないと思います。デフォルメ強めの雰囲気にするのが得意なアセットです。

 

キャラモデリング~セットアップ

背景の次に取り組んだのがキャラクターのアセットの作成です。ゲームアセットと違って最適化する必要はないなと思ったのでポリゴン数はそこまで気にせず作業を進めていたのですがそうするとスキンウェイト作業で痛い目をみるので、見えない箇所などの必要のないポリゴンは消すべきです。まあ、当然でしょうが。

キャラをモデリングする前にこのスライドは絶対見ておいた方がいいです。

www.slideshare.net

www.slideshare.net

人体の比率やボーンの適切な配置箇所といった情報を私のようにキャラクターの制作経験がない人でも分かるように詳しく紹介してくれています。私がこのスライドを知ったのがzbrushでハイモデルを作った後だったので肘から先の長さが腕よりも短いと知った時には手遅れでした。(修正にかなり時間がかかりました…)

 

本来ボーンの配置に関しても、ラフモデルの段階で一度バインドして動きに破綻がないかチェックすべきだったのですが、そんなことは知らなかったので後になってからヤバい箇所がチラホラと見えてきました。しかも後半になって…

何とかできないかと思い、ウェイト情報を保存してからボーンを修正してウェイト情報を読み込んだりもしたのですが、修正前のボーン情報も保存されているため結局この方法では問題は解決できませんでした。

もう一度やり直すしかないのか…そんな時に見つけたのがこちらの記事。

www.deathponta.com

「スキンのバインド解除」のオプションを開いて「ヒストリの維持」に設定してからバインドを解除するという方法ですが、これのおかげで無事にスキンウェイトの情報を残したままボーンの修正が可能になりました。神情報に感謝です。

 

スキンウェイトが終わったので次はブレンドシェイプ(瞬きや口パク、喜怒哀楽などの表情の素材みたいなもの?)に進みましょう。

ブレンドシェイプを作る前に知っておかなければならないのはブレンドシェイプ用のモデルとオリジナルのモデルの頂点番号が必ず一致する必要があるということです。

たとえ2つのモデルのトポロジーが同じであっても頂点番号が違えばモデルの見た目は破綻することになります。そして私がそれに気が付いたのは頂点番号が崩れたモデルを作り終わってからでした。

\(^o^)/オワタ

なんでこんなことになったかというと、これもまた事前の調査不足だったのですがチュートリアル動画を見た限り、形状を修正した顔の部分だけのモデルだけ用意してほかの部分は消去しても大丈夫だと誤解したためです。

下のつるっぱげモデルで表情差分を量産しまくっていたので、そのことに気づいた後に先程消したパーツをもう一度用意して結合しても頂点番号が変わってしまい結局ブレンドシェイプがうまくいきませんでした…

Mayaで頂点番号が変わってしまった時の対処法は調べれば結構出てきますが、私が試してみて一番いいと思ったのは「アトリビュートの転送」を使う方法です。
1.まずオリジナルのモデルを複製して「UVをUVセットにコピー」で新規マップにUVを複製します。

2.新しく用意したUVの内、コピーしたい部分以外のUVだけを消します。(この場合、顔と眉とまつ毛と目以外を消します。)

3.つるっぱげモデル、複製したモデルの順番で選択してアトリビュートの転送オプションを開きます。設定を以下のようにしてから転送をすると頂点番号が同じ状態のブレンドシェイプ用のモデルが作れます。この時、両方のモデルを選択してヒストリを消すことを忘れないで下さい。他の作業を行うと結構な頻度で元の見た目に戻ります。

適用後、該当箇所の頂点カラーが表示されるようになりますが「表示カラーアトリビュートの切り替え」で元の見た目に戻ります。

他の方法も試してみたのですが、頂点番号を振りなおすやり方だと頂点の距離が近い箇所がうまくいかないことが多々あったので、アトリビュートの転送でUVの情報から形状を転写する方法ならこうした不具合が起きないという点で便利です。それと転写したい部分を絞れるので、他の形状を転写する方法より転写にかかる時間がめちゃくちゃ短いです。

ただ一点、気を付けなければならないのはuvが重なっている場合うまくいかない可能性がありますので、その場合はコピーする部分を小分けにしてアトリビュートの転送を複数回行ったほうがいいかもしれません。(つるっぱげモデルの方もコピーしたい箇所だけのUVを複製して用意してください)

 

ブレンドシェイプの次はリギングです。といっても特別なカスタムはしておらず標準のHuman IKを利用しました。

強いて言うならAポーズでHuman IKを使うと手首のリグの回転軸が手首のジョイントのローカル軸に沿っていないことが不便ってことぐらいですが、触っていて特に不満に思うことは今のところありません。では、UE4に持っていきます。

 

UE4に持っていったものが以下になります。

キャラクターをセルルックの見た目にするためにUnreal界隈ではメチャクチャ有名なalweiさんのポストプロセスマテリアルを使っております。

unrealengine.hatenablog.com

加えて髪の毛と肌のマスターマテリアルですがこれもまたalweiさんが代表を務めるIndie-us Gamesがマーケットプレイスで販売しているキャラクターアセットのものを使いまわしました、お世話になりまくってます。

www.unrealengine.com

ただ、今回のキャラはセルルックで質感がないため、本来質感を調整できるパラメーターが色々あるのですが使用用途は色味調整のみにとどまっております。

 

このあたりでアニメを成立させるためにキャラがもう一人必要だなと思ったので用意しました。工数を削減したかったのと、この時キャラの声は無謀にもボイチェン使って自分で録音しようと思っていたので、双子の設定にして髪型だけ変えたものにしてあります。

ブレンドシェイプは先程紹介したアトリビュートの転送を利用して表情差分をほぼコピペだけで用意できました。

このキャラを用意した時に判明したのですが、セルルックのポストプロセスマテリアルを使うとどうやら半透明のマテリアルが使えないようです。

当初、眼鏡のレンズにペルソナ5の主人公みたいな反射を入れたいなと思い、キャラとは別で半透明のマテリアルを割り当てたレンズを用意してポストプロセスマテリアルを無効にしてみたのですが、結果は完全に透明になってしまいました。

 

分かりやすい例でいうとこんな感じです。半透明のガラスに囲まれた電話ボックス内にキャラを入れてみましたがキャラのシルエット内はガラスの半透明が描画されていないのが分かるかと思います。確か他にもアルファマスクを使ったマテリアルやエミッシブマテリアルなんかも効いていなかった気がします。

原因は全然特定できてはいませんが、ひょっとしたら描画順あたりが怪しい気がしています。そうであればキャラゲーでよく見かけるキャラの眉毛を髪の毛より手前に描画するみたいな方法で解決できないかなーとか思ったりするのですが…この辺りに詳しい方がおられるようでしたらぜひ教えてください。

現在、仮の対処としてでディザリング(LODの切り替わる時やアクターがカメラに近づきすぎた時のフェードとかによく使われている)を使って疑似的な半透明処理を入れてあるのですがやっぱり見た目が疑似っぽいためキャラに使うとなると使いどころが難しいです。

 

この後モーション作成、カットシーン作成、字幕の実装、音声の作成について書こうと思ったのですが全部書くと想定より長くなりそうなのと、まだ情報を整理できていない部分が残っているため次回にまわすことにします。引き続き頑張ります。