-->




Shader "FullScreen/FSP_InvertColor"
{
SubShader
{
Pass
{
Cull Off
ZWrite Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
//後述のLinearToSRGB、SRGBToLinearで必要なライブラリ
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
//これをインクルードすると頂点シェーダーやVaryingsが自動で定義される
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
half4 frag(Varyings input) : SV_Target
{
//input.texcoord は自動的に渡されるUV座標
float2 uv = input.texcoord;
//_BlitTexture は Blit.hlsl 内で定義済された、全画面のキャプチャー画像情報
//そこからinputで受け取ったuv座標のピクセル色を取得
half4 col = SAMPLE_TEXTURE2D(_BlitTexture, sampler_LinearClamp, uv);
//ピクセル色をリニア空間ルールから一旦ガンマ空間ルールへ変換
half3 sRGB = LinearToSRGB(col.rgb);
//ガンマ空間ルール上で色を反転
sRGB = 1 - sRGB;
//色をガンマ空間ルールからリニア空間ルールに戻す
col.rgb = SRGBToLinear(sRGB);
return col;
}
ENDHLSL
}
}
}
//これをインクルードすると頂点シェーダーやVaryingsが自動で定義される
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"

public UniversalRendererData rendererData; // URPのRendererアセットをアサイン
public void ToggleEffect(bool s)
{
// リストの中から特定のFeatureを探して切り替える
var feature = rendererData.rendererFeatures.Find(f => f.name == "MyFullScreenPass");
if (feature != null)
{
feature.SetActive(s);
}
}