イメージエフェクト
アンチエイリアス

イメージエフェクト

イメージエフェクトは、Unity の画像に用いるポストプロセスの一種です。

OnRenderImage 関数を持つスクリプトならばすべて、ポストプロセス エフェクトとして機能します。カメラ オブジェクトにちょっと加えてみてください。スクリプト関数にしたがって全体のイメージエフェクト ロジックが働きます。

OnRenderImage 関数

このスクリプト関数は 2つの引数を受け取ります。 RenderTexture と それがレンダリングされる移動先です。 通常、ポストプロセス エフェクトにはソース画像を読み、 ソース画像上で計算し、 その結果を与えられた移動先 (例えば Graphics.Blit) にレンダリングする Shaders が使用されます。 たいてい、移動先テクスチャのすべてのピクセルが、イメージエフェクトによって置き換られます。

複数のポストプロセス エフェクトがカメラに加えられる場合、 インスペクターに表示される順番で実行されます。 最も上のエフェクトが最初に実施されます。 1つのエフェクトの結果は「ソース画像」として次に渡されます。 内部的には、Unity がエフェクトの中間結果を保持する一時的なレンダーテクスチャを作成します。

注意事項

  • 移動先のレンダーテクスチャは null、つまり「スクリーンにレンダリング」(バックバッファ) でも可能です。これは通常、カメラの最後の画像にポストプロセス エフェクトを加えるときに起こります。
  • OnRenderImage が終了すると、たいてい、移動先のレンダーテクスチャがアクティブなレンダーターゲットになっています。通常、移動先テクスチャへの Graphics.Blit か手動レンダリングが最終レンダリング操作となります。
  • 通常は、イメージエフェクト シェーダーでのデプスバッファの書き込みとテストをオフにすることを推奨します。そうしないと、Graphics.Blit を実行するときに、デプスバッファが意図しない値を移動先 Z のバッファに書き込んでしまうからです。ほぼすべてのイメージエフェクト シェーダー パスは Cull Off ZWrite Off ZTest Always ステートであるべきです。

不透明のイメージエフェクト後

デフォルトでは、画像エフェクトはすべてのシーンがレンダリングされてから実行されます。 しかし、場合によってはすべての 不透明オブジェクトを終了した後 (ただし、スカイボックスや透明がレンダリングされる前) でエフェクトを実行するほうが望ましい場合があります。 Depth of Field のようなデプスに基づくエフェクトが そうなります。

OnRenderImage 関数に ImageEffectOpaque 属性を加えると、 それを行うことができます。

異なるプラットフォーム上のテクスチャ調整

イメージエフェクトが一度に異なる画面関連のテクスチャをサンプリングすると、テクスチャ調整の仕方を考えるうえでプラットフォームの違いに気を付けなければならない場合があります。

一般的なシナリオでは、「ソース」テクスチャエフェクトとカメラのデプステクスチャには、アンチアイリアス設定によって異なる垂直方向の調整が必要です。詳細は プラットフォーム別のレンダリングの違い を参照してください。

スタンダードアセットの helper イメージエフェクト コードの使用

Effects package には独自のイメージエフェクトの基礎となるいくつかの base と helper クラスが含まれています。すべてのコードは UnityStandardAssets.ImageEffects 名前空間にあります。

関連事項

イメージエフェクト
アンチエイリアス