- Home /
How should I add an alpha mask AND an alpha multiplier into a shader?
For this planet shader I need the overall thing to render with a mask as well as fade in and out with an alpha variable on top of the mask. I have no clue what to do about this and have went through several forums like the ones below and followed their suggestions but could not get it to work. https://answers.unity.com/questions/244837/shader-help-adding-transparency-to-a-shader.html https://forum.unity.com/threads/alpha-mask-shader-help.181605/ https://stackoverflow.com/questions/41525411/how-to-transparent-unity3d-custom-shader?rq=1 https://forum.unity.com/threads/adding-features-and-modifying-shader.521811/
I tried changing the render type to transparent and adding the transparent queue as well as adding a mask to the properties section but could not get it to work. I also tried adding in an overall alpha for the shader but I feel I am missing a key piece of code or have a particular part of my code that is causing this to not work. There is already an emission based alpha I have to work on top of as I did not make this shader. Help very much appreciated. Thank you.
Shader "Custom/Planet" { Properties { _MainTex ("Diffuse(RGB) Spec(A)", 2D) = "white" {} _BumpMap ("Bumpmap", 2D) = "bump" {} _EmissionMap("Night Lights Map", 2D) = "white" {} _EmissionStr("Night Lights Strength", Range(0,1)) = 0.5 _EmissionColor("Night Lights Color", Color) = (1.0, 1.0, 1.0, 1.0) _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _SpecPower ("Specular Power", Float) = 48.0 } SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Planet noambient float _Shininess; float _SpecPower; float _EmissionStr; half4 _EmissionColor;
half4 LightingPlanet (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
half3 lightView = normalize (lightDir + viewDir);
half diffuse = max (0, dot (s.Normal, lightDir));
float specStr = max (0, dot(s.Normal, lightView));
float spec = pow (specStr, _SpecPower);
half4 c;
c.rgb = _LightColor0.rgb * (atten * 2) * (s.Albedo * diffuse +
spec * s.Specular * _Shininess * _SpecColor) +
(saturate(1.0-2*diffuse) * s.Alpha * _EmissionStr * _EmissionColor);
c.a = s.Specular;
return c;
}
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
float2 uv_EmissionMap;
float3 viewDir;
};
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _EmissionMap;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Specular = tex2D (_MainTex, IN.uv_MainTex).a;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
o.Alpha = length(tex2D (_EmissionMap, IN.uv_EmissionMap).rgb);
}
ENDCG
} Fallback "Diffuse" }