UnityのStandardAssetsのImageEffectsに替わるPostProcessingStack

UnityのStandardAssetsのImageEffectsを使用するとカメラで描画する際に色々な効果を加える事が出来ます。

しかしUnityのバージョンアップをしStandardAssetsをインポートしてみるとImageEffectsは標準では搭載されなくなっているようです(バージョン5.6.1f1)。

ImageEffectsフォルダはあるんですがReadMeというテキストファイルがあるだけで中身がありません。

今後はImageEffects内にあるひとつひとつのコンポーネントをカメラにそれぞれ設定するのではなく、PostProcessingStackという機能にエフェクトの効果の設定を施したプロファイルを設定する事でそれぞれのエフェクトを発揮させるようです。

PostProcessingStackはPostProcessが後処理という意味なので『溜め込んでおいて後で処理をする』という意味でしょうか?

プレイヤー設定やカメラの設定でレンダリングパスを設定する場所がありますがその設定したレンダリングパスによってはエフェクトが使えない場合があります。

レンダリングパスはそれぞれのカメラへの効果をそれぞれ別に保持しておきその保持している場所がレンダリングパスみたいです。

それぞれの保存しているレンダリングパスを組み合わせて最終的なレンダリングを行うということでしょうか。

ここら辺はCGを専門的にやっている人は詳しそうですね。

詳しくは参考サイトに記載しているUnityのマニュアルを見ていただくとして、

今までのImage Effectsとどう違うかと言うと、今までのImage Effectsを複数設定した場合は実行順序によっては正しく動作しない場合があります。

ですがPostProcessingStackを使用すると正しい順序で実行してくれるようです。

設定も個別ではなくひとつのProfileでオン・オフを切り替えたり設定したりすることが出来ます。

PostProcessingStackを使用するにはUnity 5.4.1+またはUnity 5.5.0b6+以上が必要なようです。

わたくしの場合5.3.4f1以降にバージョンアップすると通常通り使えない為、5.6.1f1をインストールして使っていますが画面の描写等で不具合が発生してます。

その為に効果を示す有用な画像、動画を提示出来ないです。(^_^;)

効果については参考サイトを参照して確認してください。(-_-)

スポンサーリンク

旧ImageEffectsとPostProcessingStackのインポート

標準でImageEffectsの中身が搭載されなくなりましたがアセットストアからインポート出来るようです。

Legacy Image Effects

ただLegacy Image Effects自体が5.5バージョンで作られたみたいなので前のバージョンで使うとエラーが出て実行出来ないかもしれません。

わたくしの場合は『シェーダ―が現在のプラットフォームでは対応していません』的なメッセージと共にそのエフェクトのスクリプトを有効に出来ない状態になりました。

シェーダ―がわからないというのが問題ですねぇ・・・・(^_^;)

万が一新しいLegacy Image Effects(なんか変な感じ)をインポートして動作できなくなった場合はUnityメニュー→Assets→Import Package→Effectsで現在のUnityバージョンのImage Effectsがインポート出来ると思います。

PostProcessingStackは

Post Processing Stack

になります。

またGitHubを使って最新のパッケージをダウンロードする事も出来ます。

GitHubについては他サイトを参照してください。(^_^;)

難しい事をしたくない人はUnityパッケージをGitHubからダウンロードするかアセットストアからインポートするといいと思います。

PostProcessing - Post Processing Stack

Unityパッケージ化した

PostProcessing - Post Processing Stack

をダウンロードしてパッケージをインポートして使用する事も出来ます。

エフェクトの効果については

StandardAssetsのEffectを使って視覚的な効果を加えたサンプルを作成します。

のカテゴリの記事でそれぞれ説明があるのでそちらを参照してください。

今回はPostProcessingStackを使用してそれぞれのパラメータを調整しどのような変化があるかを確認していきます。

PostProcessingStackの設定

UnityにPostProcessingStackをインポートしたらカメラのインスペクタでAdd Component→Effects→Post-Processing-Behaviourを選択します。

Post-Processing-BehaviourにはPostProcessingStack用のProfileを指定する必要があります。

ProfileはAssetsエリア内で右クリック→Create→Post-Processing Profileを選択し作成します。

PostProcessingStackProfileの作成

作成するとファイルが作られます。

PostProcessingStackProfileファイル

ファイルを選択するとインスペクタにエフェクトの設定項目が表示されます。

PostProcessingStackの設定

↑のような感じですね、名前の左にそれぞれのエフェクトの効果を出すかどうかのチェックボックスがあるのでチェックを入れると効果があらわれます。

