ポストプロセス は 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.
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 のユーザーマニュアル プラットフォーム別のレンダリングの違い を参照してください。
画面の各ピクセルに最も近い不透明表面までの距離を求めるために、深度テクスチャ がしばしば、画像のポストプロセシングに使用されます。
HDR レンダリングでは、ImageEffectTransformsToLDR 属性は、トーンマッピングの使用を示唆します。
ポストプロセシングの実行には、コマンドバッファ― も使用できます。
ポストプロセスエフェクトで一時的なレンダーテクスチャを取得し演算を行うには、RenderTexture.GetTemporary を使用します。
Unity ユーザーマニュアル 頂点シェーダーとフラグメントシェーダーのプログラミング も参照してください。
2017–05–24 編集レビュー 無しにパブリッシュされたページ
5.6 の新機能