UE4ぷちコン 映像編 応募作を振り返る

ヒストリアさん主催の「UE4ぷちコン 映像編」に応募しました。いろいろ発見とかチャレンジがあったので、小ネタとして紹介してみたいと思います。

応募作品はこちらです。この記事を書いている時点ではまだ応募が受け付けられたという段階で、審査結果などは発表されていません。

2020/1/22追記:なんと大賞をいただいてしまいました。

審査結果はこちらです →UE4ぷちコン映像編 受賞作品発表!

テーマとレギュレーション

「ぷちコン」はUE4を使ったゲームのコンテストなのですが、今回は番外編ということでゲームではなく映像作品での募集でした。テーマ「日の出」に加えて、Megascansの使用がレギュレーションとなっています。せっかくなので背景はほぼMegascansの岩で固めました。岩を寄せ集めて谷間状の地形を作ってあります。あとちょっとだけ草も生やしています。

Megascansの岩を並べた背景

テーマの「日の出」がどうなってるかは、映像のほうを見ていただければ。

キャラクター

キャラクターはこれまでもUE4でよく使っていたピンクのクマみたいなアレです。ぱっと見は以前と変わりありませんが、C4Dで動かすためのリグは新しいものに更新し、メッシュも1段階サブディバイドして細かくしてあります。

おなじみピンクのクマ

ロープのぼりアクション

今回の最大のチャレンジは崖をロープでのぼるアクションです。ゲーム「デスストランディング」で主人公がやってるのを見て真似したくなったのですが、UE4で動かすのは僕のスキル的にぜんぜん無理なので、C4Dで動かしたものをFBXでUE4に持って行っています。今回はゲームではなく映像なのでアニメーションを再生できればOKです。

C4Dでロープのぼりをさせた手順を簡単にご紹介します。

完成したアクションはこちらになります。ロープはブラブラ揺れつつ、キャラクターの手にぴったりくっついて、そこから上はピンと張っていますね。

 

まず問題なのはロープのオブジェクトを動かす方法ですが、これは細長いヒモ状のポリゴンメッシュに長いジョイントチェーンをバインドし、そのチェーンを「IK-スプライン」で曲げるという手法を取っています。IK-スプラインは「スプラインダイナミクス」で物理シミュレーションを行って動かしています(スプラインについているタグの一番左)。

スプラインダイナミクスで長いジョイントチェーンを操る

長いチェーンをスプラインダイナミクスだけで動かしている場合、「ねじれ」が問題になることがあります。今回は「ロックタグ」で「角度B」をロックしてチェーンのねじれを完全にロックしています。

ねじれ防止のためロックタグで「角度B」をロックしてある

スプラインダイナミクスでは、スプラインのいずれかのポイントを「固定」すると、固定されてない部分が物理演算で揺れます。こちらの記事でちょっと詳しく紹介しています。

スプラインダイナミクスタグ

このままだとスプラインはブラブラ揺れるだけなのですが、「制限タグ」を使うとスプラインの任意のポイントを指定したポリゴンオブジェクトに拘束することができます。上図でスプラインについてるピンのアイコンのタグがそれで、矢印で結ばれているポリゴンオブジェクトに対して拘束されています。ほかに、崖のポリゴンとキャラクターに衝突判定を設定しています。

スプラインダイナミクス用の「制限タグ」

ちなみにこのタグの名前は英語だと単に「Constraint」となっていて非常に紛らわしいのですが、カテゴリとしてはスプラインダイナミクスと同じく「ヘア」のところに入ってるので、オブジェクトのコンストレイントタグとは区別がつきます。

スプラインダイナミクスと同じくヘアカテゴリにある

で、この「制限タグ」ですが、「影響(Influence)」の値で拘束する度合いを変えることができます。つまり複数のポイントに対してそれぞれ別の「制限タグ」を設定して「影響」の値をアニメーションさせれば、拘束するポイントや対象を次々に切り換えることができるわけです。

拘束する対象を次々に切り換える

スプラインと拘束の対象のポリゴンだけを表示させたのがこちらです。赤と青のオブジェクトがスプラインの途中の部分をつかんで引っ張っているように見えますね。

 

この「スプラインをつかんでいる」コントローラに対して、キャラクターの腕のIKゴールもオブジェクトのコンストレイントで拘束してやると、動きとしてはキャラクターがスプラインをつかんでいるように見えます。概念としては下図のような感じになります。

共通のコントローラでキャラクターとスプラインを操作する

実際にはこれらのアニメーション設定が一発で決まるわけではなく、キャラクターの腕の動く範囲とスプラインの拘束されるポイントの位置関係、スプラインダイナミクスの挙動をうまいことすり合わせてやる必要があります。それらを交互にちょっとずつ調整して、もっともらしく見えるように仕上げていきました。

