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?
BlendModeExample/Assets/Shaders/GrabDarken.shader
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
89 lines (70 sloc)
1.78 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 "Custom/GrabDarken" | |
{ | |
Properties | |
{ | |
_MainTex ("Sprite Texture", 2D) = "white" {} | |
_Color ("Tint", Color) = (1,1,1,1) | |
} | |
SubShader | |
{ | |
Tags | |
{ | |
"Queue" = "Transparent" | |
"RenderType" = "Transparent" | |
} | |
Blend SrcAlpha OneMinusSrcAlpha | |
GrabPass { } | |
Pass | |
{ | |
CGPROGRAM | |
#include "UnityCG.cginc" | |
#pragma vertex ComputeVertex | |
#pragma fragment ComputeFragment | |
sampler2D _MainTex; | |
sampler2D _GrabTexture; | |
fixed4 _Color; | |
struct VertexInput | |
{ | |
float4 vertex : POSITION; | |
float4 color : COLOR; | |
float2 texcoord : TEXCOORD0; | |
}; | |
struct VertexOutput | |
{ | |
float4 vertex : SV_POSITION; | |
fixed4 color : COLOR; | |
half2 texcoord : TEXCOORD0; | |
float4 screenPos : TEXCOORD1; | |
}; | |
VertexOutput ComputeVertex (VertexInput vertexInput) | |
{ | |
VertexOutput vertexOutput; | |
vertexOutput.vertex = mul(UNITY_MATRIX_MVP, vertexInput.vertex); | |
vertexOutput.screenPos = vertexOutput.vertex; | |
vertexOutput.texcoord = vertexInput.texcoord; | |
vertexOutput.color = vertexInput.color * _Color; | |
return vertexOutput; | |
} | |
fixed4 Darken (fixed4 a, fixed4 b) | |
{ | |
fixed4 r = min(a, b); | |
r.a = b.a; | |
return r; | |
} | |
fixed4 ComputeFragment (VertexOutput vertexOutput) : SV_Target | |
{ | |
half4 color = tex2D(_MainTex, vertexOutput.texcoord) * vertexOutput.color; | |
float2 grabTexcoord = vertexOutput.screenPos.xy / vertexOutput.screenPos.w; | |
grabTexcoord.x = (grabTexcoord.x + 1.0) * .5; | |
grabTexcoord.y = (grabTexcoord.y + 1.0) * .5; | |
#if UNITY_UV_STARTS_AT_TOP | |
grabTexcoord.y = 1.0 - grabTexcoord.y; | |
#endif | |
fixed4 grabColor = tex2D(_GrabTexture, grabTexcoord); | |
return Darken(grabColor, color); | |
} | |
ENDCG | |
} | |
} | |
Fallback "UI/Default" | |
} |