计算机图形学——阴影

阴影

投影阴影
我们我们根据点光源和多边形进行相似变换,通过变换矩阵实现,前提是我们只能投影到一个平面上。比如草原上的人的影子,马的影子,只要是影子都投影到草原上可以用到。

阴影体
首先要计算出处于阴影的阴影空间。然后判断我们看到的点是否在其中,若在,则减少其光照亮度。若穿过阴影体,深度缓存加一,穿出减一,最后通过模板测试判断是否为阴影。

阴影贴图
最常用的是阴影贴图。我们首先以光源位置进行一次深度记录,记录的内容是光源离最近表面的距离。并将改深度缓存存储到纹理空间。当我们第二次实际渲染的时候,投影之后将点映射到纹理空间,若大于纹理空间的值,说明是阴影。即从光源角度看,到该点的射线中有其它表面遮挡,因为纹理中记录射线方向有更近的点。

实现过程首先有LookAt矩阵,将视点放到光源。记录深度并放到纹理中,并且关闭颜色计算。第二次正常计算,投影后比较深度,我们可以减少漫反射和镜面反射来实现阴影。

同时存在着问题,因为第二次映射到纹理空间的时候,由于取舍可能会造成误差。我们会取错纹理中的点,或者认为相同的点,但是第二次的值比第一次的大。比如第一次是5.01,记录成了5,但是第二次会认为最近的是5,而将表面设置为阴影,即为阴影痤疮。

可以将第一次的值设置的大一点,在第二次还原回去,此时又会产生纹理空间的值超过0和1,会出现重复绘制的情况。那么我们设置为舍去超出范围来解决。

此外还有阴影柔和,目的是为了阴影去掉锯齿,并且模拟离阴影近的更暗一些,远的阴影淡一些的效果。我们通过采样平均来进行阴影柔和。但是在片段着色器中我们不知道其它点的情况,但是我们可以通过该点获取纹理中相邻的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值