設定値をいじる前に、Post Processing Behaviourに今作成したPostProcessing用のProfileをドラッグ&ドロップし設定します。

これで設定を変更するとすぐにカメラに描写された画面にエフェクトの効果があらわれます。

設定値についてはUnityのマニュアルを参考にしてますが、現時点(2017/06/20)ではUnity2017のマニュアルにPostProcessingStackの内容が記述されていますが、日本語のマニュアルはまだ用意されていないようなので英語バージョンのUnityマニュアルを参考にしています。

また個別の設定を見ていきますが、実行サンプルは最後にまとめて動画で紹介したいと思います。

Debug Views

Debug Viewsはそれぞれの設定を変更する時に設定するとデバッグ時に便利な機能です。

DebugViews

それぞれの項目は対応するエフェクトを有効にした時に選択しデバッグ時に利用します。

利用したサンプルはそれぞれの項目で紹介します。

Fog

Fogは霧を発生させます。

Fogの設定

ここでのFogはDiferredレンダリングパスに霧の互換性を与える為にチェックを入れますが、実際のFogの設定はLightingウインドウのFogの設定をする必要があります。

Exclude Skybox(Deferred only)にチェックを入れるとスカイボックスを除外します。

それでは霧を確認してみましょう。

LightingウインドウのFogにチェックを入れ霧を発生させます。

LightingウインドウでFogにチェックを入れる

カメラのレンダリングパスをDeferredに変更します。

カメラのレンダリングパスをDeferredに設定する

PostProcessingStackのProfileのFogでExclude Skyboxにチェックを入れると

ExcludeSkyboxにチェックを入れた状態

↑のような感じになりました。

スカイボックスは除外されていますね。

Exclude Skyboxのチェックを外すと、

ExcludeSkyboxにチェックを入れない状態

↑のようにスカイボックスも霧で見えなくなりました。

Antialiasing

アンチエイリアスはギザギザを丸く表示する機能ですね。

Unityでカメラに映るゲームオブジェクトを滑らかに表示する
UnityのStandardAssetsのAntialiasingを使ってカメラに映るゲームオブジェクトを滑らかに表示してみます。

Antialiasingの設定

Methodで

Fast Appromixmate Anti-aliasingだと高速表示でPresetで品質を設定出来ます。
Temporal Anti-aliasingを選択すると高品質な処理で

Jitterは時間経過でどのようにするかの設定でSpreadで時間経過で広がりを大きくします。数値を大きくするとゲームオブジェクトの動きに合わせて滑らかにする効果が高くなるっぽいですが結果ぼやけた感じになります。

Blendingは調整値みたいなものでしょうか。

Stationaryの数値を大きくするとアンチエイリアス処理でゲームオブジェクトが大きく動く事を静止します。
Motionはゲームオブジェクトの動きに対するアンチエイリアスのかかり方の設定値です。

Sharpenはアンチエイリアスの鋭さを設定します。

それでは確認してみます。

アンチエイリアスをかけた時かけていない時の比較

左が何もしていない時、右がアンチエイリアスを有効にした時の状態です。

右側はなめらかな表示になっていますね。

Ambient Occlusion

アンビエントオクルージョンは環境光を遮って部分的に暗くする処理ですね。

Unityの環境光を遮って部分的に暗くする
UnityのStandardAssetsにあるScreen Space Ambient Obscurance、Screen Space Ambient Occlusionを使って環境光を遮って部分的に暗くしてみます。

Ambient Occlusionの設定

Intensityは強度
Radiusは適用範囲
Sample Countはサンプリングする設定値
Downsamplingはダウンサンプリングするかどうかで解像度を下げてパフォーマンスを向上させます。
Force Forward Compatibilityは強制でForwardモードの互換性をするかどうか
High Precision(forward)はForwardモードで高い精度にするかどうか
Ambient Only(Defferd + HDR)はDeferredモードの時に使用し周囲の証明のみ影響します。

それでは確認してみましょう。

アンビエントオクルージョンの比較

左が何もしていない状態、右がAmbient Occlusionを有効にした状態です。

暗くて全然わかりませんね・・・・(^_^;)

Debug ViewsにAmbient Occlusionを設定し確認してみます。

DebugViewsにAmbient Occlusionを設定する

↑のようにAmbient Occlusionで環境光を遮ってオブジェクトの境目等が暗くなっているのが確認出来ました。

Screen Space Reflection

Screen Space Reflectionは反射面に物体を表示する機能みたいです。

Screen Space Reflectionの設定

現時点では非常に重い処理みたいで品質に問題があるようです。

