- Home /
Custom shader go to black on android devices.
Hello, im have a shader demo liquid in the bottle. Shader run normaly in editor but have error in android devices. A part of shader become black. I try to read shader file but i did't find where the error. Some one can help me :( This is my picture off error.
And this is my shader :
Shader "Vertex Magic/Liquid" {
Properties {
_MainTex ("Main", 2D) = "white" {}
_MainTint ("Tint", Color) = (1, 1, 1, 1)
_Fill ("Fill Amount", Float) = 0
_WobbleX ("WobbleX", Float) = 0
_WobbleZ ("WobbleZ", Float) = 0
_TopColor ("Top Color", Color) = (1, 1, 1, 1)
_FoamColor ("Foam Line Color", Color) = (1, 1, 1, 1)
_FoamWidth ("Foam Line Width", Float) = 0
_RimColor ("Rim Color", Color) = (1, 1, 1, 1)
_RimPower ("Rim Power", Float) = 0
}
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
Zwrite On Cull Off AlphaToMask On
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 view : TEXCOORD1;
float3 norm : TEXCOORD2;
float edge : TEXCOORD3;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _Fill, _WobbleX, _WobbleZ, _FoamWidth, _RimPower;
fixed4 _TopColor, _RimColor, _FoamColor, _MainTint;
float4 RotateAroundY (float3 v, float degree)
{
float a = degree * UNITY_PI / 180.0;
float s, c;
sincos(a, s, c);
float2x2 m = float2x2(c, s, -s, c);
return float4(v.yz , mul(m, v.xz)).xzyw;
}
v2f vert (appdata_full v)
{
float3 wldpos = mul(unity_ObjectToWorld, v.vertex.xyz);
float3 wldposX = RotateAroundY(wldpos, 360.0);
float3 wldposZ = float3(wldposX.y, wldposX.z, wldposX.x);
float3 wldposAdjusted = wldpos + (wldposX * _WobbleX)+ (wldposZ * _WobbleZ);
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.edge = wldposAdjusted.y + _Fill;
o.view = normalize(ObjSpaceViewDir(v.vertex));
o.norm = v.normal;
return o;
}
fixed4 frag (v2f i, fixed facing : VFACE) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv) * _MainTint;
// rim
float3 V = normalize(i.view);
float3 N = normalize(i.norm);
float rim = 1.0 - pow(dot(N, V), _RimPower);
float3 rimcol = _RimColor.rgb * smoothstep(0.5, 1.0, rim);
// foam edge
float4 foam = step(i.edge, 0.5) - step(i.edge, 0.5 - _FoamWidth);
float4 result = step(i.edge, 0.5) - foam;
float4 c1 = result * col;
float4 c = c1 + (foam * _FoamColor);
c.rgb += rimcol;
float4 topcol = _TopColor * (foam + result);
return facing > 0 ? c: topcol;
}
ENDCG
}
}
FallBack "Diffuse"
}
Thanks for reading.
Answer by Mammuoils1 · Mar 12, 2020 at 03:51 AM
Hello, if anyone have same problem can fix by this: AlphaToMask is not support on devices mobile if not enable antialising x2, so you need turn of it.
Your answer
![](https://koobas.hobune.stream/wayback/20220612223648im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
need help making this mobile shader more efficient 0 Answers
OpenGL ES 2.0 support breaks simple shader 0 Answers
Water4 Advanced Edge blend Not working with GearVR 0 Answers
GL - Shader not working in Android 1 Answer
Shader From Assetbundle Compiled On PC with Target of Android Platform Turn Pink 0 Answers