Unity自带的阴影,效果还不错。但是手机端有限的性能有限,大多数游戏都不使用光照实时渲染。很多光照的效果都可以使用shader来代替。今天分享一个阴影的效果。
效果:
思路:用一个pass,根据位置偏移来渲染“影子”
第一个pass就是普通的渲染,就不赘述了。第二个渲染先使用进行简单偏移,得到这样的效果。
float3 worldPos = mul(unity_ObjectToWorld , v.pos).xyz;
worldPos.x = worldPos.x - 1;
o.pos = UnityWorldToClipPos(worldPos);
如果这时候我们把阴的高度直接设为0就可以得到这样的效果:
感觉好像小时候看过的某部动画,里面的人物可以从地面的洞洞钻出来洞洞那个感觉。
但是这个不是我们想要的效果,于是我们来加点处理,让他根据高度进行横向的偏移。
worldPos.x = worldPos.x - 1 * max(0, worldPos.y);
worldPos.y = 0;
就会得到这样的效果
是不是有点内味道了?
再加个半透明的效果
float factor = 0.5;
o._color = _Shadow_Color;
o._color.a *= factor;
就差不多了,做一些调整
最后再稍微整理一下,开放一些参数,以下是完整代码
// write by Uu_Orangry
// github: https://github.com/Orangry
// simple Shadow
Shader "Uu/UuShadow"
{
Properties
{
_Color("Color", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {
}
Shadow_Color