関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2021.02.03UE4
執筆バージョン: Unreal Engine 4.26 |
こんにちは、アーティストの千葉です。
今回はちゃっかり参加していたぷちコン映像編2ndの応募作品について解説したいと思います!
↓作ったもの
今回は下記の3点を重視して制作を行いました。
1.キャラクター(人間)を登場させること。
普段は背景制作の仕事がメインなので、違う分野にチャレンジしたかったため。
2.ストーリー性の高い映像にすること。
仕事でコンセプトアートの制作を行うことがあるので、ストーリーを絵で伝えるスキルを伸ばしたかったため。
3.複数人での制作を行う。
一人で作ってるとだんだん飽きてきてエターナることありますよね。
上記を踏まえて、「ぬくもり」が失われるその瞬間を描く……という形でテーマを組み込んで、
制作を進めることにしました。
まずはキャラクターの設定画や絵コンテを制作します。
・キャラクターデザイン
映像編は期間が短く、キャラのモデルを真面目に一から作ることは難しかったので、
VRoidを利用することをこの時点で決めていました。
また、フェイシャルモーションの制作もちゃんとしたものを用意するのは期間的に難しそうだったため、
そもそも顔が見えなければフェイシャル作らなくていいじゃん!ということで、お面で顔を隠したキャラクターにすることにしました。
で、描いたのがこちら↓
ベースがあるとはいえモデリングに割ける時間は少ないのでなるべくシンプルなデザインで、
色とシルエットで差をつけるように意識しました。
・絵コンテ
全て載せると長くなるので一部抜粋ですが、
カメラワークやカットの尺をこの段階でほぼ決めています。
回想シーンのシームレスな場面転換はコンテを描いてるときに思いついたものです。
ちなみにキャラクターの名前は特に決めてないのでコンテには白子とか黒男って書いてありますね(´・ω・`)
・マテリアル
ぷちコンは学習用のコンテストということでちょっと変わったUE4の使い方にチャレンジしてみたかったので、
セルルックで絵を作ることにしました。
マテリアル内で処理したトゥーンのライティングをベースカラーに繋げて、ポストプロセスでキャラの部分だけベースカラーを表示するようにしています。
また、頂点カラーのアルファに陰になりやすさの情報(ほぼアンビエントオクルージョン)を格納して遮蔽された箇所にも陰影が入るようにしたり、ブループリントで専用のシャドウマップを作成してセルフシャドウにも対応したりしてます。
↓頂点カラーのアルファを表示した状態(陰影を階調化にする前に乗算してます)
アウトラインはポストプロセスで付けています。CustomDepthや法線から検出した線に加えて、頂点カラーで塗り分けた色からも輪郭検出しています。
頂点カラーはSubsurface Colorのピンに繋ぐことで取得しています。
当初はこの頂点カラーの塗り分けだけで必要な線を出せないかと考えていてRGBで細かく塗り分けたのですが、結局うまく行かずCustomDepthと法線も利用してアウトラインを描画しました。
↓CustomDepthの線
↓CustomDepth+法線から検出した線
↓CustomDepth+法線+Subsurface Color
↓輪郭検出に使っているSubsurface Color
・モデリング(キャラ)
前述した通りベースモデルにはVRoidを使用しました。Blenderのアドオン「VRM_IMPORTER」を使用して、VRoidから書き出したデータをBlender経由でMayaにインポートしてモデリングを行いました。
モデル自体のクオリティが高いだけでなく、ウェイトがとても綺麗で補助ボーン無しでも良い感じに変形してくれるので、セットアップの時間も大幅に短縮することができました!圧倒的感謝!!
個人的なこだわりで手首やお尻には変形を補助する骨を追加しています。追加した骨はリギングの際に自動で動いて補正するように設定しました。
・アニメーション
アニメーションは映像のクオリティに大きく影響する要素なので、プロのアニメーター(私の妻)に依頼して制作してもいました。
妻は普段ゲーム用のモーションを制作しているのですが、以前からカットシーンや映像作品のアニメーションも作りたいと話していたので誘ったら快諾してくれました。
後で牛角奢ります。
アニメーション制作は全てMayaで行いました。
自作のスクリプト「TimeRangeManager」でタイムライン上の各カットの範囲をリストアップし、切り替えながら制作を進めてもらいました。
カットとカットの間は尺の調整をしやすくするために間隔を開けていますが、「TimeRangeManager」はこの空白のフレームをスキップして連続再生する機能を実装しています。
将来的には他のツールと連携できるようにしたかったので、カットリストをCSVで書き出す機能も実装されています。
カット数が多いのでFBXの自動エクスポート機能も実装したかったのですがそこまでは手が回りませんでした。
リグも勉強のために自作しています。余計な機能はいらんと事前に言われていたのでかなりシンプルな構造です。
・モデリング(背景)
背景はほとんどモデリングしていません。基本的に購入したアセットを組み合わせて制作しました。
また、シームレスな場面転換を実現するために一つのレベル上で全ての背景を制作しました。
草原の1000m下に回想シーンの背景が配置されています。
カメラとキャラをまとめて動かす空のActorを用意して、切り替わるタイミングではシーケンサーでまるっと1000m下に移動させました。
・ライティング
背景のディテールが細かく出すぎるとセルルックのキャラが浮いて見えるので、あえてディテールを潰して省略を意識したライティングを行いました。
草原がどんよりした天気なのもフォグを強くかけてディテールを潰すためだったりします。
ほぼ全てのカットでポストプロセスでフレアやディフュージョンフィルタをかけています。アニメでいう撮影の工程を再現しています。
これらの効果はくっきりとした陰影の絵と非常に相性がよく、この工程でルックがかなり良くなるので作っていて楽しかったです。
普通に映像を制作するのであればAfterEffects等でエフェクトをかけた方が楽ではあるのですが、ぷちコンのレギュレーションに則りUE4上で処理を再現して全ての作業を完結できるようにしてみました。
↓エフェクト無し
↓エフェクトあり
・期間の短さをあまり考慮できていなかった。
働きながらだと思ってた以上に制作の時間が取れない!
次はもっと「ぷち」な内容にして映像のクオリティに力を入れたいですね。
・セルシェーダーの実装が複雑
ブログで解説しておいてこんな事言うのもアレですが、今回の手法は結構強引な実装になっており、いろいろと問題が起きるのであまりオススメできません\(^o^)/
具体的にはポストプロセスの順番の問題でDOFかけたときに意図しない要素がボケて写り込んだり、エミッシブは別途抽出してセルシェーダーで上書きしないようにする必要があったり、ブルームが効かなかったり等々。
やりたい表現の一つ一つは簡単に実装できたのですがそれらが組み合わさると想定外の問題が起きて標準のUE4で特殊な表現を行うことの限界を感じました。
次回(もやるかはわかりませんが)セルルックで映像を作るときはいっそエンジン改造で専用のShading Modelを用意しようかと思っています……
……ということで早速エンジン改造にチャレンジしてみました!
複雑なBPを組まなくてもセルフシャドウが落ち、複数光源の環境(使う場面はあまりなさそうですが)にも対応できて大満足です!
GBufferもある程度自由に使えるので輪郭線の制御等もやりやすくなりそうです。
エンジン改造はバージョンアップ時の対応等デメリットも多いですが、自由度の高い絵作りができるので手段の一つとして試してみる価値はありそうです。
改造の詳細な手順については割愛しますが、多くのサイトやフォーラムでSubsurface Color等が書き込まれているGBufferのCustomDataを使用するにはBasePassCommon.ushの
1 |
#define WRITES_CUSTOMDATA_TO_GBUFFER |
に定義を追加すれば良いと書かれていますが、今回改造したUE4.26では
DeferredShadingCommon.ushの
1 |
bool HasCustomGBufferData(int ShadingModelID) |
にもCustomDataを使用したいShading Modelを追記しないとGBufferに情報を書き込めませんでした(泣)
標準のUE4が得意としている絵作りとは違う方向性で制作を進めたことで、エンジンの仕様やセルルックの手法についてたくさんの発見がありました。
今回得た知見は実際の業務でも役に立ちそうなので、ぷちコンは学習用のコンテストとしてとても有意義なものだと思います。
皆さんも是非気軽に応募してみてください!