unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现

本文详细介绍了Unity3D中软阴影和硬阴影的实现原理,包括传统的ShadowMap和屏幕空间的阴影。在前向渲染中,ShadowMap通过记录光源视点的深度信息来确定阴影;而在延迟渲染中,屏幕空间的阴影通过比较摄像机和光源空间的深度纹理来计算。Unity5.4之后,移动平台使用ShadowMap,而PC等平台支持屏幕空间阴影映射技术。
摘要由CSDN通过智能技术生成

0bf98a00881ad35968268bd48822189d.png

Unity3D中两种阴影的实现

传统的ShadowMap

ShadowMap说起来十分简单,把摄像机和光源的位置重叠,那么场景中该光源的阴影区域就是那些摄像机看不到的地方,主要应用在前向渲染路径中。

具体实现分以下几个步骤:

  • 如果有平行光开启了阴影,Unity就会为该光源计算它的ShadowMap(只会计算一个平行光),这张ShadowMap其实就是深度图,记录了从该光源的位置出发、能看到的场景中距离它最近的表面位置(深度信息)。
  • Unity中实现了一个额外的Pass来专门更新光源的ShadowMap,这个Pass就是LightMode标签被设置为ShadowCaster的Pass。
  • 然后在正常渲染的Pass中把顶点位置变换到光源空间下,以得到它在光源空间中的三维位置信息。然后根据坐标信息对ShadowMap采样,得到该点在ShadowMap中的深度信息。比较后,判断该点是否应该在阴影中。
  • 注意:利用Receive Shadows的开关可以控制物体是否显示阴影,但是不影响渲染。而Cast Shadows的开关则控制该物体是否会加入到Shadowmap的渲染。

屏幕空间的阴影

延迟渲染中的光照计算绝大部分都是在屏幕空间里进行的,同样也包括阴影。这种屏幕空间的阴影实现主要有这么几个步骤:

延迟渲染中的光照计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值