- Home /
Question by
DizzyTornado · Dec 14, 2018 at 04:34 AM ·
shaderlightingshaderstransparency
How to make my shader have a variable transparency
Basicaly I found this shader online. I want to add the ability for it to be transparent. I don't know much about shaders, but the parts I labeled with a "//" or a "//Addition" are areas where I have added onto the code. However this does not give errors, but it is still not transparent. Any help is greatly appreciated.
Shader "4ik0/FakeWindow/FakeWindowDetail"
{
Properties
{
_Color ("Color Tint", Color) = (1,1,1,1)
//Addition
_Transparency("Transparency", Range(0,1)) = 0.25
_MainTex ("Outside Window (RGB) Alpha (A)", 2D) = "white" {}
_Detail("Detail (RGB) Alpha (A)", 2D) = "black" {}
_BumpMap("Bumpmap (RGB)", 2D) = "bump" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_EmissionColor("Emission Color", Color) = (0,0,0)
_EmissionMap("Emission Texture", 2D) = "white" {}
_Metallic ("Metallic", Range(0,1)) = 0.0
_Scale("Simulated Distance", Range(0, 1)) = 0.1
}
SubShader
{
Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" }
LOD 200
Cull Off
//
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
//
#pragma surface surf Lambert alpha
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
sampler2D _Detail;
sampler2D _BumpMap;
half _Scale;
half _Glossiness;
half _Metallic;
half4 _EmissionColor;
sampler2D _EmissionMap;
fixed4 _Color;
//Addition
float _Transparency;
struct Input
{
float2 uv_MainTex;
float2 uv_Detail;
float2 uv_BumpMap;
float2 uv_EmissionMap;
half3 viewDir;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
half4 bump = tex2D(_BumpMap, IN.uv_BumpMap);
half3 norm = UnpackNormal(bump);
half scale = (1 - _Scale);
half coeff = dot(abs(normalize(IN.viewDir)), norm);
half3 offset = (IN.viewDir + norm) * scale / 2 * (2 - coeff);
half2 uv = half2(IN.uv_MainTex.x * _Scale + scale / 2 - offset.x, IN.uv_MainTex.y * _Scale + scale / 2 - offset.y);
half4 color = tex2D (_MainTex, uv) * _Color;
half4 emiss = tex2D(_EmissionMap, IN.uv_EmissionMap) * _EmissionColor;
half4 detail = tex2D(_Detail, IN.uv_Detail) * _Color;
o.Normal = norm;
o.Albedo = lerp(color.rgb * pow(coeff, 2), detail, detail.a);
o.Metallic = _Metallic;
o.Emission = emiss;
o.Smoothness = _Glossiness;
//Transparency
o.Alpha = _Transparency;
o.Alpha = tex2D(_MainTex, IN.uv_MainTex).a * _Transparency;
}
ENDCG
}
FallBack "Diffuse"
}
Comment
Answer by dan_wipf · Dec 14, 2018 at 09:36 AM
ok what you want to do is following:
add to this line alpha:blend
#pragma surface surf Standard fullforwardshadows alpha:blend
delete this line:
#pragma surface surf Lambert alpha
replace both o.Alpha lines with one of this:
//from Transparent to Opaque
o.Alpha = color.a - _Transparency;
//or from Opaque to Transparent
o.Alpha = color.a * _Transparency;
this should give you normal transparenycontroll by _Transparency. Keep in mind, the color alpha value must still be 0 for full Transparent Window.