さて、今回はポストプロセスエフェクトについて解説したいと思います。
まずポストプロセスエフェクトとはなんぞや?というところから。
普段ゲームをやっていてFPSなどの洋ゲーをやっていると、アンチエイリアスや被写界深度、レンズフレアくらいは聞いたことがあるかもしれません。
これらは全てポストプロセスエフェクトにより実現しており、そもそもポストプロセスとはその名前の通り、ポスト(事後)プロセス(処理)という意味です。一旦画面に描画するバッファーをフレームバッファーと読んだりしますが、このバッファーに対してエフェクト(フィルターとも言う)をかけるのが、ポストプロセスエフェクトです。
アンリアルエンジン4ではこのポストプロセスエフェクトを超がつくくらい簡単に使うことができます!これを適応すると同じゲームとは思えないほどにクオリティーが上がるので、使わない手はありません。本当は実現しようとすると大変なのですが、それが簡単だからこそアンリアルエンジンを使う意味があります。
まずはPostProcessVolumeを理解しよう
UE4でポストプロセスを使う時には"PostProcessVolume"というアクターを使います。
PostProcessVolumeを適当な場所へ配置できたら、Detailsの中のパラメーターに注目します。パラメーターは様々なものがありますが、ここで解説するのはあくまでもPostProcessVolumeのパラメーターのみですので、他は一旦置いておくとします。
Priority
複数のPostProcessVolumeが重なった時に優先される優先度の設定です。数値の高いボリュームほど優先的にポスト処理が有効になります。
Blend Radius
ボリュームのもっている影響力の半径。広ければ広いほど、広範囲に影響力が強くなります。
Blend Weight
ボリューム自体が持つ影響力の強さ。0だと影響がなくなり、1にすると最大値の影響力を持ちます。
Enabled
ボリューム自体を有効にします。これがチェックされていないとボリュームが有効になりません。
Unbound
ボリュームが境界による影響力をもたなくなり、チェックされているとそのレベル全体でポストプロセスが有効になります。ずっとエフェクトをかけていたい場合はこれをチェックしておきます。
基本はこれだけですので、覚えておくとボリュームの使い方がわかると思います。ボリュームの大きさは拡大縮小すれば自由に変更できますし、Unboundにチェックすれば効果はずっと持続するということも覚えておきましょう。
各ポストプロセスエフェクトの紹介
ここからはUE4に用意されているポストプロセスエフェクトをそれぞれ紹介していきたいと思います。サンプルに用意されている"Content Examples"の中に"PostProcessing.umap"というレベルを開いてもらいながら確認するとわかりやすいと思います。
まずは何もポストエフェクトがない状態からです。
これから紹介するポストプロセスエフェクトはボリューム自体のパラメーターを触りますが、詳細は実際のサンプルの中を調べてみるのが一番わかりやすいのであえて解説しません。パラメーターを弄れば誰でも実現可能ですので。
フィルム
カメラフィルムのような効果を擬似的に演出するポストプロセスエフェクトです。ちょっとレトロな雰囲気を醸しだすようなエフェクトを演出できます。
シーンカラー
カラーグレーディングとも言います。これは画面全体の色見を設定できます。輝度や彩度をあげたり、コントラストを調整したりできます。実際のテレビでもよくある機能ですね。
ブルーム
ブルームとは現実世界における発光現象のことです。ただし、現実世界のように光源の情報は限界値がないわけではなくて、明るさが表現できなかった時代にHDR(ハイダイナミックレンジ)という技術が生まれました。それに対して目に実際に生じる効果をシミュレートしたものがブルームです。
アンビエントキューブマップ
アンビエントとは環境光のことで、恒常的に光る照明のことです。そこにキューブマップと呼ばれる周辺に写りこんでいる情報を表すテクスチャーを貼り付けてリアルな反射を表現する技術を足すことで、環境光とキューブマップのいいとこどりになった技術がアンビエントキューブマップということです。
眼の順応
暗闇から光の強い空間にでると目が少しずつ慣れて、周辺が見やすくなるという現象は誰もが経験したことがあると思いますが、実際にこれをシミュレーションしたポストプロセスエフェクトです。あまり日本では馴染みがないかもしれません。英語では"Eye Adaptation"や"Auto Exposure"と呼びます。
レンズフレア
とても有名なポストエフェクトです。カメラで写真を撮ると実際に生じる効果ですね。カメラのレンズから漏れる光から起きるこの現象のことをレンズフレアと呼ぶようになりました。ゲームでも様々なところで使われています。
アンビエントオクルージョン
アンビエントは先ほども説明しましたが、環境光のことです。そしてオクルージョンとは遮蔽するもしくは何かに遮られているという意味です。つまりアンビエントオクルージョンとは環境光が遮蔽物などを考慮してライティングされるということです。凸凹が強いオブジェクトでもそれを考慮したライティングが行なわれ、非常にリアルな表現となります。
スクリーンスペースな光沢リフレクション
スクリーンスペースな光沢リフレクションとはとても説明するのが難しいのですが、画面上の情報を一度結果として持っておき、実際の光の反射情報と照合した結果を書き出したものがスクリーンスペースの光沢リフレクションとなります。
詳しい解説は以下にありますので、ぜひ気になる方はどうぞ。
PS4 "Killzone : Shadow Fall" のIBL リフレクションシステムの説明 - hanecci’s Blog (JP)
グローバルイルミネーション
グローバルイルミネーションとは日本語で言えば"大域照明"と言われます。ライティングというのは本来物理的に正しい結果を行うことがあまりないのですが、グローバルイルミネーションでは広い範囲において光の影響力を考慮するというものです。なので、レンダリングには相当の負荷がかかりますが、より一層リアルなライティングが可能になります。
被写界深度
これも有名な表現のひとつで、被写界深度です。現実においてカメラを使うとピントの合う部分以外はボケて見えてしまうというアレです。ゲームにおいては特に注目させたい物体を見せる時や、遠近感を演出する時にもよく使います。かなりメジャーな技術でもあるのであまり説明はいらないですね。画像は全体的にボケてしまっていてあまり被写界深度っぽくないですが…。
モーションブラー
非常にわかりにくいですが、動いている物体が微妙にブレているのがわかります。これがモーションブラーでカメラで撮影した際にも動く物体がブレてしまうのが起こるのと同様の現象です。これを意図的にシミュレーションしてモーションするものがブレてみえるのがモーションブラーということです。
画面の描画率
最近のゲームではよく描画されている解像度が1080pだとか720pだとか話題になったりしますが、あれを変える機能です。もちろんあくまで描画率であって実際には1080pでレンダリングされていることもあります。それをアップスケーリングし、更に滑らかに見せるアンチエイリアス技術を使って綺麗にみせているゲームもあります。この画像では実際の描画率を30%まで落として粗くなっているのを意図的に見せています。
アンチエイリアス
アンチエイリアスとは描画されているものが微妙に尖っていたり、ジャギジャギがでているものに対して滑らかに見えるように処理を加えることです。UE4ではFXAAとTemporalAA(TXAA)と呼ばれる2種類のアンチエイリアスを標準でサポートしています。今回は普段アンチエイリアスが効いている画像ばかりみているので、あえてアンチエイリアスの効いていない画像を載せてみました。
詳細は自分がツイートした内容にも色々と書かれていますので、そちらも。
改めてUE4のアンチエイリアス比較。オリジナルサイズは以下から。
https://t.co/83k8nb4Sx6
FXAAとTemporalAA(TXAA)に関しては以下の記事に詳しく。
http://t.co/rbrAMtW8CZ pic.twitter.com/1mWQKs6Hiv
— alwei (@aizen76) 2014, 5月 28
ブラーを用いたアンチエイリアシング
少し解説が難しいのですが、法線(ポリゴンの面の向き)に対してブラー処理をすることにより、鏡面エイリアスを減らして滑らかにするというアンチエイリアスです。しかし公式ドキュメントによると高コストなので一般的には上記でも解説したアンチエイリアスを使うのが望ましいとのことで、あまり出番はないと思います。
※静的なブラーという内容を修正しています
ポストプロセスマテリアル
最後になりましたが、ポストプロセスマテリアルです。ポストプロセスマテリアルとはマテリアルを自作し、シェーダーなどを改良することにより独自のポストプロセスを作りだすことです。これにより自由に多彩な表現を作りだすことができます。
ある意味では一番効果の大きいポストプロセスエフェクトでもあり、なんでも出来るのがこのポストプロセスマテリアルです。さすがに解説するにはスペースが足りなさすぎるので、別途参考になりそうなページをあげておきます。
Unreal Engine | Post Process Materials
もんしょの巣穴blog [UE4] ポストエフェクトを自作してみる
まとめ
非常に長くなりましたが、いかがでしたでしょうか。UE4のポストプロセスエフェクトの強力さがよくわかったのではないかと思います。これらを使うのは本当に簡単です。
どういう表現がしたいのか、自分で頭の中に入れておけばいつでも実装が出来てしまいます。日本のゲームはポストプロセスエフェクトが全然使われておらず、表現力で海外と差をつけられている部分だと個人的には思っています。
こういったものが気軽に使えれば海外との差を縮められると思いますし、今後は日本のゲームでもちゃんとポストプロセスエフェクトを使ってほしいなと思います。
またプログラマーだけでなく、アーティストやゲームデザイナーの方もこういう知識は表現を作る際に重要ですので、ぜひ覚えておいてください。