この機能を使うにはレンダリングパスがDeferredである必要があります。

Unityのバージョンが5.3.4f1であればUnityメニューのEdit→Project Settings→Playerで設定変更出来たんですが5.6.1f1では設定項目がないようですね・・(-_-)

5.6.1f1ではEdit→Project Settings→Graphicsの設定項目で

GraphicsSettings

Tier settingsのUse Defaultのチェックを外すとRendering Pathを変更出来るのでそこで設定を変更する事が出来ます。

Low、Midium、Highはハードウェアの処理速度に応じて自動で設定が割り当てられるんですかね?ちょっと不明です。

カメラのインスペクタのCameraのRendering Pathで設定を上書き出来るのでそちらをDeferredに変更する事も出来ます。

Screen Space Reflectionの設定項目を見ていきます。

Blend Typeは反射のブレンドするタイプ
Reflection Qualityは反射の質の設定
Max Distanceは反射の最大距離
Iteration Countは反射の反復回数
Step Sizeは粗さを表すみたいです。小さい値を設定するとシルエットの品質が良くなるようです。
Width Modifireは反射光線が抜ける幅の設定
Reflection Blurは反射のぼやかし度
Reflect Backfacesは裏側の見た目を推定するかどうか
Reflection Multipierは反射乗数
Fade Distanceは反射を弱くし始める距離
Fresnel Fadeは反射の増幅を抑え表面近くでよく見えます。
Fresnel Fade Powerは値を高くするとフレネルフェードを速くするそうです。(^_^;)

Fresnelは光の反射についての事でFadeは衰えさせるという意味なので、まぁそんな感じです・・・・(-_-)

Screen Edge Maskはスクリーンのエッジ付近でカメラの動きで反射がポップしないようにするみたいです。

専門的すぎて全然わかりません・・・。

Screen Space Reflectionはわたくしの環境ではうまく動作しなかった為、サンプル画像はありません。(-_-)

Depth Of Field

Depth Of Fieldはカメラの焦点が合っていない部分をぼかす機能ですね。

Unityで焦点が合っていない部分をぼかす
UnityのStandardAssetsに入っているDepthOfFieldとTilt Shiftを使い焦点の合わないゲームオブジェクトをぼかして表示してみます。

DepthOfFieldの設定

Focus Distanceは焦点を合わせる距離
Apertureはカメラの絞りで値を小さくすると浅くなります。
Use Camera FOVはカメラのFieldOfViewから自動的に焦点距離を計算するかどうか
Focal Lengthはレンズとフィルムの距離で焦点距離です。
Kernel Sizeはボケの最大半径を決定するコンボリューションカーネルサイズで値を大きくするとGPU処理が長く必要みたいです。

それでは確認してみます。

DepthOfFieldの比較

左が何もしていない状態、右がDepth Of Fieldを有効にした状態です。

Debug ViewsをFocus Planeにして確認してみます。

DebugViewsをFocusPlaneに設定

Focus Planeにするとカメラのフォーカスが合っている部分がより赤くなり、フォーカスが合わなくなると白黒へと変化します。

Motion Blur

Motion Blurは動きに合わせてぼやけさせる機能ですね。

Unityでカメラに映る画像をぼかす
UnityのStandardAssetsのBlurを使用してカメラに映る画像をぼかしてみます。

MotionBlurの設定

Shutter Angleはシャッター角度で値を大きくするとぼかしが強くなるみたいです。
Sample Countはサンプリングの回数です。
Frame Blendは複数のフレームのブレンドの強さで前の4フレームとのブレンドの強さを指定します。

それでは確認してみましょう。

モーションブラ-の比較

左が何もしていない状態、右がMotion Blurを有効にした状態です。

Debug ViewsをMotion Vectorsに設定して確認してみます。

DebugViewsをMotion Vectorsにする

↑のようにキャラクターの動きに合わせて小さい矢印が表示されMotion Blurがかかる方向がわかります。

Eye Adaptation

Eye Adaptationは暗い所から明るい所に行った時の明順応や明るい所から暗い所へ行った時の暗順応のエフェクトです。

Unityでカメラにコンポーネントを取り付けコントラストの調整をする
Unityのカメラに描画されたゲームオブジェクトのコントラストの調整をします。

↑の記事のContrast Stretchの機能と同じですね。

Luminosity Langeは輝度の範囲を指定します。
Minimum(EV)は最小値
Maximum(EV)は最大値

