皆さんこんにちは、趙です。
前回の記事では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 オプションが、カスタムの後処理効果である追加効果に表示されることがわかります。
この時点で、カスタム後処理エフェクトが追加されました。