Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
DMD3502-Cutscene-JacobTomassi/Cutscene/Assets/LowpolySimpleHouse/PostProcessing/Resources/Shaders/BuiltinDebugViews.shader
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
257 lines (192 sloc)
6.9 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Shader "Hidden/Post FX/Builtin Debug Views" | |
{ | |
CGINCLUDE | |
#include "UnityCG.cginc" | |
#include "Common.cginc" | |
#pragma exclude_renderers d3d11_9x | |
sampler2D_float _CameraDepthTexture; | |
sampler2D_float _CameraDepthNormalsTexture; | |
sampler2D_float _CameraMotionVectorsTexture; | |
float4 _CameraDepthTexture_ST; | |
float4 _CameraDepthNormalsTexture_ST; | |
float4 _CameraMotionVectorsTexture_ST; | |
#if SOURCE_GBUFFER | |
sampler2D _CameraGBufferTexture2; | |
float4 _CameraGBufferTexture2_ST; | |
#endif | |
// ----------------------------------------------------------------------------- | |
// Depth | |
float _DepthScale; | |
float4 FragDepth(VaryingsDefault i) : SV_Target | |
{ | |
float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv, _CameraDepthTexture_ST)); | |
depth = Linear01Depth(depth) * _DepthScale; | |
float3 d = depth.xxx; | |
#if !UNITY_COLORSPACE_GAMMA | |
d = GammaToLinearSpace(d); | |
#endif | |
return float4(d, 1.0); | |
} | |
// ----------------------------------------------------------------------------- | |
// Normals | |
float3 SampleNormal(float2 uv) | |
{ | |
#if SOURCE_GBUFFER | |
float3 norm = tex2D(_CameraGBufferTexture2, uv).xyz * 2.0 - 1.0; | |
return mul((float3x3)unity_WorldToCamera, norm); | |
#else | |
float4 cdn = tex2D(_CameraDepthNormalsTexture, uv); | |
return DecodeViewNormalStereo(cdn) * float3(1.0, 1.0, -1.0); | |
#endif | |
} | |
float4 FragNormals(VaryingsDefault i) : SV_Target | |
{ | |
float3 n = SampleNormal(UnityStereoScreenSpaceUVAdjust(i.uv, _CameraDepthNormalsTexture_ST)); | |
#if UNITY_COLORSPACE_GAMMA | |
n = LinearToGammaSpace(n); | |
#endif | |
return float4(n, 1.0); | |
} | |
// ----------------------------------------------------------------------------- | |
// Motion vectors | |
float _Opacity; | |
float _Amplitude; | |
float4 _Scale; | |
float4 FragMovecsOpacity(VaryingsDefault i) : SV_Target | |
{ | |
float4 src = tex2D(_MainTex, i.uv); | |
return float4(src.rgb * _Opacity, src.a); | |
} | |
// Convert a motion vector into RGBA color. | |
float4 VectorToColor(float2 mv) | |
{ | |
float phi = atan2(mv.x, mv.y); | |
float hue = (phi / UNITY_PI + 1.0) * 0.5; | |
float r = abs(hue * 6.0 - 3.0) - 1.0; | |
float g = 2.0 - abs(hue * 6.0 - 2.0); | |
float b = 2.0 - abs(hue * 6.0 - 4.0); | |
float a = length(mv); | |
return saturate(float4(r, g, b, a)); | |
} | |
float4 FragMovecsImaging(VaryingsDefault i) : SV_Target | |
{ | |
float4 src = tex2D(_MainTex, i.uv); | |
float2 mv = tex2D(_CameraMotionVectorsTexture, i.uv).rg * _Amplitude; | |
#if UNITY_UV_STARTS_AT_TOP | |
mv.y *= -1.0; | |
#endif | |
float4 mc = VectorToColor(mv); | |
float3 rgb = src.rgb; | |
#if !UNITY_COLORSPACE_GAMMA | |
rgb = LinearToGammaSpace(rgb); | |
#endif | |
rgb = lerp(rgb, mc.rgb, mc.a * _Opacity); | |
#if !UNITY_COLORSPACE_GAMMA | |
rgb = GammaToLinearSpace(rgb); | |
#endif | |
return float4(rgb, src.a); | |
} | |
struct VaryingsArrows | |
{ | |
float4 vertex : SV_POSITION; | |
float2 scoord : TEXCOORD; | |
float4 color : COLOR; | |
}; | |
VaryingsArrows VertArrows(AttributesDefault v) | |
{ | |
// Retrieve the motion vector. | |
float4 uv = float4(v.texcoord.xy, 0.0, 0.0); | |
#if UNITY_UV_STARTS_AT_TOP | |
uv.y = 1.0 - uv.y; | |
#endif | |
float2 mv = tex2Dlod(_CameraMotionVectorsTexture, uv).rg * _Amplitude; | |
#if UNITY_UV_STARTS_AT_TOP | |
mv.y *= -1.0; | |
#endif | |
// Arrow color | |
float4 color = VectorToColor(mv); | |
// Make a rotation matrix based on the motion vector. | |
float2x2 rot = float2x2(mv.y, mv.x, -mv.x, mv.y); | |
// Rotate and scale the body of the arrow. | |
float2 pos = mul(rot, v.vertex.zy) * _Scale.xy; | |
// Normalized variant of the motion vector and the rotation matrix. | |
float2 mv_n = normalize(mv); | |
float2x2 rot_n = float2x2(mv_n.y, mv_n.x, -mv_n.x, mv_n.y); | |
// Rotate and scale the head of the arrow. | |
float2 head = float2(v.vertex.x, -abs(v.vertex.x)) * 0.3; | |
head *= saturate(color.a); | |
pos += mul(rot_n, head) * _Scale.xy; | |
// Offset the arrow position. | |
pos += v.texcoord.xy * 2.0 - 1.0; | |
// Convert to the screen coordinates. | |
float2 scoord = (pos + 1.0) * 0.5 * _ScreenParams.xy; | |
// Snap to a pixel-perfect position. | |
scoord = round(scoord); | |
// Bring back to the normalized screen space. | |
pos = (scoord + 0.5) * (_ScreenParams.zw - 1.0) * 2.0 - 1.0; | |
// Color tweaks | |
color.rgb = GammaToLinearSpace(lerp(color.rgb, 1.0, 0.5)); | |
color.a *= _Opacity; | |
// Output | |
VaryingsArrows o; | |
o.vertex = float4(pos, 0.0, 1.0); | |
o.scoord = scoord; | |
o.color = saturate(color); | |
return o; | |
} | |
float4 FragMovecsArrows(VaryingsArrows i) : SV_Target | |
{ | |
// Pseudo anti-aliasing. | |
float aa = length(frac(i.scoord) - 0.5) / 0.707; | |
aa *= (aa * (aa * 0.305306011 + 0.682171111) + 0.012522878); // gamma | |
return float4(i.color.rgb, i.color.a * aa); | |
} | |
ENDCG | |
SubShader | |
{ | |
Cull Off ZWrite Off ZTest Always | |
// (0) - Depth | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex VertDefault | |
#pragma fragment FragDepth | |
ENDCG | |
} | |
// (1) - Normals | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex VertDefault | |
#pragma fragment FragNormals | |
#pragma multi_compile __ SOURCE_GBUFFER | |
ENDCG | |
} | |
// (2) - Motion vectors - Opacity | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex VertDefault | |
#pragma fragment FragMovecsOpacity | |
ENDCG | |
} | |
// (3) - Motion vectors - Imaging | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex VertDefault | |
#pragma fragment FragMovecsImaging | |
#pragma multi_compile __ UNITY_COLORSPACE_GAMMA | |
ENDCG | |
} | |
// (4) - Motion vectors - Arrows | |
Pass | |
{ | |
Blend SrcAlpha OneMinusSrcAlpha | |
CGPROGRAM | |
#pragma vertex VertArrows | |
#pragma fragment FragMovecsArrows | |
ENDCG | |
} | |
} | |
} |