一日分の備忘録

ゲーム制作におけるいろいろな実装の備忘録。基本的にはゲームエンジン中心。その中でもUE4がメイン。プログラマーなのでプログラム的な記事が多くなるかも

場面転換的なクロスフェードの備忘録

お久しぶりでございます。

平成も終わり令和になりましたので久しぶりの記事を書きます。今回はクロスフェードの実装。

クロスフェード自体は一瞬で終わるので、クロスフェードの中でも、ワープや場面転換に使えそうなクロスフェードを実装。

一瞬で終わるクロスフェードの実装

マテリアル作成してMaterialDomainをPostProcessにして以下の通りにノード組んでBPでLerpを0-1で変動サせていくだけ!簡単!

f:id:oneday-memorandum:20190502142123p:plain

 

↑に追加実装をしてみる。

今回はこんな感じで実装。

youtu.be

 

SceneCapture2Dを使います。なんかこの間登壇したときもその前登壇したときもこれについて喋った気がする。SceneCapture2D大好き。

f:id:oneday-memorandum:20190502142730p:plain

 

例えばこんな感じで配置(ここに配置しているのはSceneCapture2Dではなく、普通のカメラです。)

f:id:oneday-memorandum:20190502142827p:plain

 

今回の実装用にマテリアルを組み直し。

f:id:oneday-memorandum:20190502145338p:plain

このときマテリアルの設定のBlendableLocationの設定次第ではかなり絵が暗くなるので、ポストプロセス的に問題なければ、BlendableLocationはToneMapping前にしておくと良いでしょう。(実はなんで絵が変わるかは雰囲気でしかわかってない。教えてほしい・・・切実に)

 

次にBPの実装

今回は汎用性は何も考えずにレベルブループリントに書いていく。

scenecapture2dで使う用のrendertarget生成

f:id:oneday-memorandum:20190502145149p:plain

 

パラメータ変更用にDynamicMaterialInstanceを生成(処理負荷的に少しでも抑えるために、SceneCapture2Dの毎フレームのキャプチャー処理をオフに)

f:id:oneday-memorandum:20190502145604p:plain

 

クロスフェード前処理

f:id:oneday-memorandum:20190502145731p:plain

f:id:oneday-memorandum:20190502145811p:plain

f:id:oneday-memorandum:20190502145902p:plain

f:id:oneday-memorandum:20190502150003p:plain

f:id:oneday-memorandum:20190502150044p:plain

Lerpのパラメータ更新にはタイムラインノードを使用
f:id:oneday-memorandum:20190502150137p:plain

 

以上で完成。

上記のままだと1回しかできない問題がある(わざと)ので、各々使い方に応じて適宜追加・修正してください。

なお激重なので基本的にはFrameGrabberを使うか、エンジン改造でシェーダー書かないとダメそうかも。