基于入射角的阴影映射反走样算法
2018-01-18董文谯石
董文 谯石
摘要:阴影映射是通过计算机图形的模拟,在3D场景中加入阴影的过程。在实际的应用中,需要解决该算法产生走样的问题。本文采用一种基于入射角的阴影映射算法,有效解决了阴影生成的走样问题。
关键词:阴影映射;入射角;反走样
中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2018)09-0099-02
1 引言
阴影映射是通过计算机图形的模拟,在3D场景中产生阴影的效果。生成阴影有很多算法,其中体积阴影算法、阴影映射算法是两种比较常用的算法。体积阴影算法采用模板缓冲的轮廓数量进行阴影生成,其优点是像素锐利,阴影精确,适合精确表现动态光阴场景;缺点是这种方法需要进行过多的过度填充和勾画,计算机处理器计算量大,而且需要处理很多特例。阴影映射是将像素与以纹理形式保存的光照深度缓冲区或者深度图像比较,通过这种方式计算像素是否处于光源照射范围之内,从而生成阴影。这种方法是从光线角度还原场景,再投射到所有的阴影接收器上,其优点是每束光线单独进行阴影映射,所有物体上采用同一绘制,能够充分发挥图形硬件的能力,避免了体积阴影算法高填充率的缺陷。但是这种方法也存在其不足,图像生成的质量局限于阴影映射的清晰度,一个纹理中很难适用于每一物体,生成图像易产生走样。因此,我们使用一种基于入射角的阴影映射算法,有效地解决阴影走样的问题。
2 阴影映射算法实现过程
阴影映射采用的是两次成像Z缓冲阴影运算法则,从光源计算场景的离散可见度以决定一个像素是否有阴影。这种方法只需要两个通道,通道1从光源的角度再现场景、每一像素只保存z深度不保存颜色,Z-缓冲器将所含内容进行呈现成像,如果亮度越大,那么离光的距离越远;通道2则从眼睛的视角再现场景,将眼睛能看到的每一点P,转换成光源空间, 当该点位于光线和相机之间的空间,对于给定的一个点而言,我们比较比较投影到该点的阴影以及该点到光源的距离,来计算该点是否在阴影中[1]。
3 入射角方法反走样处理
由于阴影贴图受限于解析度,在距离光源比较远的情况下,多个片元可能从深度贴图的同一个值中去采样,因此阴影映射算法很容易在阴影边界出现粗糙的锯齿状走样现象。我们是通过一个放置在3D场景中的摄像机来观察场景中的对象,摄像机所能看到的视野的大小范围围成了一个标准的平截头体,我们以摄像机和光方向之间的入射角为基础,通过调整摄像机和光照方向的入射角,有效解决了阴影映射算法的走样问题[2-3]。
首先计算摄像机透视方向和光线方向之间的入射角,随入射角的增加从矩形向不等边四边形转换,当光线和摄像机方向垂直的时候(最小入射角)此时正好得到一个不等边多边形,侧边多数是倾斜的;当光线和摄像机方向平行的时候(最大入射角)此时正好得到一个矩形,侧边基本上平行。此时,矩形也在大小上有轻微的缩小,因为当他们的方向平行的时候,平截头体的交汇会变小[4]。相机、光照与入射角关系图1所示。
然后计算摄像机透视方向和光线方向之间的入射角,随入射角的增加从矩形到不等边四边形进行转换,矩形在大小上有轻微的缩水,因为当他们的方向平行的时候,平截头体的交汇会变小。这种方法速度快,方法简单,就连出现平行平截头体也能得出好的结果,分辨率的转换是平滑且渐进的,并且会随摄像机方向的改变而改变[5]。随入射角增加从矩形到不等边四边形变换图2所示。
4 结语
本文采用一种基于入射角的阴影映射技术,通过调整摄像机和光照方向的入射角大小改善阴影映射算法中的锯齿走样问题,图3所示是普通阴影映射的结果,可以看到其阴影边界存在着锯齿走样现象,图4所示是采用了入射角方法之后进行映射的结果,走样明显得到了改善。
参考文献
[1]谢依妨,杨红雨.基于遮挡区间映射的软阴影的研究与实现[J].计算机工程与设计,2015,(3):687-692.
[2]曹家乐,冯月萍.一种改进的阴影映射算法[J].吉林大学学报(理学版),2018,(1):89-94.
[3]汤翾.基于投影平面物体排序的阴影算法的研究[D].西华大学,2018.
[4]周国民,卢涤非,张其前.一种梯形结构的软阴影锥生成方法[J].浙江大学学报(理学版),2007,(6):628-632.
[5]劉列明,吴恩华.一种基于点光源的三维阴影的实时生成算法[J].软件学报,2000,(6):785-790.