(六)unity Shader之——————unity的阴影

本文详细介绍了Unity中阴影的实现原理,包括Shadow Map技术、不透明物体的阴影投射与接收,以及透明度物体的阴影处理。讲解了如何通过设置物体的Mesh Renderer组件属性实现阴影效果,以及在Shader中对阴影映射纹理进行采样来产生阴影。还探讨了屏幕空间阴影映射技术,并分析了透明物体在阴影计算中的特殊性。
摘要由CSDN通过智能技术生成

为了让场景看起来更加真实,具有深度信息,我们通常希望光源可以把一些物体的阴影投射到其他物体上,下面介绍如何让一个物体向其他物体投射阴影,以及如何让一个物体接收来自其他物体的阴影。

一、阴影是如何实现的

在实时渲染中,我们最常使用的是一种名为Shadow Map的技术,它会首先把摄像机的位置放在与光源重合的位置上,那么场景中光源的阴影区域就是那些摄像机看不到的地方,而unity就是使用的这种技术。

在前向渲染路径中,如果场景中最重要的平行光开启了阴影,unity就会为该光源计算它的阴影映射纹理(shadowmap),这种阴影的纹理本质上也是一张深度图,它记录了从光源的位置出发,能看到的场景中距离它最近的表面位置(深度信息)。如何判断距离它最近的表面位置,一种方法是把摄像机放置在光源位置上,然后按照正常的渲染流程,即调用Bass Pass和Additional Pass来更新深度信息,得到阴影映射纹理。但这种方法方法会对性能造成一定浪费,因为我们实际上仅仅需要深度信息而已,而这两个pass往往涉及很多复杂的光照模型计算。因此,unity选择使用一个额外的pass来专门更新光源的阴影映射纹理,这个pass就是LightMode标签被设置为ShadowCaster的Pass。这个Pass的渲染目标不是帧缓存,而是阴影映射纹理(深度纹理)unity首先把摄像机放到光源的位置上,然后调用该pass,通过对顶点的变换后得到光源空间下的位置,并据此来输出深度信息到阴影映射纹理中。因此当开启了光源的阴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值