前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GAMES101】Lecture 12 阴影 Shadow Mapping

【GAMES101】Lecture 12 阴影 Shadow Mapping

作者头像
叶茂林
发布2024-01-31 09:00:13
1200
发布2024-01-31 09:00:13
举报

这里是光栅化的最后一部分,讲这个光栅化里面怎么实现这个阴影

实际上阴影就是光源看不到的地方但是是我们能看到的地方,那这个地方就应该有阴影,那具体怎么做呢,这个就叫做Shadow Mapping,分两步做

我们之前说过这个解决远近问题用的深度缓冲Z-Buffer,会用一个depth buffer存储像素的深度,类似的,这里把这个光源当作摄像机,然后去记录一次像素的深度,这样记录到的像素的深度都是光源可以看到的点的深度,因为光源看不到的点的深度会被覆盖对不对

然后我再从摄像机出发去记录像素的深度,这时记录下的像素的深度都是我能够看到的点的深度,如果这个点投影到光源的深度和第一轮记录的深度一样,那么说这个点光源和我都能看到,那这里应该没有阴影

如果摄像机看到的点投影到光源的深度和第一轮记录的深度不一样,那么说明这个点我能够看到,但是光源看不到,那么说明此处应该有阴影

实际操作中那么第一轮就会得到这个和深度缓冲Z-buffer一样的depth buffer深度图

然后去比较摄像机能够看到的点投影到光源的距离是否和depth buffer记录的相等,就是下面的绿色部分,非绿色部分就是应该存在阴影

然后其实可以看到这里绿色的部分不是很均匀,这几个球上颜色有点混乱,这个说明这个阴影不是非常理想,为什么会出现这种情况呢?主要有两个原因,一呢是因为浮点数精度问题,计算机二进制存储嘛,有些小数无法精确表示,那么就导致这个比较浮点数相等这个事情比较困难,那改成大于行不行呢,其实还是不行,还有大于某个阈值也不能根本解决这个问题;二呢是因为这个分辨率问题,就是这个采样问题,一个像素可能覆盖很多点,那每个点都有距离对吧,那我这个像素上不上阴影呢,这也是问题

还有就是它只能解决这个点光源的硬阴影,就是下面这个上面的阴影,就是阴影都是一样的,而无法表示这个软阴影,就是渐变的阴影,因为如果这个光源它不是点光源,它就会产生这种软阴影

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档