イメージエフェクトは、Unity の画像に用いるポストプロセスの一種です。
OnRenderImage 関数を持つスクリプトならばすべて、ポストプロセス エフェクトとして機能します。カメラ オブジェクトにちょっと加えてみてください。スクリプト関数にしたがって全体のイメージエフェクト ロジックが働きます。
このスクリプト関数は 2つの引数を受け取ります。 RenderTexture と それがレンダリングされる移動先です。 通常、ポストプロセス エフェクトにはソース画像を読み、 ソース画像上で計算し、 その結果を与えられた移動先 (例えば Graphics.Blit) にレンダリングする Shaders が使用されます。 たいてい、移動先テクスチャのすべてのピクセルが、イメージエフェクトによって置き換られます。
複数のポストプロセス エフェクトがカメラに加えられる場合、 インスペクターに表示される順番で実行されます。 最も上のエフェクトが最初に実施されます。 1つのエフェクトの結果は「ソース画像」として次に渡されます。 内部的には、Unity がエフェクトの中間結果を保持する一時的なレンダーテクスチャを作成します。
注意事項
Cull Off ZWrite Off ZTest Always
ステートであるべきです。デフォルトでは、画像エフェクトはすべてのシーンがレンダリングされてから実行されます。 しかし、場合によってはすべての 不透明オブジェクトを終了した後 (ただし、スカイボックスや透明がレンダリングされる前) でエフェクトを実行するほうが望ましい場合があります。 Depth of Field のようなデプスに基づくエフェクトが そうなります。
OnRenderImage
関数に ImageEffectOpaque 属性を加えると、
それを行うことができます。
イメージエフェクトが一度に異なる画面関連のテクスチャをサンプリングすると、テクスチャ調整の仕方を考えるうえでプラットフォームの違いに気を付けなければならない場合があります。
一般的なシナリオでは、「ソース」テクスチャエフェクトとカメラのデプステクスチャには、アンチアイリアス設定によって異なる垂直方向の調整が必要です。詳細は プラットフォーム別のレンダリングの違い を参照してください。
Effects package には独自のイメージエフェクトの基礎となるいくつかの base と helper クラスが含まれています。すべてのコードは UnityStandardAssets.ImageEffects
名前空間にあります。