Unity ShadowMapping

原理:

场景中一个plane,一个cube,一个light,一个mainCamera

为了在plane上呈现cube的shadow,先在light上放一个lightCamera(位置方向跟light相同)

把light角度看到的深度图(注意是深度数据,而不是light角度看到的完整图像)保存到一个RenderTexure

在mainCamera的角度,计算plane上某个点P的颜色时,比较从mainCamera看到这个点P的深度值和从RenderTexture中取出的深度值

如果前者深度大说明这个点P在阴影中,相反则不在阴影中



具体实现细节:

1 记录计算灯光视野下的深度信息到RenderTexture

2 找到相机视野下某个点P在灯光视野下对应的P',P'和RenderTexture中某个像素点会有一个对应关系,找到这个有对应关系的像素点

3 读取像素点中的深度Zb,并跟相机视野下P的深度Za做比较,判断相机视野下P点是否在阴影中

精度优化:



参考

基于shadow Mapping的阴影

http://blog.csdn.net/zjull/article/details/11740505


Shadow Map 原理和改进

http://blog.csdn.net/ronintao/article/details/51649664


http://blog.csdn.net/aceyan0718/article/details/52067264


https://chengkehan.github.io/ShadowMap.html


有具体实现代码

https://github.com/kokichi88/shadowmapping

posted @ 2016-12-21 10:44  00000000O  阅读(120)  评论(0编辑  收藏  举报