Question by
Kenjade · Oct 06, 2015 at 07:52 PM ·
shadersanti-aliasing
How can I fix shader flipping when anti-aliasing is on?
New to shaders. Currently trying to add a shader to an object that creates a glow effect around it. When we have anti-aliasing on, the shader seems to flip. We are trying to include the fix from the example from http://docs.unity3d.com/Manual/SL-PlatformDifferences.html but are not having any luck. Any help would be greatly appreciated.
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _CameraDepthTexture;
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 vertex : POSITION;
float4 projPos : TEXCOORD0;
};
v2f vert( appdata v ) {
v2f o;
o.vertex = mul( UNITY_MATRIX_MVP, v.vertex );
float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
float2 offset = TransformViewToProjection(norm.xy);
o.vertex.xy += offset * o.vertex.z * 0;
o.projPos = ComputeScreenPos(o.vertex);
return o;
}
fixed4 frag( v2f i ) : SV_Target {
float depthVal = LinearEyeDepth (tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)).r);
float zPos = i.projPos.z;
float occlude = step( zPos, depthVal );
return fixed4( occlude * _Color.rgb * _Color.a, occlude);
}
ENDCG
}
Pass {
Blend One OneMinusDstColor // Soft Additive
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _OccludeMap;
half4 frag(v2f_img IN) : COLOR {
return tex2D (_MainTex, IN.uv) - tex2D(_OccludeMap, IN.uv);
}
ENDCG
}
Pass {
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _OccludeMap;
half4 frag(v2f_img IN) : COLOR {
return tex2D (_MainTex, IN.uv) + tex2D(_OccludeMap, IN.uv);
}
ENDCG
}
}
FallBack "Diffuse"
Comment
Best Answer
Answer by Kenjade · Oct 07, 2015 at 03:29 PM
After much fiddling around I have figured out the solution.
CGINCLUDE
uniform float4 _MainTex_TexelSize;
ENDCG
SubShader {
Pass {
Tags {"Queue"="Transparent"}
ZWrite On ZTest Always Blend OneMinusDstColor One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
fixed4 _Color;
sampler2D _CameraDepthTexture;
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 vertex : POSITION;
float4 projPos : TEXCOORD0;
};
v2f vert( appdata v ) {
v2f o;
o.vertex = mul( UNITY_MATRIX_MVP, v.vertex );
float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
float2 offset = TransformViewToProjection(norm.xy);
o.vertex.xy += offset * o.vertex.z * 0;
o.projPos = ComputeScreenPos(o.vertex);
return o;
}
fixed4 frag( v2f i ) : SV_Target {
float depthVal = LinearEyeDepth (tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)).r);
float zPos = i.projPos.z;
float occlude = step( zPos, depthVal );
return fixed4( occlude * _Color.rgb * _Color.a, occlude);
}
ENDCG
}
Pass {
Blend One OneMinusDstColor // Soft Additive
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _OccludeMap;
half4 frag(v2f_img IN) : COLOR {
#if UNITY_UV_STARTS_AT_TOP
if (_MainTex_TexelSize.y < 0)
IN.uv.y = 1-IN.uv.y;
#endif
return tex2D (_MainTex, IN.uv) - tex2D(_OccludeMap, IN.uv);
}
ENDCG
}
Pass {
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _OccludeMap;
half4 frag(v2f_img IN) : COLOR {
float4 tempTex = tex2D (_MainTex, IN.uv);
#if UNITY_UV_STARTS_AT_TOP
if (_MainTex_TexelSize.y < 0)
IN.uv.y = 1-IN.uv.y;
#endif
return tempTex + tex2D(_OccludeMap, IN.uv);
}
ENDCG
}
}
FallBack "Diffuse"
}
Your answer

Follow this Question
Related Questions
Anti-aliasing Sprite Shader Graph 0 Answers
Help with Splat map shader, control/splat texture interpolation has dark edges 0 Answers
What does this do? Shader Language 1 Answer
Shader explain 0 Answers
CRT Shader how optimize?! 1 Answer