Question by
Capitals · Aug 31, 2017 at 12:12 PM ·
shaderimage effectsblendingblitting
Why does my Image effect shader output gets darker over time?
For some reason, when I use my main texture inside my shader it, over time, gets darker. Before: After Seconds of Playing:
This is the shader code.
Shader "Hidden/Vintage"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Perlin ("Perlin", 2D) = "white" {}
_Degrade ("Degrade", 2D) = "white" {}
_Under ("Undertexture", Color) = (0,0,0,0)
_Darker ("Darkertexture", Color) = (0,0,0,0)
_Size ("Size", Range(0,2)) = 1
_Vig ("Vig", Range(0,1)) = 1
_VigIntensity ("Vignette Intensity", Float) = 15
_DegradeSize ("Degrade", Float) = 1
_NoRed ("No Red", Range(0,1)) = 1
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Tags {"Queue" = "Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
Blend Off
//Blend DstColor SrcColor
//AlphaToMask On
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float4 _MainTex_ST;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 screenPos : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.screenPos = ComputeScreenPos(o.vertex);
return o;
}
sampler2D _MainTex, _Perlin, _Degrade;
float _Size, _DegradeSize, _Vig, _NoRed, _VigIntensity;
fixed4 _Under, _Darker;
fixed4 frag (v2f i) : SV_Target
{
//float2 newUV = TRANSFORM_TEX(i.uv, _Perlin);
fixed4 per = tex2D(_Perlin, i.uv);
fixed4 deg = tex2D(_Degrade, i.uv * _DegradeSize + _Time[0]);
fixed4 col = tex2D(_MainTex, i.uv);
fixed4 tCol = tex2D(_MainTex, i.uv);
//return per;
float2 sp = (i.screenPos.xy/i.screenPos.w);
sp *= 1.0 - sp.yx; //vec2(1.0)- uv.yx; -> 1.-u.yx; Thanks FabriceNeyret !
float vig = sp.x*sp.y * _VigIntensity; // multiply with sth for intensity
vig = pow(vig, _Vig); // change pow for modifying the extend of the vignette
vig = vig;
fixed3 BColor = fixed3(1,1,1);
//if(tCol.r > 0.01 && tCol.g < 0.2 && tCol.b < 0.2 && _NoRed > 0)
// col.rgb = _Under.rgb * (col.r);
col = lerp(_Under, col, col.a);
return lerp(col, fixed4(0,0,0,.5), vig);
fixed4 OUT = col;
OUT = lerp(OUT, _Darker, (vig * (1-per.b) * _Size) / _DegradeSize);
//fixed4 BColor = fixed4(0,0,0,1);
//OUT.a = lerp(OUT.a, BColor, vig/2);
//OUT.rgb = OUT.rgb * (OUT.a) + _Darker.rgb * (1-OUT.a);
//OUT.rgb = OUT.a;
//OUT.a = 1;
if(tCol.r > 0.01 && tCol.g < 0.2 && tCol.b < 0.2 && _NoRed > 0)
tCol.rgb = 0;
OUT.rgb += tCol.rgb * 0.4;
return OUT;
}
ENDCG
}
}
}
I am using Graphics.Blit to get the camera's render texture, I have a feeling that it is a blending issue, however I have no idea what is needed to fix this. I would like to have it look like the first picture and for it not to get darker when I play the game. Thanks.
wierd1.png
(247.5 kB)
wierd2.png
(236.3 kB)
Comment
Your answer
Follow this Question
Related Questions
Alpha blended shader - Show only the first alpha 2 Answers
Mising shader UnityStandardAssets.ImageEffects.DepthOfField 2 Answers
Skybox not correctly alpha blending with custom Shader 1 Answer
How to make a filter for my Camera? 0 Answers
How to modify depth blended shader for second camera/reflection projection? 0 Answers