- Home /
Question by
badescuga9 · Mar 07, 2014 at 11:35 AM ·
shader
ignore a shader pass under some conditions
I have an outline shader that has 2 passes, thus for every game object i have 2 draw calls.
The first call is used only for outline purposes, but my object is not always outlined, so i would wish to enable that pass only when a certain variable is greater than 0. Is it possible?
Here is the shader:
Shader "Outlined/Silhouetted Diffuse" {
Properties {
_Color ("Main Color", Color) = (.5,.5,.5,1)
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_Outline ("Outline width", Range (0.0, 0.3)) = 0
_MainTex ("Base (RGB)", 2D) = "white" { }
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Name "OUTLINE"
Tags { "LightMode" = "Always" }
Cull Back
ZWrite Off
ZTest Always
ColorMask RGB
CGPROGRAM
#pragma only_renderers gles opengl
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
half4 vertex : POSITION;
half3 normal : NORMAL;
};
struct v2f {
half4 pos : POSITION;
half4 color : COLOR;
};
uniform half _Outline;
uniform half4 _OutlineColor;
v2f vert(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
half3 norm = mul ((half3x3)UNITY_MATRIX_IT_MV, v.normal);
half2 offset = TransformViewToProjection(norm.xy);
o.pos.xy += offset * _Outline;
o.color = _OutlineColor;
return o;
}
half4 frag(v2f i) :COLOR {
return i.color;
}
ENDCG
}
Pass {
Name "BASE"
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
Material {
//Diffuse [_Color]
//Ambient [_Color]
}
Lighting On
SetTexture [_MainTex] {
//ConstantColor [_Color]
//Combine texture * constant
}
}
}
Fallback "Diffuse"
}
When "_Outline" is equal to 0, i would like to ignore the first PASS. Is this possible?
Comment