17
Aug
August 17, 2017, 5:52 pm

While testing the Unity3D engine I needed a double-sided shader to make my trees look good.

Shader "Transparent/Double Sided" {
Properties {
 _Color ("Main Color", Color) = (1,1,1,1)
 _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
 _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
 _Parallax ("Height", Range (0.005, 0.08)) = 0.02
 _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
 _BumpMap ("Normalmap", 2D) = "bump" {}
 _ParallaxMap ("Heightmap (A)", 2D) = "black" {}
}

SubShader {
 Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
 Cull Off
 LOD 600

CGPROGRAM
#pragma surface surf BlinnPhong alpha

sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _ParallaxMap;
fixed4 _Color;
half _Shininess;
float _Parallax;

struct Input {
 float2 uv_MainTex;
 float2 uv_BumpMap;
 float3 viewDir;
};

void surf (Input IN, inout SurfaceOutput o) {
 half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w;
 float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir);
 IN.uv_MainTex += offset;
 IN.uv_BumpMap += offset;

 fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
 o.Albedo = tex.rgb * _Color.rgb;
 o.Gloss = tex.a;
 o.Alpha = tex.a * _Color.a;
 o.Specular = _Shininess;
 o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}

FallBack "Transparent/Parallax Specular"
}

Previous Post