通过顶点投射的方式实现简单实时阴影

通过顶点投射的方式实现简单的实时阴影

在这里插入图片描述
实时阴影的实现方法有很多种,shadowMap适用性最好,但性能开销也大,有时候我们的项目其实并不需要那么通用的阴影,我们只需要一个“适用某些特定场合”的一个“看起来正确”的实时阴影。

本文所说的,就是一种利用顶点投射的方法实现的实时阴影技术,在一些阴影质量要求不高,地面平整的项目是一个非常合适的方案。

原理

忽略自身阴影不谈,如果我们只考虑物体在地面上的阴影的话,其实就可以把这个问题简单概括为求一个物体每一个顶点在某个平面上的投影位置了。

公式推导

其实就是算出点W沿着光照方向与投影平面相交点P即可在这里插入图片描述
在这里插入图片描述
现在从图中就可可以直接得到Py = h,所以真正需要计算得到的只有Px

在这里插入图片描述
从图可以很容易看出这两个三角形其实是相似的
所以通过相似三角形的定律,可以得到公式
在这里插入图片描述
所有的变量除了Px都是已知的
所以只要通过简单的换算就可以得到
在这里插入图片描述
Px和Py都求出来,其实就已经得到了点M在高度为h的平面上X轴方向上的投影点P
同理也可以求出点M在Z轴的投影点
最终结合就是三维空间中的投影点

在shader中实现

有了公式以后,剩下的就简单了,我们只需要在shader中把所有的顶点的投影的位置计算出来,再进行渲染即可,不过该公式是基于同一坐标系下计算才成立的,所以需要把所有模型从自身空间转换到世界空间中进行计算,核心代码如下:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值