Hi everyone, I read some tutorials about how to add shadow to vertex/fragment shader (e.g. adding-shadows-to-a-unity-vertexfragment-shader-in-7-easy-steps), but it seems not working at all. Please take a look, thanks a lot
Shader "Custom/ToonCurved" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_QOffset ("Offset", Vector) = (0,0,0,0)
_Dist ("Distance", Float) = 100.0
_Alpha ("Alpha", Range(0.0,1.0)) = 1.0
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_Outline ("Outline width", Range (.002, 0.03)) = .005
_Color ("Main Color", Color) = (0.5,0.5,0.5,1)
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Tags {"LightMode" = "ForwardBase"}
LOD 100
Pass
{
Name "OUTLINE"
Cull Front
ZWrite On
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _QOffset;
float _Dist;
float _Alpha;
uniform float4 _MainTex_ST;
uniform float _Outline;
uniform float4 _OutlineColor;
struct v2f {
float4 pos : SV_POSITION;
fixed4 color : COLOR;
};
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
v2f vert (appdata v)
{
v2f o;
float4 vPos = mul (UNITY_MATRIX_MV, v.vertex);
float zOff = vPos.z/_Dist;
vPos += _QOffset*zOff*zOff;
o.pos = mul (UNITY_MATRIX_P, vPos);
float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
float2 offset = TransformViewToProjection(norm.xy);
o.pos.xy += offset * o.pos.z * _Outline;
o.color = _OutlineColor;
UNITY_TRANSFER_FOG(o,o.pos);
return o;
}
half4 frag (v2f i) : COLOR
{
UNITY_APPLY_FOG(i.fogCoord, i.color);
return i.color;
}
ENDCG
}
// Normal pass
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase
#include "AutoLight.cginc"
sampler2D _MainTex;
float4 _QOffset;
float _Dist;
float _Alpha;
uniform float4 _MainTex_ST;
uniform float _Outline;
uniform float4 _OutlineColor;
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed4 color : COLOR;
LIGHTING_COORDS(0,1)
};
v2f vert(appdata_base v)
{
v2f o;
float4 vPos = mul(UNITY_MATRIX_MV, v.vertex);
float zOff = vPos.z / _Dist;
vPos += _QOffset*zOff*zOff;
o.pos = mul(UNITY_MATRIX_P, vPos);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.color = _OutlineColor;
UNITY_TRANSFER_FOG(o,o.pos);
TRANSFER_VERTEX_TO_FRAGMENT(o);
return o;
}
fixed4 frag(v2f i) : COLOR
{
float attenuation = LIGHT_ATTENUATION(i);
return tex2D(_MainTex, i.uv) * float4(1,1,1,_Alpha) * attenuation;
}
ENDCG
}
}
Fallback "VertexLit"
}
