移动段的实时阴影,之前的实现方案是,让角色受光,让接受阴影的地表受光,达到一个实时阴影的效果。然后就发现美术的地表做得比较复杂 面数跟材质球数量都不少,一旦受光,dc跟面数都增加的比较明显,对效率影响比较高。
于是有了新的方案,地表上本来就会做一层行走网格,面数比较少,而且整个场景也就一到两个模型,干脆就用行走网格来接受阴影。让产生阴影的地方半透叠加到地表,没有阴影的地方全透明,对效率影响相对比较低。
效果如下:
shader如下:
Shader "scenes/ShadowCollision" {
SubShader {
Tags { "RenderType"="Opaque" "Queue"="Geometry+9"}
Blend SrcAlpha OneMinusSrcAlpha
Zwrite Off
Pass {
Tags {
"LightMode"="ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#define UNITY_PASS_FORWARDBASE
#include "UnityCG.cginc"
#include "AutoLight.cginc"
#pragma multi_compile_fwdbase_fullshadows
fixed4 _LightColor0;
struct VertexInput {
fixed4 vertex : POSITION;
};
struct v2f {
fixed4 pos : SV_POSITION;
LIGHTING_COORDS(1,2)
};
v2f vert (VertexInput v)
{
v2f o ;
o.pos = UnityObjectToClipPos(v.vertex );
TRANSFER_SHADOW(o);
return o;
}
fixed4 frag(v2f i) : COLOR
{
fixed atten = LIGHT_ATTENUATION(i);
fixed4 col = fixed4(0, 0, 0,1 );
col.a = 1 - atten;
return col;
}
ENDCG
}
}
FallBack "Transparent/Cutout/VertexLit"
}
亲,如果您觉得本文不错,愿意给我一些动力的话,请用手机扫描二维码即可向我打赏