Unity の PostProcessing 後処理の使用の概要

皆さんこんにちは、趙です。
前回の記事ではUnityの後処理PostProcessingにバグがあるとその解決策を紹介しましたが、ここではついでにPostProcessingの使い方を紹介します。

1. インストール

PackageManager を開き、Post を検索すると、左側に検索結果が表示されるので、選択し、[Install] を選択してインストールします。
ここに画像の説明を挿入
ここに画像の説明を挿入

インストールが完了すると、パッケージ内に PostProcessing フォルダーが表示されます。

2、使用する

1.PostProcessLayerコンポーネントを追加します。

このコンポーネントは通常、カメラの上部に追加されます。
ここに画像の説明を挿入

2.PostProcessVolumeコンポーネントを追加する

このコンポーネントをカメラに追加しないでください。その理由は後述します。空のオブジェクトを構築して、それに追加します。
ここに画像の説明を挿入

3. プロファイルの作成

ここに画像の説明を挿入

「新規」ボタンをクリックすると、新しいプロファイル ファイルが自動的に作成されます。もちろん、古いファイルをここに直接ドラッグすることもできます。
ここに画像の説明を挿入

新しいファイルを作成すると、Unity が実際に新しいファイルを作成したことがわかります。

4. エフェクトを追加する

ここに画像の説明を挿入

「エフェクトを追加」ボタンをクリックします
ここに画像の説明を挿入
ここに画像の説明を挿入

いずれかのエフェクトを選択し、パラメーターを設定します。ここではブルーム効果をランダムに設定してみます。

5. 設定を変更する

この時、シーン内にあるものにはブルームの効果がかかっていないことが分かりました。
ここに画像の説明を挿入

設定をいくつか変更しましょう。理由については心配しないでください。後で詳しく説明します。
最初に IsGlobal オプションをチェックします。
ここに画像の説明を挿入

次に、PostProcessLayer に移動すると、現在何も選択されていないためレイヤーが設定されていないという警告が表示されます。
ここに画像の説明を挿入

EveryThing をランダムに選択し、以下の警告は無視してください。これについては後で説明します。
ここに画像の説明を挿入

この時点で、ブルーム効果によりシーンがライトアップされていることがわかりました。
ここに画像の説明を挿入

6. レイヤーを作成する

戻って今の警告を見てください
ここに画像の説明を挿入

この警告は、EveryThing と Default をレイヤー マスクとして使用しないことを意味します。通常、PostProcessLayerは自分で指定したレイヤーの体積を見れば良いのですが、全レイヤーやデフォルトレイヤーを追加すると、体積のないオブジェクトが無駄に追加され、無駄に計算量が増えてしまいます。この点は、一般の美術関係者が最も見落とし、間違いやすい点です。
新しいレイヤーを構築します
ここに画像の説明を挿入

見やすくするために、新しいレイヤーに PostProcess という名前を付けました。
ここに画像の説明を挿入

次に、ボリュームが配置されているオブジェクトのレイヤーを PostProcess に設定します。
ここに画像の説明を挿入

PostProcessLayer で指定された Layer も PostProcess のみに設定されます
ここに画像の説明を挿入

3、PostProcessLayerの設定

PostProcessLayer の設定について詳しく説明します。
ここに画像の説明を挿入

1、ボリュームブレンディング

1.トリガー

ここでは、PostProcessLayer がターゲットとするカメラを指定します。通常、これはカメラに掛けるために使用されるため、デフォルトは自分自身であるか、「これ」をクリックしてオブジェクト自体のカメラを指定します。
2. Layer は、
この PostProcessLayer がどのレイヤーのボリュームをレンダリングできるかを指定します。

2、アンチエイリアス

アンチエイリアス設定
ここに画像の説明を挿入

3、NaNの伝播を停止する

Unity を開くと、レンダリングされていないピクセルが自動的に黒に置き換えられます。
ここに画像の説明を挿入

説明で述べたように、GLES2 プラットフォームでは、この設定は効果がありません。

4、カメラターゲットに直接

ここに画像の説明を挿入

後処理には、最終的な BLOB をカメラ レンダー ターゲットに使用します。
プロンプトには、これをチェックするとオーバーヘッドが削減されますが、古いバージョンで OnRenderImage を使用する画像効果の互換性が失われることが示されています。

5、ツールキット

ここに画像の説明を挿入

1.フレームをEXRにエクスポート

後処理はEXR形式でエクスポート可能

2.すべてのレイヤーボリュームを選択します

シーン内のすべての後処理ボリュームをすばやく選択します

3.アクティブなボリュームをすべて選択します

シーン内のすべてのアクティブなボリュームをすばやく選択します

6、カスタムエフェクトソート

