Version: 5.6
Monitors
リフレクションプローブ

ポストプロセスエフェクトの作成

ポストプロセス は Unity でレンダリングした画像にエフェクトを適用する方法の 1 つです。

Any Unity script that uses the OnRenderImage function can act as a post-processing effect. Add it to a Camera GameObject for the script to perform post-processing.

OnRenderImage 関数

The OnRenderImage Unity Scripting API function receives two arguments:

ポストプロセスエフェクトには、しばしば シェーダー が使われます。シェーダーはソース画像を読み込み、演算を行い、結果を目的のレンダリング先に描画します (例えば Graphics.Blit を使用)。ポストプロセスエフェクトは、完全にレンダリング先のピクセルを置き換えます。

それぞれを コンポーネント として、カメラに複数のポストプロセスエフェクトを行うことが可能です。Unity はそれらをスタックとして実行します。エフェクトが Inspector のポストプロセスコンポーネントでリストされている順序で、Inspector の一番上にあるものが最初にレンダリングされます。この場合、最初のポストプロセスコンポーネントの結果が、「ソース画像」として次のポストプロセスコンポーネントに渡されます。内部では、Unity は 1 つ以上の一時的なレンダーテクスチャを作成して、この中間的な結果を維持します。

ポストプロセススタックにあるポストプロセスコンポーネントのリストは、それらが適用される順番を指定しません。

注意点

  • レンダリング先のレンダーテクスチャは null にすることができます。これは「画面にレンダリングする」 (つまり、バックバッファー) を意味します。これは、カメラの最後のポストプロセスエフェクトで発生します。

  • OnRenderImage が終了すると、Unity はレンダリング先のレンダーテクスチャがアクティブなレンダーターゲットであると仮定します。 一般に、Graphics.Blit またはレンダリング先のレンダーテクスチャへの手動レンダリングは、最後のレンダリング操作であるべきです。

  • ポストプロセスエフェクトシェーダで深度バッファの書き込みとテストをオフにします。 これにより、Graphics.Blit が意図しない値を目的先の Z バッファに書き込まないようにします。 ほとんどすべてのポストエフェクトシェーダーパスには Cull Off ZWrite Off ZTest Always が含まれている必要があります。

  • 元のシーンレンダリングのステンシルバッファー値、または深度バッファー値を使用するには、Graphics.SetRenderTarget を使用して、元のシーンレンダーの深度バッファを深度ターゲットとして明示的にバインドします。最初のソース画像エフェクトの深度バッファーをバインドする深度バッファーとして渡します。

不透明オブジェクトの後のポストプロセスエフェクト

デフォルトでは、Unity はシーンすべてをレンダリングした後に、ポストプロセスエフェクトを実行します。場合によっては、シーン内のすべての不透明なオブジェクトをレンダリングした後、ただし、その他 (スカイボックス またはtransparencies) をレンダリングする前に、ポストプロセスエフェクトをレンダリングしたい場合があるかもしれません。Depth of Field のような深度ベースのエフェクトでは、これをよく使用します。

To do this, add an ImageEffectOpaque attribute on the OnRenderImage Unity Scripting API function.

様々なプラットフォームのテクスチャ座標

ポストプロセスエフェクトが異なる画面に関連したテクスチャを一度にサンプリングする場合、異なるプラットフォームがテクスチャ座標をどのように使うかを理解する必要があります。一般的には、エフェクトの「ソース」テクスチャとカメラの 深度テクスチャ には、アンチエイリアス設定によって異なる垂直座標が必要です。Unity のユーザーマニュアル プラットフォーム別のレンダリングの違い を参照してください。

関連情報


Monitors
リフレクションプローブ
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961