chore: checkpoint current workspace changes
This commit is contained in:
262
docs/reference/NahidaUnity/Shaders/URPGenshinPostProcess.shader
Normal file
262
docs/reference/NahidaUnity/Shaders/URPGenshinPostProcess.shader
Normal file
@@ -0,0 +1,262 @@
|
||||
Shader "URPGenshinPostProcess"
|
||||
{
|
||||
HLSLINCLUDE
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
||||
|
||||
#pragma multi_compile_local_fragment _ _BLOOM_COLOR _BLOOM_BRIGHTNESS
|
||||
#pragma multi_compile_local_fragment _ _TONEMAPPING
|
||||
|
||||
float2 _BlitTexture_TexelSize;
|
||||
half _BloomThreshold;
|
||||
half _BloomIntensity;
|
||||
half4 _BloomWeights;
|
||||
half4 _BloomColor;
|
||||
half _BlurRadius;
|
||||
half _Exposure;
|
||||
half _Contrast;
|
||||
half _Saturation;
|
||||
|
||||
TEXTURE2D(_BloomTextureA);
|
||||
TEXTURE2D(_BloomTextureB);
|
||||
TEXTURE2D(_BloomTextureC);
|
||||
TEXTURE2D(_BloomTextureD);
|
||||
|
||||
const static int kernelSize = 9;
|
||||
const static float kernelOffsets[9] = {
|
||||
-4.0,
|
||||
-3.0,
|
||||
-2.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
1.0,
|
||||
2.0,
|
||||
3.0,
|
||||
4.0,
|
||||
};
|
||||
const static float kernel[9] = {
|
||||
0.01621622,
|
||||
0.05405405,
|
||||
0.12162162,
|
||||
0.19459459,
|
||||
0.22702703,
|
||||
0.19459459,
|
||||
0.12162162,
|
||||
0.05405405,
|
||||
0.01621622
|
||||
};
|
||||
|
||||
half4 Prefilter(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
half4 color = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv);
|
||||
|
||||
#if _BLOOM_BRIGHTNESS
|
||||
half brightness = max(max(color.r, color.g), color.b);
|
||||
color.rgb *= saturate(brightness - _BloomThreshold);
|
||||
#else
|
||||
color.rgb = max(color.rgb - _BloomThreshold, 0.0);
|
||||
#endif
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
half4 GaussianBlur(float2 uv, float2 direction)
|
||||
{
|
||||
float2 offset = _BlurRadius * _BlitTexture_TexelSize * direction;
|
||||
half4 color = 0.0;
|
||||
|
||||
UNITY_UNROLL
|
||||
for (int i = 0; i < kernelSize; i++)
|
||||
{
|
||||
float2 sampleUV = uv + kernelOffsets[i] * offset;
|
||||
color += kernel[i] * SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, sampleUV);
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
half4 HorizontalBlur1x(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
return GaussianBlur(uv, float2(1.0, 0.0));
|
||||
}
|
||||
|
||||
half4 HorizontalBlur2x(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
return GaussianBlur(uv, float2(2.0, 0.0));
|
||||
}
|
||||
|
||||
half4 VerticalBlur1x(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
return GaussianBlur(uv, float2(0.0, 1.0));
|
||||
}
|
||||
|
||||
half4 VerticalBlur2x(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
return GaussianBlur(uv, float2(0.0, 2.0));
|
||||
}
|
||||
|
||||
half4 Upsample(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
half4 color = 0.0;
|
||||
half4 weights = _BloomWeights;
|
||||
|
||||
color += SAMPLE_TEXTURE2D_X(_BloomTextureA, sampler_LinearClamp, uv) * weights.x;
|
||||
color += SAMPLE_TEXTURE2D_X(_BloomTextureB, sampler_LinearClamp, uv) * weights.y;
|
||||
color += SAMPLE_TEXTURE2D_X(_BloomTextureC, sampler_LinearClamp, uv) * weights.z;
|
||||
color += SAMPLE_TEXTURE2D_X(_BloomTextureD, sampler_LinearClamp, uv) * weights.w;
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
half3 Tonemap(half3 color)
|
||||
{
|
||||
half3 c0 = (1.36 * color + 0.047) * color;
|
||||
half3 c1 = (0.93 * color + 0.56) * color + 0.14;
|
||||
return saturate(c0 / c1);
|
||||
}
|
||||
|
||||
half4 ColorGrading(Varyings input) : SV_TARGET
|
||||
{
|
||||
float2 uv = UnityStereoTransformScreenSpaceTex(input.texcoord);
|
||||
half4 baseMap = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uv);
|
||||
half3 color = baseMap.rgb;
|
||||
half alpha = baseMap.a;
|
||||
|
||||
#if _BLOOM_COLOR || _BLOOM_BRIGHTNESS
|
||||
// Bloom
|
||||
half3 bloom = SAMPLE_TEXTURE2D_X(_BloomTextureA, sampler_LinearClamp, uv).rgb;
|
||||
bloom *= _BloomIntensity * _BloomColor.rgb;
|
||||
color += bloom;
|
||||
#endif
|
||||
|
||||
// Exposure
|
||||
color *= _Exposure;
|
||||
|
||||
#if _TONEMAPPING
|
||||
// Tonemapping
|
||||
color = Tonemap(color);
|
||||
#endif
|
||||
|
||||
// Contrast
|
||||
half3 colorLog = LinearToLogC(color);
|
||||
colorLog = lerp(ACEScc_MIDGRAY, colorLog, _Contrast);
|
||||
color = LogCToLinear(colorLog);
|
||||
|
||||
// Saturation
|
||||
half luma = dot(color, half3(0.2126, 0.7152, 0.0722));
|
||||
color = lerp(luma, color, _Saturation);
|
||||
|
||||
return float4(color, alpha);
|
||||
}
|
||||
|
||||
ENDHLSL
|
||||
|
||||
Subshader
|
||||
{
|
||||
Tags { "RenderPipeline" = "UniversalPipeline" }
|
||||
ZWrite Off ZTest Always Blend Off Cull Off
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "Blit"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment FragBilinear
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomPrefilter"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment Prefilter
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomHorizontalBlur1x"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment HorizontalBlur1x
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomHorizontalBlur2x"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment HorizontalBlur2x
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomVerticalBlur1x"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment VerticalBlur1x
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomVerticalBlur2x"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment VerticalBlur2x
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "BloomUpsample"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment Upsample
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "ColorGrading"
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment ColorGrading
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user