这章介绍了如何通过邻近百分比过滤方法(Percentage-Closer Filtering , PCF)有效减少阴影贴图的反走样,并描述了如何实现一个简化版本,并对PCF方法进行了一定改进。关于阴影贴图和PCF技术的一些链接

https://pubweb.eng.utah.edu/~cs5610/handouts/reeves87.pdf

https://gameinstitute.qq.com/community/detail/101354

首先介绍一下阴影贴图技术。

阴影深度图算法是一个2 pass算法。第一遍生成一张光照空间的深度图。在第二遍,这张图被用来比较每个像素在光照空间中的深度和在光照深度图中的深度。

Pass1

在第一阶段,将场景从光源的方向渲染到一个深度缓冲区。更具体地说,顶点着色器将几何体变换到光照视图空间。第一阶段的最终结果是一个光照方向的场景深度缓存信息(阴影贴图)。其可用于Pass 2,以确定从光源开始,哪些像素是被遮挡的

Pass2

在第二阶段,顶点着色器对每个顶点变换2次。每个顶点变换到像机视空间(camera view)并作为位置(position)传入像素着色器。每个顶点还由光源的视点-投影-纹理(view-projection-texture)矩阵变换并且作为纹理坐标(texture coordinate)传入的像素着色器。view-projection-texture矩阵和Pass1中用来渲染场景的矩阵(view-projection)是相同的只是多了一个额外的变换(到texture空间的变化)。这个变换将点从视图空间(XY在-1到1)变换到纹理空间(X为0到1,Y为1到 0)。

像素着色器获得了插值后的位置(position)和纹理坐标(texture coordinate)。现在在纹理坐标中的一切都需要进行深度测试。通过纹理坐标的X和Y在pass1中的深度缓冲中进行索引,然后与位置坐标(position)的Z值比较来进行深度测试从而渲染阴影。

PCF软阴影技术

传统的阴影贴图技术是先对阴影贴图中的采样点filter取平均值,然后再与该位置的z值相比较,返回0或1.例如下图的例子:待渲染的像素点z值为49.8,阴影贴图中的九个采样点平均值为22.9,小于49.8,也就是说有比该渲染的像素离光源更近的像素,因此该像素点在阴影中,返回1.

PCF技术则是将filter和compare两个操作的顺序反转,先compare进行深度测试得出0或1,再根据得到的结果进行filter。如下图所示,先与待渲染像素的z值即49.8进行compare后得到各插值点的0或1值,再取平均值,即5/9 = 0.55。这解决了传统的阴影贴图技术只能返回0或1,阴影边界走样的问题,从而实现了软阴影。

GEM这篇文章中,实现了简化版的PCF,只是简单的在各处使用一个4X4 texel(纹素)的样本块、这个块应该大到能够有效地减少走样,但是不能达到要求大量样本和随机取样的程度。如下图。

可以看到3幅图中的显示效果区别很明显,图(c)中每像素取16个样本,效果最为出色,达到了反走样的预期。

【关键词提炼】

反走样/抗锯齿(Antialiasing)

邻近百分比过滤(Percentage-Closer Filtering , PCF)

透视阴影贴图( perspective shadow maps)

GPU Gems1 - 11 阴影贴图反走样相关推荐

  1. Unity可编程渲染管线系列(四)聚光灯阴影(阴影贴图)

    目录 1 一个带有阴影的聚光灯 1.1 阴影贴图 1.2 阴影命令缓冲区 1.3 设置 渲染目标 1.4 配置视图和投影矩阵 1.5 渲染阴影投射器 2 阴影投射器通道 2.1 阴影包含文件 2.2 ...

  2. GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

    开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点.这篇大体意思是对Perspective Shadow Maps进行部分优化.GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化 ...

  3. 图形学中的贴图采样、走样与反走样等

    图形学中的贴图采样.走样与反走样等 https://blog.csdn.net/bugrunner/article/details/8829438 计算机图形学中不可避免的会涉及到图像分析与处理的相关 ...

  4. 图形学中的贴图采样、走样与反走样等,图形学走样

    文章转自:http://www.bkjia.com/ASPjc/912364.html 版权归原作者! 计算机图形学中不可避免的会涉及到图像分析与处理的相关知识,前些时间也重温了下常用到的采样.重建以 ...

  5. GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

    这章介绍在片元shader中计算导数近似值的技术.这个技术把特别的值载入纹理mipmap的每个级别,以特殊的方式使用纹理映射硬件,计算出导数的结果,给出在屏幕上的像素间某个量的变化率. Cg标准程序库 ...

  6. GPU Gems1 - 12 全方位的阴影映射

    在这章中,把阴影贴图的思路扩展到正确处理全方位的(点)光源中,其中包括了实现细节,也涉及到基本硬件能力不足时的低效运行策略. 首先,这篇文章也谈到了在实时计算机图形学中产生可见阴影的两个流行方法是: ...

  7. dx12 龙书第二十章学习笔记 -- 阴影贴图

    对于龙书这本入门级别的书籍来说,我们仅关注于基本的阴影贴图算法.而像级联阴影贴图(cascading shadow map)[Engel06]这种效果更佳却也更为复杂的阴影技术,实则都是由这基本的阴影 ...

  8. 计算机图形学【GAMES-101】2、光栅化(反走样、傅里叶变换、卷积)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  9. Shadow Map阴影贴图技术之探 【转】

    这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本 ...

最新文章

  1. MACE(2)-----模型编译
  2. 历数玩转光伏的IT巨头们
  3. UE4 Run On Server与Run on owning client
  4. XE5 Android 开发实现手机打电话和发短信 [转]
  5. Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5)
  6. 【计算机网络复习 物理层】2.3 物理层设备
  7. CompletableFuture详解~thenAcceptBoth
  8. 中国数码单反相机市场趋势报告、技术动态创新及市场预测
  9. linux cetos7关闭防火墙
  10. 看了有多个人格的人,自己拍的视频
  11. 中石油企业微信私有版设置服务器,企业微信授权配置教程
  12. Tomcat安装及配置教程(超详细的图文教程)
  13. html 滑动条 实时计算,滑动条:拖动滑块改变进度
  14. vscode安装uweb_桌面应用|在Ubuntu中安装Visual Studio Code
  15. 【R语言数据科学】(十三):有趣的概率学(下)
  16. 5v供电的数字功放芯片有哪些
  17. 怎么把PDF转换成PPT
  18. sync failed 错误 springboot
  19. 二分图的匹配——匈牙利算法
  20. debian7配置apache+mysql+php

热门文章

  1. java holder 遍历_复合组件editableValueHolder与Bean验证不一致
  2. 安装Python3的工具包报Microsoft Visual C++ 14.0 is required的错误
  3. FP Tree算法原理总结(转)
  4. python字母后移5位加密_LabView对字符串进行加密,规则是每个字母后移5位,例如A变为F,b变为g,x变为c,y变为d…...
  5. python教程从入门到实践第八章_python:从入门到实践--第八章:函数
  6. 数学--图论--莫比乌斯线性筛模板
  7. UVA-1 #1. A + B Problem
  8. 如何理解和分析linux系统的CPU平均负载情况(load average)
  9. 【Tensorflow】tf.set_random_seed(seed)
  10. Perl获取当前系统时间