【Unity学习】Unity的阴影基础实现(Shadow Map)

Shadow Map的实现原理

在实时渲染中,我们最常使用的是一种名为Shadow Map的技术。即将摄像机位置与光源位置重合,那么场景中的阴影区域就是摄像机看不到的地方,在Unity中就是使用的这种技术。
再前向渲染路径中:
其实我们只需要得到在以上这种情况下的深度信息就行了,所以没必要再像计算光照那样,使用BassPass 和 Additonal Pass来更新深度信息来得到阴影映射纹理。而是使用一个专门的Pass来做,再这个Pass中,标签被设定为“LightMode” = “ShadowCaster”
当开启了光源的阴影效果之后,底层渲染引擎首先会再Shader中寻找该LightMode,如果没有,就会在指定的Fallback中继续寻找。

Shadow Map的实现过程

其实这是两个过程:
过程一:物体向其它物体投射阴影。这需要把该物体加入到光源的阴影映射纹理的计算之中。在Unity中就是在ShadowCaster的Pass中实现的。
过程二:物体接收来自其他物体的阴影。这需要在Shader中对阴影映射纹理进行采样,把采样结果和光照结果相乘。

备注

在不声明ShadowCaster的Pass的时候,我们会发现物体依然产生了阴影,这是因为在Fallback中有一个已经写好的ShadowCaster的Pass存在,可以直接打开对照代码
对于接收其他物体的阴影部分在后续更新中补上,不要是运用了宏指令三剑客,也不难

猜你喜欢

转载自blog.csdn.net/qq_32418469/article/details/81329715