スプラインとキャラクターのリグだけ表示したものがこちらです。スプラインを「つかむ」位置とキャラクターの手のIKゴールの位置と角度の最適な関係は変化するので、途中にもうひとつヌルオブジェクト(白い球)を挟んで微調整しています。

 

スプラインのセグメント数は全体で34あり、経験上、ダイナミクスのシミュレーションが大暴れせずに収まるのはこのぐらいが限度と判断したのですが、できたアニメーションをみると末端と根元のあたりだけでも分割を細かくしてもっと曲がりやすくしたほうが良かったなと思いました。次の機会に活かしたいと思います。

シーケンスレコーダー

キャラクターの「ロープで崖をのぼる」以降のモーションはC4Dでつけたのですが、それ以前のただ歩くだけのモーションはUE4でつけました。

ゲームプレイで動く状態になっているアクターであれば、「シーケンスレコーダー」という機能を使ってアニメーションとして記録し、シーケンサーで再生できます。ゲームのリプレイのような感じですね。これならなんと、キャラクターに10秒のモーションをつけるのに10秒しかかかりません!

……まあ何度かリハーサルもしましたし、キャラクターのブループリントにも手を入れたので実際はそこまで速くはありません。使っている歩きのループなどのモーションもC4Dで自分で作ってるので、UE4だけでできてるわけではないですね。とはいえC4Dのほうでアニメーションを全部やった場合は、はるかに長い時間がかかったと思います。

UE4のキャラクターアニメーションは非常に多機能なので、映像作品のキャラクターをコントローラ入力とプロシージャルアニメーションでリアルタイムに芝居させるというのもあながち非現実的ではないかもしれませんね。

ゲームプレイから記録されたキャラクターのシークエンス
ゲームプレイを記録、シーケンサーで再生する

レイトレーシング

見ている人はあまり意識してないんじゃないかという気もするのですが、このプロジェクトでもレイトレーシングが活躍しています。キャラクターが持っているランタンの影がレイトレースのソフトシャドウで描写されています。これがシャドウマップで描写されていると境界がバッキバキでぜんぜんさまにならないのです。

比較用に、影をシャドウマップにしたものがこちらです。

 

UE4にはレイトレーシングを使わずに影をソフトに描写する機能もありますが(カプセルシャドウとかディスタンスフィールドシャドウとか)使える条件が限られていたり(今回のだとダメそうです)事前の準備が必要だったりしますし、何よりクオリティではどうやったってレイトレの影にはかないません。パフォーマンス上の制約のない映像用途では迷わずレイトレを使うべきだと思います。

カメラワーク

今回のプロジェクトでは、シーケンスを何度も繰り返し再生しつつ、カットのタイミングやカメラの動き、フォーカスなどを調整しました。シーンが夜、背景がぜんぶ岩、強いライトがキャラクターの手に固定されている、崖にへばりついてロープでのぼるアクションがあるなど、カメラ的には見せ方が難しい内容で、しかも尺は60秒しか使えないので、本当にギリギリまでカメラをいじっていました。

そういうことができたのはUE4がリアルタイムレンダリングだったおかげで、ファイナルの画質で見ながらカメラをいじれることの恩恵を強く感じました。プリレンダーの場合は作業中のチェックのためにファイナル品質の動画を出せる機会はそう多くはないので、UE4のリアルタイムワークフローはまるでタイムマシンを手に入れたような万能感がありますね。

マスターシーケンスは全体的な尺配分とアクターの出番の管理
各ショットのシーケンス内でもカメラは細かく切り換えている

その他の小ネタ

フレームレートは24fpsです。「24fpsだと映画に見える」っていうのはわりと真面目な話です。シーケンス自体は30fpsのままで、動画の書き出しだけ24fpsにすればいいので簡単にできます。

Custom Frame Rateで24にするだけ

露出は固定しています。UE4でデフォルトで効いている自動露出は調整幅が非常に広く、ちょっとやそっとライトの強さをいじったぐらいでは変化が吸収されてしまうので、明暗をちゃんと演出したいときには邪魔です。Post Process VolumeのExposureでMin BrightnessとMax Brightnessを同じ値にすると自動露出が効かなくなり、露出が固定値になります(他にやり方があるかもしれません)。

露出を固定

カメラはCinematic Cameraです。映像用のパラメータがいっぱいあり、現実のカメラをシミュレーションしているので、それなりにカメラ知識がある場合はとても使いやすいと思います。あと「Draw Focus Distance」というカメラのフォーカス距離を表示してくれる機能がとても便利で、「ピン送り」なんかもやりやすいです。そういえば、シーケンサーで配置したアクターはビューからピントを拾うスポイトが効きませんでした。

CineCameraの設定
パープルの平面がフォーカス距離