Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 映像制作者向けTips

この記事はUnreal Engine 4 (UE4) その2 Advent Calendar 2018の2日目の記事です。

qiita.com


昨日書いたその1の方の記事がダークサイドだったので、こちらはライトサイドです。

比較的最近映像寄りのノウハウが貯まってきて、そこで得た知見やTipsを共有する内容の記事にしたいと思います。あまり対したことじゃないものからそんなものが!みたいなものまで。

それでは早速いきます!

Engine Scalability Settingsの"Cinematic"

意外と知られていないEngine Scalability Settingsにある"Cinematic"は本来の最高設定である"Epic"とどこまで異なるのか?

f:id:alwei:20181127233450p:plain

調べてみると以下が違いのようです。

Scalability settings cinematic? - UE4 AnswerHub

[ShadowQuality@Cine]
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=10
r.Shadow.MaxResolution=4096
r.Shadow.RadiusThreshold=0.03
r.Shadow.DistanceScale=1.0
r.Shadow.CSM.TransitionScale=1.0
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1

レンダリング設定が上記のようになります。これに対してのコメントが、

With this new setting, you can render higher quality shadows that are needed for offline rendering. This is not intended for any use during gameplay or at runtime.
(この新しい設定では、オフラインレンダリングに必要な高品質の影をレンダリングできます。これは、ゲームプレイ中または実行時に使用するためのものではありません。)

というわけでこの設定にすることで、主に影周りが最高品質になり、ゲームで使うためには想定されていないそうです。

デフォルトポストプロセスを切る

映像を作る場合、ポストプロセスがデフォルトでかかったままの場合、余計なエフェクトが入ってしまうので、これを予め切っておく必要があります。

"Project Settings"→"Rendering"内にある"Default Settings"内のチェックを外すようにします。

f:id:alwei:20181127234504p:plain

アンチエイリアスだけはここからしか設定できませんので、基本的には何か問題がなければ"Temporal AA"のままにしておくことをおすすめします。あとはカメラ側か、ポストプロセスボリューム内でポストプロセスは設定するようにしておきます。

※追記
アンチエイリアスに関して"Temporal AA"のままにしておくと言っておきましたが、アルゴリズム上、残像のようなものが出やすく、マスクを作る時などにはお勧めできません。その場合にはFXAAを使うか、解像度を思いっきり上げてしまう事をお勧めします。


カスタムステンシルの利用

映像制作において、カスタムステンシルは多いに利用価値のある機能です。カスタムステンシルを使うためにはプロジェクトの設定の変更が必要です。

"Project Settings"→"PostProcessing"→"CustomDepthStencilPass"→"Enable with Stencil"をオン→エディターを再起動で利用可能になります。

スケルタルメッシュやスタティックメッシュを選択して、詳細から"Render CustomDepth Pass"にチェックをし、"CustomDepth Stencil Value"に0以外を設定しておきます。

f:id:alwei:20181201225702p:plain

Gバッファの可視化をデフォルトのカスタムステンシルをそのまま利用すると、以下のような表示になってしまいます。

f:id:alwei:20181129181820p:plain

ここでマテリアルを以下のように修正することで、数値の表示をオフにし、指定した色で表示させる事が可能です。

f:id:alwei:20181129184437p:plain

"SelectObjectColor"はCustomノードになっているので、コードは以下のようになっています。

float3 Color = 0.0;

if (ObjectID == 1.0)
{
    Color = Color_Object1;
}
else if (ObjectID == 2.0)
{
    Color = Color_Object2;
}
else if (ObjectID == 3.0)
{
    Color = Color_Object3;
}

return Color;

"ObjectID"というのがここではカスタムステンシルに設定されている"CustomDepth Stencil Value"の値そのものです。ここに設定されている値に応じて出力される色を変化させています。

f:id:alwei:20181129184757p:plain

これで指定した色でメッシュのカラーマスクが出来ました。後はシーケンサー上でレンダリングし、連番画像としてコンポジットソフトなどでマスク画像として利用可能です。欲しい色についてはパラメーターの値を調整することで簡単に変更可能です。既存のカスタムステンシルと差し替えたい場合には以下の"組み込みポストプロセスマテリアルを変更"についてを参照してください。

組み込みのポストプロセスマテリアルを変更

マルチパスで様々なレンダリング素材が欲しい場合、シーケンサーレンダリング時に"Image Output Format"を"Cutsomt Render Passes"に変更し、"Include Render Passes"から欲しいレンダリングパスを選択することで一気にレンダリング可能です。

f:id:alwei:20181129185405p:plain

ただし、このレンダリングパスで使われているポストプロセスマテリアルをそのまま使うのは問題がある事があります。上記のカスタムステンシルをそのまま使う事が出来ないからです。※ゲームではどちらにせよ加工するので問題ない事が多い。

このデフォルトのポストプロセスマテリアルを自作のものに切り替える方法があります。これはヒストリアさんのブログで紹介されているので、そのままリンクを貼っておきます。

