Some shaders not working in android build
Hi,
Some shaders are not working when I test on my Android device (they work fine in the editor).
The standard shader for a UI element is transparent in the android build and my custom shader only works partly (the outline is invisible but the change of color when passing behind an object works).
Here's the code of my custom shader:
Shader "Outline Glow" {
Properties{
_Color("Main Color", Color) = (.5,.5,.5,1)
_OutlineColor("Outline Color", Color) = (206,0,0,0.8)
_Outline("Outline width", Range(0.0, 0.03)) = .02
_MainTex("Base (RGB)", 2D) = "white" { }
}
CGINCLUDE
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 pos : POSITION;
float4 color : COLOR;
};
uniform float _Outline;
uniform float4 _OutlineColor;
v2f vert(appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
float2 offset = TransformViewToProjection(norm.xy);
o.pos.xy += offset * o.pos.z * _Outline;
o.color = _OutlineColor;
return o;
}
ENDCG
SubShader{
Tags{ "Queue" = "Transparent" }
// note that a vertex shader is specified here but its using the one above
Pass{
Name "OUTLINE"
Tags{ "LightMode" = "Always" }
Cull Off
ZWrite Off
ZTest Always
ColorMask RGB // alpha not used
// you can choose what kind of blending mode you want for the outline
Blend SrcAlpha OneMinusSrcAlpha // Normal
//Blend One One // Additive
//Blend One OneMinusDstColor // Soft Additive
//Blend DstColor Zero // Multiplicative
//Blend DstColor SrcColor // 2x Multiplicative
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float4 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
}
SetTexture[_MainTex]{
Combine previous * primary DOUBLE
}
}
}
SubShader{
Tags{ "Queue" = "Transparent" }
Pass{
Name "OUTLINE"
Tags{ "LightMode" = "Always" }
Cull Front
ZWrite Off
ZTest Always
ColorMask RGB
// you can choose what kind of blending mode you want for the outline
Blend SrcAlpha OneMinusSrcAlpha // Normal
//Blend One One // Additive
//Blend One OneMinusDstColor // Soft Additive
//Blend DstColor Zero // Multiplicative
//Blend DstColor SrcColor // 2x Multiplicative
CGPROGRAM
#pragma vertex vert
#pragma exclude_renderers gles xbox360 ps3
ENDCG
SetTexture[_MainTex]{ combine primary }
}
Pass{
Name "BASE"
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
Material{
Diffuse[_Color]
Ambient[_Color]
}
Lighting On
SetTexture[_MainTex]{
ConstantColor[_Color]
Combine texture * constant
}
SetTexture[_MainTex]{
Combine previous * primary DOUBLE
}
}
}
Fallback "Diffuse"
}
I have tried addind the custom shader to "Always included shaders" in the Graphics settings, but it still doesn't work. I have searched everywhere for a solution but can't get it to work...
I have the same problem in an iOS build for iPad. The standard opaque diffuse shader works fine in the editor, but becomes transparent (the object disappears) on the iPad. Workaround: the legacy shaders work perfectly in both the editor and the running build!