unity里面有自带灯光阴影,但是想要显示在AR中 需要一些小改变,
不然就是有变色的底框,
所以我们需要一个透明的平面,但能够接收阴影。为了达到这个目的,我们需要一个自定义的着色器。(http://www.arvrschool.com/read.php?tid=437&fid=21&page=1 着色器代码从这里扣得)
Shader "FX/Matte Shadow" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
LOD 200
Blend Zero SrcColor
CGPROGRAM
#pragma surface surf ShadowOnly alphatest:_Cutoff
fixed4 _Color;
struct Input {
float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
fixed4 c;
c.rgb = s.Albedo*atten;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = _Color;
o.Albedo = c.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}
使用 Matte Shadow 制作材质球,再将它拖拽到我们的平面上,就得到了我们期望的效果。注意如果没看到阴影的话,很可能是 Scale 或者 Project Quality 设置的问题。(如果不出现阴影,将scale全部设置为1试试)
这里的设置阴影质量 在Quality 中的阴影质量的关键性设置是 和
- 方向性阴影详情。 也要考虑,但改善方向性阴影质量时首先要做的是缩短阴影距离。有关方向灯阴影的所有细节请见
- 对于聚光 (Spot) 和点 (Point) 光源, 决定了阴影贴图的大小。此外,屏幕上照亮小块区域的光源采用较小的阴影贴图分辨率。
- 阴影跟缩放有关的 (Quality Settings) 包含一个名为 的设置,即相机到绘制的阴影有多远。通常,计算和显示离相机 500 米远的阴影没有意义,因而制作游戏时尽可能使用较小阴影距离。这将有助于提高性能(及改善方向灯阴影质量,见上文),在AR中物体缩放的大小有个图片的默认值,经常看不到阴影 就是由于缩放的大小 跟(Quality Settings)设置的阴影距离的设置有关。