Auto exposureは自動露出の設定です。
Histgram Filterはヒストグラムの下限と上限を設定し、これ以外の値は破棄されます。
Minimum(EV)は最小値
Maximum(EV)は最大値
Dynamic Key Valueは平均輝度に基づいてキー値を自動的に設定するかどうか
Key ValueはDynamic Key Valueにチェックを入れなかった時に設定するキー値です。

Adaptationは適応の設定です。
Typeは自動露出をする場合はProgresive、そうでない場合はFixedを設定します。
TypeにProgresiveを設定した場合に表示される
Speed Upは暗い場所から明るい場所へと移動した時の適応速度
Speed Downは明るい場所から暗い場所へと移動した時の適応速度

になります。

Eye Adaptationはわたくしの環境では確認出来ない為、サンプル画像はありません。(-_-)

Bloom

Bloomは光の効果を加えるエフェクトです。

Unityでブルームを使って光の効果を加える
UnityのStandardAssetsにあるブルームを使って光の効果を加えてみます。

Bloomの設定

Intensityはブルームの強度
Threshold(Gamma)はしきい値
Soft Kneeはしきい値の遷移に関してで0だとハード、1だとソフトになります。
Radiusは半径で、スクリーンの解像度に依存せずベール効果を表す範囲を指定します。
Anti Frickerはチェックを入れると点滅のノイズを減らします。

Dirtはレンズの汚れやほこりの設定です。
Textureは汚れや埃の質感を表すテクスチャを設定します。
Intensityは強度です。

それでは確認してみます。

Dirt用のテクスチャはデフォルトで4つ用意されているのでそちらを使ってみます。

レンズの汚れ用のテクスチャを設定

テクスチャ選択でLensで検索するとすぐに出てきます。

Bloomの比較

左が何もしていない状態、右がBloomを有効にした状態です。

Color Grading

Color Gradingは色合いや輝度を変更するエフェクトです。

設定項目がいっぱいありますねぇ・・・・(^_^;)

ColorGradingのインスペクタ1

ToneMappingで種類を選択出来ます。
Neutralは色と彩度への影響を最小限に抑えて色合いを変化させるモードです。
Black Inは黒点の内部コントロールポイント
White Inは白点の内部コントロールポイント
Black Outは黒点の外部コントロールポイント
White Outは白点の外部コントロールポイント
White Levelはプレカーブの白点の調整
White Clipはポストカーブの白点の調整

うーん、なんじゃらほい・・・。

Filmic(ACES)はコントラストが強くなり、色と彩度への影響が強くなります。

Basicは色補正の設定項目です。
Post Exposureはシーン全体の露出を設定します。
Temperatureは色温度を設定します。暖色や寒色の設定。
Tintは色合いを補正します。
Hue Shiftは色の色相をシフトします。色合いをそのままに別の色へとシフトさせる感じ。
Saturationはそれぞれの色の強さを変化させます。
Contrastはトーン値の全体的な範囲を拡大・縮小させます。

Channel Mixerは出力チャンネルの全体的なミックスに対するカラーチャンネルの影響を設定します。
Red(赤)、Green(緑)、Blue(青)のボタンがあり各出力に対するカラーチャンネルの影響を指定します。

ColorGradingのインスペクタ2

Trackballsは色相や明度を変更する為に使用します。

LinearはLDRの場合に優先されるモードで、
Liftは信号全体の上げ下げ
Gammaはミッドレンジ、トーンのコントロール
Gainは信号の増加、ハイライトを明るくする。

LogはHDRの時に奨励されるモードで、
SlopeはGain関数、LinearのGainと同じ?
PowerはGamma関数、LinearのGammaと同じ?
Offsetは信号全体のシフト

となっています。

Grading Curveは色相、彩度、明度の特定の範囲を調整します。

それぞれのグラフ内で右クリックするとキーポイントを追加出来カーブを細かく設定する事も出来ます。

YRGBは入力と出力の強度を調整します。

YRGB

Yは全チャンネルに適用されるグローバルな輝度で、RGBは赤緑青の強度ですね。

Hue VS Hueは特定の色相をシフトします。

HueVSHue

X軸は入力、Y軸は出力になります。

Hue VS Satは特定の範囲の色相の彩度を設定します。

HueVSSat

X軸が色彩入力、Y軸が彩度になります。

Sat VS Satは入力彩度に応じて出力彩度を調整する時に使用します。

SatVSSat

X軸は入力彩度、Y軸は出力彩度。

Lum VS Satは特定の輝度に対する彩度を調整します。

LumVSSat

X軸が入力輝度でY軸が彩度です。

それでは確認してみます。

ColorGradingの比較

左が何もしていない状態、右がColor Gradingを有効にした状態です。