カスタム後処理のレンダリング順序を変更するために使用されます。

4、ポストボリューム設定

ここに画像の説明を挿入

1、グローバルです

現在のボリュームがグローバルであるかどうかを設定します。
グローバルとは、このボリュームがどこに配置されても有効になることを意味します。
ここに画像の説明を挿入

IsGlobal が削除されると、BlendDistance が表示されます
ここに画像の説明を挿入

プロンプトから、ローカルの後処理ボリュームを使用したい場合は、最初に衝突ボディを追加する必要があることがわかります。このブレンド距離は、ゼロから後処理を行う過程での過渡的なブレンド効果です。
ここに画像の説明を挿入

そこで球体コライダーを追加します
ここに画像の説明を挿入

このボリュームには 2 つの範囲表示があることがわかります。1 つはコリジョン ボディの範囲で、もう 1 つは BlendDistance の範囲です。
ここに画像の説明を挿入

このとき、カメラを動かしてトリガー範囲内に入ると後処理効果が表示されますが、範囲外に出ると後処理効果は表示されなくなります。
ボリュームにはグローバル機能とローカル機能があり、レイヤーには座標との関係があるため、カメラにボリュームをぶら下げないでください。多くのアート関係者がこれを無視し、間違いを犯すことになります。

2、重量

ここに画像の説明を挿入

シーン内の現在のボリュームのウェイト値。

3、優先順位

ここに画像の説明を挿入

スタック内の現在のボリュームの優先レベル。

4、プロフィール

実際に後処理効果を設定するプロファイル ファイルの仕様。

5. カスタム後処理エフェクト

カスタム後処理には 3 つのことが必要です。

1、シェーダー

ここでは、グラフのエッジの効果を見つけるために偏導関数を書きます。

Shader "azhao/LineStyle"
{
	HLSLINCLUDE

#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"

	TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
	float _lineStrength = 1.0;
	float4 _lineColor = (0, 0, 0, 0);
	float4 _baseColor = (1, 1, 1, 0);

	float4 Frag(VaryingsDefault i) : SV_Target
	{
		float4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
		float grayscale = col.r * 0.2126729f + col.g * 0.7151522f + col.b * 0.0721750f;
		float ddVal = (saturate(ddx(grayscale) + ddy(grayscale))*_lineStrength);
		float3 finalRGB = _baseColor.rgb * (1.0 - ddVal) + _lineColor.rgb * ddVal;
		float4 finalCol = float4(finalRGB, 1);
		return finalCol;
	}

		ENDHLSL

		SubShader
	{
		Cull Off ZWrite Off ZTest Always

			Pass
		{
			HLSLPROGRAM

				#pragma vertex VertDefault
				#pragma fragment Frag

			ENDHLSL
		}
	}	
}

有効にするには #include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl" を使用する必要があるため、このシェーダーは HLSL で記述する必要があることに注意してください。

2. カスタムエフェクトのパラメータクラス

using System;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

[Serializable]
[PostProcess(typeof(LineStyleRender), PostProcessEvent.AfterStack, "azhao/LineStyle")]
public class LineStyle : PostProcessEffectSettings
{
    [Range(0f, 20f), Tooltip("Strength of line.")]
    public FloatParameter lineStrength = new FloatParameter { value = 1f };

    [ColorUsage(false), Tooltip("Color of line.")]
    public ColorParameter lineColor = new ColorParameter { value = Color.black};

    [ColorUsage(false), Tooltip("Color of base.")]
    public ColorParameter baseColor = new ColorParameter { value = Color.white };

}

これは選択時のカスタムパラメータのパスを指定します。ここでは「azhao/LineStyle」です。次に、プレーヤーには、上記のシェーダーで使用されるいくつかのカスタム パラメーターの入力も与えられます。

3. カスタムエフェクトの実装クラス

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class LineStyleRender : PostProcessEffectRenderer<LineStyle>
{
    public override void Render(PostProcessRenderContext context)
    {
        var sheet = context.propertySheets.Get(Shader.Find("azhao/LineStyle"));
        sheet.properties.SetFloat("_lineStrength", settings.lineStrength);
        sheet.properties.SetColor("_lineColor", settings.lineColor);
        sheet.properties.SetColor("_baseColor", settings.baseColor);
        context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
    }
}

ここでは、カスタム パラメーターが取得され、シェーダーに設定され、最後に全画面でレンダリングされます。

上記の 3 つの手順を完了すると、指定した azhao/LineStyle オプションが、カスタムの後処理効果である追加効果に表示されることがわかります。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

この時点で、カスタム後処理エフェクトが追加されました。

おすすめ

転載: blog.csdn.net/liweizhao/article/details/131629999