转载:小道 git 透视阴影贴图(Perspective Shadow Maps, PSMs)是由Stamminger和Drettakis在 github SIGGRAPH 2002上提出的一种阴影贴图(Shadow Maps)流派的方法。 算法 透视投影贴图方法的基本思想是,为了减小或消除阴影贴图的失真走样,对投射到大像素区域的物体取最大的阴影贴图纹素密度。 app 这章提出了一种优化透视阴影贴图(Perspective Shadow Maps)方法的新思路,对其三种缺陷都一一进行了改进。 post 【核心要点】 测试 这章首先讲到动态阴影的建立,目前主要有两个算法流派: 优化
阴影体和阴影贴图算法之间的不一样之处在于,是涉及到物体空间(object space)仍是图像空间(image space)。 spa
透视阴影贴图(Perspective Shadow Maps, PSMs)是由Stamminger和Drettakis在SIGGRAPH 2002上提出的一种阴影贴图(Shadow Maps)流派的方法,经过使用在投射后空间(post-projective space)中的阴影贴图来去除其中的走样,而在投射后空间中,全部近处的物体都比远处的大。不幸的是,使用原始算法很困难,由于只有要某些状况下才能正常工做。 3d 如下是透视阴影映射算法的三个主要问题和解决方案: code 1、当光源在摄像机后面的时候,有一个虚拟的摄像机锥体。若在锥体内保持全部潜在的阴影投射体,阴影质量就会变得不好。 解决方案:是对光源矩阵使用特别的投射变换,由于投射后空间能够使用某些在一般空的世界空间中不能作的投射技巧。它使咱们能够创建特殊的投射矩阵,能够看作"比无限远更远"。 2、光源在摄像机空间中的位置对阴影质量影响很大,对于垂直的方向光,彻底没有走样问题,可是当光源朝向摄像机并迎面靠近它时,阴影映射走样就很严重。 解决方案:把整个单位立方体保持在一个阴影贴图纹理中,对于遇到的问题,有两个办法,每一个办法仅解决问题的一部分:单位立方体裁剪法,把光源摄像机对准单位立方体的必要部分;立方体映射法,使用多个纹理来存储深度信息。 3、最初的文章没有讨论过偏置(bias)问题。偏置是随透视阴影贴图而带来的问题,由于纹素的面积以不均匀方式分布,这意味着偏置再也不是常量,而是与纹素的位置有关。 解决方案:使用在世界空间中的偏置(并且再也不分析双投射矩阵的结果),而后把这个世界空间偏置转换到投射后空间。 图 获得的阴影实时渲染结果(多边形10w ~ 50w个,分辨率1600x1200)。 【本章配套源代码汇总表】 Example 14-1计算立方体阴影纹理坐标(Shader Code for Computing Cube Map Texture Coordinates) Example 14-2在顶点Shader中计算偏置(Calculating Bias in a Vertex Shader) Example 14-3 紧邻百分比过滤的顶点Shader伪代码(Vertex Shader Pseudocode for PCF) Example 14-4 用于紧邻百分比过滤的像素Shader伪代码(Pixel Shader Pseudocode for PCF) 【关键词提炼】 阴影渲染(Shadow Rendering) 阴影贴图(Shadow Maps) 透视阴影映射(Perspective Shadow Maps,PSMs) 紧邻百分比过滤(percentage-closer filtering ,PCF) 单位立方体裁剪法(Unit Cube Clipping)
|