基于CSM和PCF的软阴影实现

断断续续花了两个多礼拜才把这个问题完全搞定,比开始预想的时间多多了,一开始也没想到会碰到这么多的状况,不过好在是都解决了。

阴影技术是三维渲染里面的一个非常重要的课题,实现方式多种多样,最基本的是从光源方向渲一张ShadowMap,简单易行,但是效果很差,锯齿像牛一样大。想要获得更精细的阴影,唯一的办法就是加大SM的分辨率。
Shadow map coverage
事实上我们对远处的阴影要求并没有近处那么高,粗糙点无所谓,反正离得远也看不见,于是在此之上,出现了Cascaded ShadowMap,简称CSM,它的做法是把相机的可视范围从近裁到远裁分割成N个子视锥,每个视锥渲一张ShadowMap。
View frustums partitioned arbitrarily
这样做的好处很明显,我们希望的是近处的阴影比远处的更精细,这种切分很好的实现了我们的要求。

我这次用的就是这个方法,具体的代码就不贴了,说下大概的实现吧。我们首先要拿到被切分相机的远近裁,然后计算出子视锥的八个顶点坐标。
下图中,C0是近裁,Cm是远裁,Ci代表分割线,假如我们想要分割出N个子视锥,那我们就需要求出N-1个Ci。
这里写图片描述
通用算法是:The Algorithm
使用混合因子λ将平均切分和指数切分融合起来。
The Practical Split Scheme
其中,指数切分公式是:

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值