Shadow学习笔记(PSM,LiSPSM,TSM,PSSM,CSM)Shadow很重要,伴随着我最近学习ShadowMap相关的东西,在这⾥记录⼀下,以便⽇后有需要的时候,再去看
⼀、简单总结
阴影实现的⽅法,⽬前能够⼤多数硬件都⽀持的包括:ShadowVolume和ShadowMap。
关于上述两种阴影的简单介绍,可以通过下⾯这个ppt的介绍: download.csdn/detail/junjie020/6760047
ShadowVolume是基于Geometry的⽅法实现,⼤致算法是
1. 求出ShadowCaster的阴影体
2. 然后⽤这个阴影体与ShadowReceiver求交
3. 最后基于Stencil Buffer,计算出阴影(ShadowVolume只是知道⼤致是这样,没有试过动⼿实现,可能有错,下⾯有相关技术介绍
的索引)。
优点:
不会⾛样,因为阴影的计算基于⼏何体计算的,并且是实现硬阴影的好选择。
(应该还有更多的优点的,⽔平有限,没有详细研究)
缺点:
1. 速度相⽐起ShadowMap来讲,要慢,因为阴影体计算及求交要耗费⼤量CPU时间,⽽且你的物体越复杂,performance下降得就越
厉害;
2. 实现软阴影的话,⽐较困难;(这些我都是通过我看过的⽂章和书籍⾥⾯得出的,我⾃⼰没有做过benchmark,⽽且我相信⼈家的
benchmark会做得⽐我好,哈哈,不过如果我需要⽤到它的话,我也会去做的,哈哈);
ShadowMap是基于图像空间的,⼤致的算法是:
1. 变换到LightSource的position,即以LightSource>
⽬前在学习PSM和LiSPSM,下⾯这个程序是基于Nvidia SDK中的Practical PSM整理得出的(⾥⾯包含了PSM,LiSPSM和TSM),⼯程是VS2012,有兴趣的可以去下载,代码质量尽管⼀般般,但思路还是很清晰的,值得边学习边拿来对着论⽂来看的:
blog.csdn/junjie020/article/details/17474903
box shadow怎么设置⼆、具体的算法
关于PSM
⾸先需要对某些术语进⾏解析:Post Perspective Space,其实就是Normalize Device Coordinate,但还没有映射到【-1,1】之间的时候(Clip Coordinate Space,我是这么理解的)。
1. 在Post Perspective Space(PPS)上进⾏ShadowMap。在PPS进⾏shadow>
2. 最后需要处理的是,被裁剪的物体的阴影投射(cast)到场景中去,所以这个时候,虚拟摄像机就是⼀个⾮常简单的解决办法了。这
个虚拟摄像机会通过判断这个要投射阴影到场景中,但⼜不会渲染到场景的物体的boundbox,对摄像机进⾏调整,进⽽在shadow texture中⽣成的时候,将这个物体的阴影投射也考虑进去,这个时候问
题就能够解决了。但新的问题就产⽣了,由于摄像机拉后了,必然会导致阴影的质量降低,导致有新的aliasing出现,GPU gems1,14章⾥⾯有关于这个虚拟摄像机的解决办法,感觉挺难理解的,只当作思路的参考就好了。
关于LiSPSM
cg.tuwien.ac.at/research/vr/lispsm/关于PSSM
关于CSM
参考资料:
Prespective Shadow Maps 都是论⽂
LiSPSM 都是论⽂
ShaderX 5 Cascaded Shadow Maps
ShaderX 6 Stabilize Cascaded Shadow Maps
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论