Debug ViewsをPre Grading Logにして確認してみます。

DebugViewsにPreGradingLogを設定

これは元のイメージを表示するだけなんでしょうか?ちょっとわかりません。

Debug ViewsにLug Lutを設定し確認してみます。

DebugViewsにLog Lutを設定

画面の上にColor Gradingの出力LUT(ルックアップテクスチャ)が表示されます。

User Lut

User Lutは画面上のピクセルをLUTで新しい値に置き換えます。

UserLut

LUTにはカスタムルックアップテクスチャを設定します。
Contributionは混合の係数

それでは確認してみます。

UserLutの比較

↑のようにLUTにあまり関係ないテクスチャを設定したので色合いがおかしくなっていますが、

左が何もしていない状態で、右がUser Lutを有効にした状態です。

DebugViewsにUser Lutを選択すると

DebugViewsにUserLutを設定

↑のように画面の上にLUTが表示されます。

Chromatic Aberration

Chromatic Aberrationはカメラのレンズがすべての色を同じ点に集束させない事によって起こる現象らしいです。

Unityでカメラレンズを覗きこんだような効果を出す
UnityのStandardAssetsにあるVignetteAndChromaticAberrationを使ってカメラレンズを覗きこんだような効果を出してみます。

暗い部分と明るい部分の境界辺りに現れるカラーの線みたいなやつです。

ChromaticAberration

Spectral Textureはカスタムフリンジカラーに使用されるテクスチャ
Intensityは強度

になります。

それでは確認してみましょう。

ChromaticAberrationの比較

左が何もしていない状態で、右がChromatic Aberrationを有効にした状態です。

Grain

Grainは画面上にノイズを入れるエフェクトです。

Unityでカメラに映る映像にノイズを入れる
UnityでStandardAssetsに入っているNoiseAndGrain、Noise And Scratchesを使ってカメラに映る映像にノイズを入れる

Grain

Intensityは強度
Luminance Contributionはシーンの輝度に応じてノイズ応答曲線を制御します。値が小さいほど黒いノイズが少なくなります(粒子が目立つようになる?)。
Sizeは粒のサイズ
Colordはノイズの粒に色を設定するかどうか

それでは確認してみましょう。

Grainの比較

左が何もしていない状態、右がGrainを有効にした状態です。

Vignette

Vignetteはカメラの外枠の方にカバーを被せたような効果を出します。

Unityでカメラレンズを覗きこんだような効果を出す
UnityのStandardAssetsにあるVignetteAndChromaticAberrationを使ってカメラレンズを覗きこんだような効果を出してみます。

Vignette

Modeには2つあり
ClassicはVignetteの位置や形状、強度等をコントロール出来ます。

Colorはビネットの色
Centerは中心点
Intensityは強度
Smoothnessは境界の滑らかさ
Roundnessはビネットを円に近くするかの値
Roundedはビネットを完全に丸くするかどうか

それでは確認してみましょう。

Vignetteの比較

左が何もしていない状態、右がVignetteを有効にした状態です。

Dithering

ディザリングは意図的にノイズを発生させて量子化誤差をランダム化するらしいです・・・謎。

少ない色の種類で他の色も表現する為の方法という感じでしょうか?

設定項目もないし効果もよくわからない為、省略させて頂きます。(-_-)

動画で確認

最後に動画で個別にエフェクトを有効にし設定を変更してみます。

本来は複数のエフェクトを同時に利用出来ますが、今回は個別のエフェクトの確認をする為にひとつひとつチェックしてみていきます。

↑のようになりました。

前述していますが、一部わたくしの環境では動作確認が出来なかった為に確認していない項目もあります。(._.)

終わりに

ずーっとUnity5.3.4f1だったので最近までImage Effectsを利用してカメラに映る映像を変更する記事を書いていましたが、試しにUnity5.6.1f1に変更した所、

PostProcessingStackなるものが登場していたので使ってみました。

わたくしのパソコンのスペックが足りない為、確認ぐらいしか出来ませんでしたが・・・・(^_^;)

ついでに言うとUnity2017のベータ版をインストールしてみようと思いましたが64bit版しかないので断念しました。

なんとかして今のよりいいパソコンを手に入れないとなぁ・・・、1万ぐらいでないかなぁ(T_T)

PostProcessingStackの存在のおかげ(せい)で溜め込んでいたImage Effectsの記事を一気に公開する必要が出てブログの更新の余裕がまたなくなりましたな・・・(^_^;)

参考サイト

レンダリングパス

PostProcessing

Post-processing overview内からそれぞれの項目を辿れます。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます