Hello,
I have a problem with my custom shader to cast and receive shadows…
This shader works on procedural sphere mesh to draw texture based on height/distance from center to simulate a small planet.
Shader "Custom/planet"
{
Properties
{
_Tex0 ("Tex 0", 2D) = "white" {}
_Tex1 ("Tex 1", 2D) = "white" {}
_Tex2 ("Tex 2", 2D) = "white" {}
_Tex3 ("Tex 3", 2D) = "white" {}
_Tex4 ("Tex 4", 2D) = "white" {}
_Tex5 ("Tex 5", 2D) = "white" {}
_Tex6 ("Tex 6", 2D) = "white" {}
_Blend0to1and1to2 ("Blend between 0 and 1, 1 and 2", Vector) = (0,1,2,3)
_Blend2to3and3to4 ("Blend between 2 and 3, 3 and 4", Vector) = (0,1,2,3)
_Blend4to5and5to6 ("Blend between 4 and 5, 5 and 6", Vector) = (0,1,2,3)
}
SubShader
{
Lighting On
Tags{ "Queue" = "Geometry" "RenderType" = "Opaque" }
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
Tags{ "LightMode" = "ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "AutoLight.cginc"
#pragma target 3.0
sampler2D _Tex0;
sampler2D _Tex1;
sampler2D _Tex2;
sampler2D _Tex3;
sampler2D _Tex4;
sampler2D _Tex5;
sampler2D _Tex6;
float4 _Blend0to1and1to2;
float4 _Blend2to3and3to4;
float4 _Blend4to5and5to6;
uniform float4 _Tex0_ST;
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 col : COLOR;
LIGHTING_COORDS(1, 2)
};
v2f vert (appdata_base vInput)
{
v2f OUT;
OUT.pos = mul (UNITY_MATRIX_MVP, vInput.vertex);
OUT.uv = TRANSFORM_TEX(vInput.texcoord, _Tex0);
OUT.col = length(vInput.vertex);
TRANSFER_VERTEX_TO_FRAGMENT(OUT);
return OUT;
}
half4 frag (v2f fInput) : COLOR
{
half4 c0 = tex2D (_Tex0, fInput.uv);
half4 c1 = tex2D (_Tex1, fInput.uv);
half4 c2 = tex2D (_Tex2, fInput.uv);
half4 c3 = tex2D (_Tex3, fInput.uv);
half4 c4 = tex2D (_Tex4, fInput.uv);
half4 c5 = tex2D (_Tex5, fInput.uv);
half4 c6 = tex2D (_Tex6, fInput.uv);
fixed atten = LIGHT_ATTENUATION(fInput);
if (fInput.col.x < _Blend0to1and1to2.x) return c0;
if (fInput.col.x > _Blend0to1and1to2.x && fInput.col.x < _Blend0to1and1to2.y) return lerp(c0,c1,((fInput.col.x - _Blend0to1and1to2.x)/(_Blend0to1and1to2.y-_Blend0to1and1to2.x)));
if (fInput.col.x > _Blend0to1and1to2.y && fInput.col.x < _Blend0to1and1to2.z) return c1;
if (fInput.col.x > _Blend0to1and1to2.z && fInput.col.x < _Blend0to1and1to2.w) return lerp(c1,c2,((fInput.col.x - _Blend0to1and1to2.z)/(_Blend0to1and1to2.w-_Blend0to1and1to2.z)));
if (fInput.col.x > _Blend0to1and1to2.w && fInput.col.x < _Blend2to3and3to4.x) return c2;
if (fInput.col.x > _Blend2to3and3to4.x && fInput.col.x < _Blend2to3and3to4.y) return lerp(c2,c3,((fInput.col.x - _Blend2to3and3to4.x)/(_Blend2to3and3to4.y-_Blend2to3and3to4.x)));
if (fInput.col.x > _Blend2to3and3to4.y && fInput.col.x < _Blend2to3and3to4.z) return c3;
if (fInput.col.x > _Blend2to3and3to4.z && fInput.col.x < _Blend2to3and3to4.w) return lerp(c3,c4,((fInput.col.x - _Blend2to3and3to4.z)/(_Blend2to3and3to4.w-_Blend2to3and3to4.z)));
if (fInput.col.x > _Blend2to3and3to4.w && fInput.col.x < _Blend4to5and5to6.x) return c4;
if (fInput.col.x > _Blend4to5and5to6.x && fInput.col.x < _Blend4to5and5to6.y) return lerp(c4,c5,((fInput.col.x - _Blend4to5and5to6.x)/(_Blend4to5and5to6.y-_Blend4to5and5to6.x)));
if (fInput.col.x > _Blend4to5and5to6.y && fInput.col.x < _Blend4to5and5to6.z) return c5;
if (fInput.col.x > _Blend4to5and5to6.z && fInput.col.x < _Blend4to5and5to6.w) return lerp(c5,c6,((fInput.col.x - _Blend4to5and5to6.z)/(_Blend4to5and5to6.w-_Blend4to5and5to6.z)));
return c6;
}
ENDCG
}
}
FallBack "VertexLit"
}
All works well but no shadows from gameobjects like trees…
What is wrong or missing in the shader code?
A light directional and parameters are setted up in scene for cast shadows.
Thanks!
