#はじめに
Unreal Engine 4 (UE4) その2 Advent Calendar 2017の15日目の記事です。
今回は、Materialが触れるようになると表現の幅が広がって楽しいといった具体例として、
PostProcessを使ったカメラ演出について書きます。
よろしくお願いします。
#想定
16:9ディスプレイにフルスクリーンで行った場合で作ってます。
ズレる場合は、今回作成するMaterialを調整してください。
#作ります
全部で3ステップ!
とっても簡単!
##1,PostProcessMaterialsを作る
今回のキモです。
PostProcessMaterialsの詳細は、以下のドキュメントをご覧ください。
Unreal Engine 4 Documentation : Post Process Materials
###集中線Textureを用意
参考Blog : Webデザインのタネ
記事を参考にこんな感じのテクスチャを用意します。
サイズは、1024*1024で作成しました。
集中線は少なめがオススメです。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F9eb67b0b-18df-ac40-557f-4788b0548c31.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=383ee5ba8bcbe89a6a0c04f01f2760a5)
###MaterialParameterCollectionsを作成
MaterialParameterCollectionsの詳細は以下のドキュメントをご覧ください。
Unreal Engine 4 Documentation : Material Parameter Collections
以下2つのパラメーターをScalarParameterとして作成します。
Paramter Name | Radius | Density |
---|---|---|
Default Value | 2 | 4 |
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F525f2ac8-f01a-9910-1cee-a1cd00dca62b.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=58c92d04d63b4b478172c85ef8fde3de)
###Materialを作成
参考Blog : blog.dalton.gd
こちらのブログを参考に集中線Materialを作成し、シャッターの役割追加したものがこちら
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Fdcaf014a-74cf-74e9-a6fd-f39c91fc2827.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1a0e5c712b4bdb217ca648e9880f3dba)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F6ae59f09-0936-f67d-0857-91b056bf9ee1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=544aa0c77649504ece5637c7ec2a2dcb)
TextureSampleには、先ほど作成した集中線Textureをセットします。
これで、集中線+シャッターの役割を持ったPostProcessMaterialができました。
##2,ClassBlueprintを作成、Timelineでコントロールする
実際の演出を動かす部分となります。
Actorを継承したClassBlueprintを作成して、以下の作業をしてください。
名前は、BP_CutManとしました。
- PostProcessを用意します。
PostProcessは、Class内にComponentを直接置いて使用します。
Rendering Featuresタブ内のPost Process Materialsに先程、作成したMaterialをセットします。
演出時にのみPostProcessを表示して欲しいので、Post Process Volumeタブ内のEnabledをFalseにセットします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F35f210ec-2899-98ef-d10f-215c044b8e87.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c5ce1db364a15877411290d4fe69a4f0)
- EventGlaph内で、Timelineを作成します。
Lengthは、0.51で作成しています。
以下の2つのfloat型カーブでKeyを打ちます。
\ | 0秒 | 0.25秒 | 0.50秒 | 0.51秒 |
---|---|---|---|---|
Radius | 2 | 1 | 2 | 2 |
Density | 4 | 1 | 4 | 4 |
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F6dbad3da-8d00-7639-837d-5f907b7e0023.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=335a1ab7b388db89cf9d21a6af8747a4)
- Timelineを呼び出し、ParameterCollectionsを操作する処理を作成します。
今回は、CustomEventとして、"Shot!"を用意し、処理を作成しました。
PostProcessをEnableにする処理を忘れずに!
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F19cca806-1b15-ee62-9715-4c3606d0f867.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e517ddba7b8b01a921ee080dc87620de)
- "Shot!"イベントを呼び出す。
今回は、Level内に作成したClassBlueprintを配置し、LevelBPから呼び出しています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Ffce8c754-27d5-6ea0-ac63-584f1edd35e7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d585f4ceff3a4b780dfab7a551f39f71)
動かすとこうなるはずです。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Fbe9ad2cf-7c64-8a24-a66f-4d86c0805a51.gif?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ad087af65ec5dc11672237d4cbde5190)
動作が確認できました。
これだけでも、使うことはできますが、今回はラストアタックの演出などを想定していますので、もう少しいじります。
##3,扱いやすくする
Timeline終了毎にカメラ切り替え、3回ほど回してみましょう。
###カメラのSpawn処理を用意
- 2つの変数を用意する。
Name | Type | Default Value |
---|---|---|
Count | Integer | 0 |
CameraActors | CameraActor(Array) | None |
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Fb0917e9d-5068-e687-3eb0-faca94175e7c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e7948c0416bd8788a9ca5a5e42f6a170)
- ArrowComponentを3つ追加します。
Level上に配置した際に調整しやすいようにしておきます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F1382b456-3eeb-f774-c7a2-74d3fe88ffb8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e2262bece2e2678476b885f6d89c6fed)
- BeginPlayに処理を書く
各ArrowComponentのTransformにCameraActorをSpawnさせ、変数として保存しておきます。
これで、3つのカメラを用意できます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Fd0567955-2922-77bf-552d-262d35887c75.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=14e985d9366ab737af38fa34c6fa56c6)
- Shot!イベントを修正する。
SetViewTargetWithBlendを使用して、Shot毎にカメラを切り替え、3回実行したら、カメラをプレイヤーに戻す処理となっています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F88a70c59-9bcf-cd8d-aab9-113f46305f03.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0a9a565438ef8f0bcc331dbc4e5afd1e)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2F0a03b1f3-accb-afb3-dca6-7216cd1f5665.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2bc3982eb83364ec43e81967ae936a9a)
- Level上に配置する
配置後、各ArrowComponentを好きな位置に動かしてみましょう。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F213936%2Fc6e98d4f-eb1d-30c9-2157-6c9fd0ca70c4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5e97c26aed65bd39440f03fbb0676332)
そして、動かすとこうなるはずです。
アドカレ用 pic.twitter.com/glldVr2ZLI
— shiotani (@YuyaShiotani) 2017年12月12日
これで、ラストアタック演出の完成です。
#そして用意したものがこちら
この記事で作成したプロジェクトファイルです。
改良版が入っています。
記事との違いは、ArrowのLocation調整後、Rotationの調整がやりづらかったので、
FindLookAtLocationを使った処理を挟んで、調整しやすくしています。
Download
#最後に
MaterialParameterCollectionsでPostProcessをコントロールしているので、シネマティックツールであるSequencer内で今回の演出を作成することもできます。
Unreal Engine 4 Documentation : Animating Material Parameter Collections
また、MaterialCollectionsではなく、Material内に直接ScalarParamterを置くという手段もありますが、そちらはお好みでどうぞ。
閲覧、ありがとうございました。
明日は、くらかすさんの「僕とUE4の出会い」です。
馴れ初め話、楽しみです。