[UE4]バッファに適用されるポストプロセスを変更する方法|株式会社ヒストリア

これでデフォルトのポストプロセスマテリアルを変更し、自作のものへ修正することで、"Cutsomt Render Passes"に表示される内容も変化します。

f:id:alwei:20181129191608p:plain

独自のカスタムステンシルをレンダリングパスに追加できました。

アルファチャンネル付き出力

シーケンサーレンダリングされた連番画像をアルファチャンネル付きで出力する方法が実はあります。通常の方法では不可能ですが、HDR画像用のOpenEXR形式でのアウトプットを行うことで、アルファチャンネルを持つ画像になります。

まずポストプロセスマテリアルの中身は以下の通りになります。ここでは予め、カスタムステンシルを設定しており、それらをマスク材料に使っています。

f:id:alwei:20181129211814p:plain

更にマテリアルの詳細の中にある"Output Alpha"をオンにしておいて、ポストプロセスマテリアル内でOpacityが設定できるようになります。これでアルファ出力が有効化されました。

f:id:alwei:20181129211856p:plain

シーケンサーレンダリングします。レンダリングする前に独自のアルファ出力付きカスタムステンシルをレンダリングパスに追加しておきます。

f:id:alwei:20181129212334p:plain

"Image Output Format"を"Cutsomt Render Passes"に変更し、独自レンダリングパスであるアルファ出力付きの"Output Alpha Channel"を追加しました。更にすぐ下にある、"Capture Frame in HDR"にチェックします。

これで実際にレンダリングします。

f:id:alwei:20181129212835p:plain

exr形式の連番画像が出力されているので、あとはPhotoshopAfter Effectsなどに持っていってアルファ付きのマスク画像として利用できます。もちろんUE4にもインポート可能です。

f:id:alwei:20181129213037p:plain

ステンシルでマスクした情報の上に透明度を持つアルファチャンネルとして出力されている事がわかります。あとはご自由にご利用ください。

実際にアルファ出力したものをAfter Effectsに読み込みマスクとして利用したもの動画。

物理のついたアニメーションをベイク

物理がついたアニメーションを何度もレンダリングしたい時、毎回結果が同じでなければ使いものになりません。この物理のアニメーションはシーケンスレコーダーを使ってベイクする事が可能です。既にこの内容については記事にした事がありますので、そちらをご参考ください。

unrealengine.hatenablog.com

実際に物理をベイクして動かしている動画。

アンチエイリアス対策

UE4で映像を作る際には、アンチエイリアスが通常のレンダラーと比較すると弱いと言われます。これはゲーム用のアンチエイリアスを使っているためです。これを解決するためには力技ではありますが、リアルタイムレンダリングの利点を活かして、解像度を上げてしまうという手がよく使われています。

f:id:alwei:20181129195809p:plain

シーケンサーレンダリング時の設定で"Resolution"を2倍の解像度(画像では4Kサイズ)にしてしまえばジャギーは比較的気にならないレベルになります。あとは実際にレンダリングした連番画像をAfter Effectsなどで読み込んだ後にサイズを縮小して元の解像度にしてしまう事で品質も保ちつつファイルサイズを抑える事が可能です。

3ds MaxからカメラのFocal Length(FOV)を持ってくる

シーケンサーにはDCCツールでエクスポートされたFBXカメラアニメーションデータをインポートする機能があります。

f:id:alwei:20181129194524p:plain

これは極一部のプロジェクトで問題になりますが、シーケンサー上のカメラに3ds Maxからカメラアニメーションデータをインポートする時に、FOVの部分を上手くインポートする事が出来ません。(少なくとも4.19の時点では不可能)
MayaではFocal Lengthとして認識されており、デフォルトがそのようになっていますが、Maxではこれが"FieldOfView"になっているためです。

この問題を解決するためには、エディターのメニューから、"Project Settings"→"Level Sequence"→"Track Settings"内の"Fbx Property Name"を"FocalLength"から"FieldOfView"に変更します。

f:id:alwei:20181129194037p:plain

これで問題なく、3ds MaxからのカメラでFOVを取り込む事ができるはずです。

日本語での映像制作参考資料

最後に日本での映像制作における参考資料をいくつか紹介して終わりにしたいと思います。

まずはCGWORLDのWeb版で公開されている、リアルタイムレンダラーの基本的な特性について。

cgworld.jp

ジェットスタジオ赤坂さんが公開されている資料は非常に参考になります。

www.slideshare.net

同じくジェットスタジオ赤坂さんがUE4公式ブログで公開している連載記事も参考になります。

www.unrealengine.com

www.unrealengine.com

www.unrealengine.com

ヒストリアさんの関連会社である、エレメントファクトリーさんが公開されている、「映像屋さんのためのリアルタイムBG制作マニュアル」も非常に参考になります。

www.element-factory.co.jp

まとめ

簡単なTipsからコアなものまで、比較的映像制作で役立ちそうなものを紹介しました。ぜひご活用ください。

明日はdgtanakaさんです。コアな話が聞ければいいな。