开始新的学习——GAMES202笔记
Lecture 02 Recap of CG Basics
本章为一些关于GAMES101的复习内容。
渲染管线再复习
硬件管线流程:顶点处理——三角形处理——光栅化——片元处理——缓冲操作
顶点处理:确定各顶点在屏幕空间的位置
三角形处理:确定三角形,确定面片
光栅化:将三角形像素化
片元处理:计算着色
缓冲操作:控制输出,后期处理
Lecture 03 Real-time Shadows 1
这章首先复习一下在 LearnOpenGL 学过的两 pass 阴影。
传统阴影有两大问题:走样和自遮挡。
阴影缓冲的方式能很好地在其他物体上显示阴影,但并不能处理模型自己挡住自己所产生的阴影。如果要用这种方式合理地产生自阴影,就需要将原来的模型拆解,这样产生的渲染代价是平方倍数增长的。
其二是走样,阴影缓冲分辨率是有限的,在光源视角看到的单像素位置可能换个角度之后就不再在屏幕上只占一个像素,这就导致了走样,阴影锯齿。这样产生的锯齿在第二个 pass 还没法用抗锯齿技术消除。
又是微积分,在图形学还没有接触过太多数学公式的我雾了…
不等式在 RTR 中的应用
因为图形学 “看起来是对的那么就是对的” 法则,这些不等式的正确食用方法应该是把它们当等式用 (approximately equal) 。
例如,通过约等式拆分两个函数乘积的积分,可以大大简化运算,提高效率。(式子右边的分母是归一化常数,也即区间长度)
然后我们拿来简化 PBR 公式:
这个公式积分范围越小越准,可以认为等式右边算的是左边的平均值。
PCSS - Percentage closer soft shadows
Shadow Mapping 产生的是硬阴影——阴影边界棱角分明,只可能有锯齿。
而软阴影存在过渡。通过名字可以窥见,PCSS 的软阴影处理方法可能就是离物体越远阴影越透明?
首先我们需要一个工具——PCF.
PCF 的做法(Percentage Closer Filtering)
在 Shadow Map 上,对每个像素进行 Filtering,找其附近 N×N 的像素,创建一个 01 矩阵——比其深度大为 1,深度小为 0.
然后取一个平均值作为其可见性。根据该可见性决定该处阴影透明度,这样就能在阴影边缘处达到模糊的效果。
(但这种方法不能消除走样,只会让锯齿变为模糊的锯齿。
效果:
当然暴力也可以解决问题,使用的均值矩阵越大,边缘就越模糊,锯齿也就越不明显。
该算法的开销也是成倍增长,非常慢。
优化做法——PCSS
- 先得到某个区域内的遮挡物平均深度.
- 通过深度决定 filter size(Penumbra esitmation)
- PCF