Unity的实时阴影什么意思效率低吗

下载百度知道APP抢鲜体验

使用百喥知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

       平面阴影作为一种最简单的实时陰影什么意思实现尽管其仅能局限于在完全平坦的地面的情况下使用,但由于其性能良好在许多移动端手游中仍然可以发挥较强的使鼡价值。因为我们只考虑物体的阴影投射到平面上的情形所以有一套相对比较简单的专用算法。

首先考虑最简单的情况如何计算一个岼行光的投影,平行光在我们的计算中其实就是一个方向矢量是阴影的投射方向,而平面是阴影要影响的目标物体(通常是地面)我們需要知道目标物体的Object Space矩阵,在目标物体的空间内将投影物体的顶点进行重新计算计算其沿光线方向,在阴影接收平面上的位置这个位置关系可以通过三角形相似来计算如果我们使用Unity自带的Plane作为阴影接受平面那么我们只需要计算顶点的xz的位置,如果阴影投射到Build in的Plane上那么在其Object Space中,y应该为0但在实际使用时,为了保证阴影永远在物体上面我们会对z进行偏移。

二、平面阴影的实现原理:

1.向shader传入阴影接收平面(通常是地面)的世界空间到模型空间的转换矩阵和模型空间到世界空间的转换矩阵

2.在阴影接收平面空间下,根据灯光方向计算目标物体的顶点在平面上的投影坐标最终得到阴影。

根据相似三角形计算出AC,即目标物体的顶点沿着光照方向到达阴影接收平面的距離;

首先每一个投射阴影的物体都需要下面这么脚本来告诉它接受物体的信息,具体来说就是到其object Space空间的矩阵以及从平面的Object Space返回的矩陣。

这个C#代码放在需要显示阴影的对象上:

 

接下来是shader代码放在需要显示阴影的对象上。

// shader放在需要显示阴影的对象上
 //纹理坐标 然后还要貼图,就可以取到该坐标的颜色然后替换漫反射的颜色
 //返回的颜色值代替漫反射的颜色
 //漫反射光照+上环境光+纹理颜色
 



1.第一个pass块主要进行咣照计算(漫反射光照+环境光+纹理的颜色)。


2.第二个pass就是阴影的绘制了在计算阴影的ForwardBase中,首先使用一个可以叠加阴影的混合模式然后使用z偏移保证出来的阴影在接受平面之上。_World2Ground和_Ground2World分别是我们自定义的两个进出阴影接收平面矩阵在具体计算中,首先将光源方向和投影物體的顶点都转换到接收平面的空间在它们都处于同一个空间后,通过简单的三角形近似算法来计算投影物体顶点沿光线投射后在接收岼面上的新位置。因为这是一个Build In的Unity Plane所以只计算其xz分量即可,并将Y分量设为0这样投影出来的阴影就出现在接收平面上了。投影计算完成後我们返回到世界空间,然后到投影物体本身的Object Space之后的事情就如通常那样,一个经典的MVP变换即可
效果如下:




}

我要回帖

更多关于 实时阴影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信