- Home /
Terrain Shader with Transparency & Shadows
Hi there,
I've got a custom Terrain shader that allows me to paint areas of transparency on my Terrain object. I modified it slighly from the source here:
http://wiki.unity3d.com/index.php/TerrainTransparency
However I've just noticed that shadows aren't working on the terrain. Does anyone have any advice for how I can modify the shader so I get the transparency and the shadows?
Shader "Nature/Terrain/Diffuse" { Properties { [HideInInspector] _Control ("Control (RGBA)", 2D) = "red" {} [HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {} [HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {} [HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {} [HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {} //Used in fallback on old cards & base map [HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {} [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1) }
 SubShader
 {
     Tags
     {
         "SplatCount" = "4"
         "Queue" = "Transparent+99"
         "RenderType" = "Transparent"
     }
     Blend SrcAlpha OneMinusSrcAlpha
     CGPROGRAM
     #pragma surface surf Lambert
     struct Input
     {
         float2 uv_Control : TEXCOORD0;
         float2 uv_Splat0 : TEXCOORD1;
         float2 uv_Splat1 : TEXCOORD2;
         float2 uv_Splat2 : TEXCOORD3;
         float2 uv_Splat3 : TEXCOORD4;
     };
 
     sampler2D _Control;
     sampler2D _Splat0,_Splat1,_Splat2,_Splat3;
 
     void surf (Input IN, inout SurfaceOutput o)
     {
         fixed4 splat_control = tex2D (_Control, IN.uv_Control);
         fixed4 firstSplat = tex2D (_Splat0, IN.uv_Splat0);
         fixed3 col;
         col = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb;
         col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb;
         col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb;
         col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb;
         o.Albedo = col;
         o.Alpha = 1;
         if(tex2D(_Splat0, IN.uv_Splat0).a == 0)
             o.Alpha = 1 - splat_control.r;
         else if(tex2D(_Splat1, IN.uv_Splat1).a == 0)
             o.Alpha = 1 - splat_control.g;
         else if(tex2D(_Splat2, IN.uv_Splat2).a == 0)
             o.Alpha = 1 - splat_control.b;
         else if(tex2D(_Splat3, IN.uv_Splat3).a == 0)
             o.Alpha = 1 - splat_control.a;
     }
     ENDCG
 }
 
 Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Lightmap-AddPass"
 Dependency "BaseMapShader" = "Diffuse"
 
 //Fallback to Diffuse
 Fallback "Diffuse"
}
Your answer
 
 
             Follow this Question
Related Questions
Terrain surfaceshader, or terrain shader supporting multiple lights - need example 0 Answers
So I Have a planetary Terrain Shader Problem "Upgrade" (Anyone willing to help?) 0 Answers
Detail brush not rendering correctly in game 1 Answer
Graphics.CopyTexture and location fo textures 0 Answers
Recommend tools for large mesh / terrain painting. 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                