大家知道,在Unity里可以通过设置Directional Light里面的选项出现实时阴影,在PC端可以运行的非常好,但是如果将其放到移动端,移动端目前的硬件还不支持实时阴影的绘制,这就需要我们自己想办法解决在移动端的实时阴影绘制,接下来给大家说一下,实时阴影是如何在移动端绘制的。

先给大家看一幅图片:

wKioL1SfUDDy5WW3AAA8r8BJls0897.jpg

首先给一盏灯光,灯光照射到物体后,会在地面有个接收阴影的面或者Plane或者Terrain。都可以作为接收。

如果有障碍物的话也可以将其投射上去。如图所示:

wKioL1SfUMjzBs7qAADhKGO2ZzE135.jpg

在程序运行的效果图如下所示:

wKiom1SfULTx_4YdAAFANEnBIwA557.jpg

接下来我们开始实现,首先我们需要一个Projector组件,这个组件是Unity提供的。

wKioL1SfUdqQmod8AABzO2erM2s605.jpg

我们还需要一个接收的材质,

wKiom1SfUXKT9C-kAABYG18Upc8032.jpg

我们还需要一个接收阴影的脚本。如下所示:

wKioL1SfUmSh1gfbAACywIT4YCM730.jpg

有了上面这些我们就可以实现实时阴影了。

wKiom1SfUezie6p8AACbO6wAdsg357.jpg

以上方法只是对圆球体有用,物体也是会投射成圆球体,这不是我们需要的,我们需要是对任何物体都可以的,这就需要我们自己去实现Proector。效果如下图:

wKiom1SfU4LA3b-fAADPDNgrW8s051.jpg

代码示意图:

wKioL1SfVHOBtmsKAACCuyGDifg445.jpg

 

这样实现的阴影效果图,可以在手机端运行,而且帧数足够满足。代码后面奉上。