光栅化
Canonical Cube to Screen
屏幕Screen
- 像素二维数组
- 数组大小:分辨率
- 一种典型的光栅成像设备
光栅化:画到屏幕上
像素
- 目前简化理解:看作一个统一颜色的小方块,最小单位
- 颜色:(红,绿,蓝)
屏幕空间
- 左下角为原点
像素位置用
(
x
,
y
)
(x,y)
(x,y),x,y为整数。
范围为(0,0) to (width-1,height-1)
像素的中心(x+0.5, y+0.5)
屏幕空间的范围:(0,0) to (width,height)
lua语言从1开始计数?
投影到平面
- 和z不相关
- 对xy平面变换: [ − 1 , 1 ] 2 − > [ 0 , w i d t h ] × [ 0 , h e i g h t ] [-1,1]^2 -> [0,width]\times[0,height] [−1,1]2−>[0,width]×[0,height]
- viewport变换
M v i e w p o r t ( w i d t h / 2 0 0 w i d t h / 2 0 h e i g h t / 2 0 h e i g h t / 2 0 0 1 0 0 0 0 1 ) M_{viewport} \begin{pmatrix} width/2 & 0 & 0 & width/2\\ 0 & height/2 & 0 & height/2\\ 0&0&1&0\\ 0&0&0&1 \end{pmatrix} Mviewport width/20000height/2000010width/2height/201
绘制机器
显示设备
CNC sharpie drawing machine
laser cutters
Oscilloscope 示波器
Cathode Ray Tubes 阴极射线管 Raster Scan 隔行扫描
Frame Buffer 帧缓冲 Memory for a Raster Display 光栅显示的内存
Flat Panel Display 平面显示器
LCD Liquid Crystal Display 液晶显示器
LED Light Emitting Diode 发光二极管
Electronic Display
OLED
光栅化三角形
三角形
- 基础多边形
- 拆解其他多边形
性质:
- 保证平面
- 内外定义良好
- 三角形内部插值
什么像素值近似三角形
输入:投影在屏幕上的三角形顶点的位置
输出:一组近似三角形的像素值
采样Sampling
在某一点对函数求值就是采样。
通过采样离散化discretize一个函数
for(int x = 0; x<width; x++)
out[x] = f(x);
采样是图形学的核心思想。我们采样时间(1D),面积(2D),方向(2D),体积(3D)…
如果每个像素中心都在三角形内,则采样
定义函数inside(tri, x, y)
判断点是否在三角形内。
inside(t, x, y) = 1 if (x,y) is inside triangle t, else 0
光栅化=采样一个2D指示函数
for(int x = 0; x<width; x++)
for(int y = 0; y<height; y++)
image[x][y] = inside(tri, x+0.5, y+0.5);
叉乘判断点的内外
点在边界上 自定义标准,不做判断
遍历所有像素?
三角形 BoundingBOX
Incremental Triangle Traversal
适合于薄的和旋转的三角形
显示器实际显示的信号
与连续的三角
Aliasing(Jaggies) 混叠,锯齿
Antialiasing 反走样
Pixels are uniformly-colored squares
Compare: The Continuous Triangle Function
Sampling is Ubiquitous in Computer Graphics
Sampling Artifacts (Errors / Mistakes/ Inaccuracies)瑕疵
- Jaggies锯齿 - 空间采样
- Moire摩尔纹 - 欠采样图像
- Wagon wheel effect - 时间采样
信号变化太快,采样太慢
反走样思想:采样前做模糊/滤波 Blurring(Pre-Filtering)
栅格化三角形中的锯齿,其中像素值为纯红色或白色
栅格化三角形的抗锯齿边缘,其中像素值采用中间值
先模糊后采样
blurred aliasing
为什么要先模糊后采样
频域frequence domian
cos
2
π
f
x
\cos{2\pi fx}
cos2πfx,
f
=
1
T
f=\frac{1}{T}
f=T1
傅里叶变换
傅里叶级数展开:用一系列正余弦函数表示函数
f
(
x
)
=
A
2
+
2
A
cos
(
t
w
)
π
−
2
A
cos
(
3
t
w
)
3
π
+
2
A
cos
(
5
t
w
)
5
π
.
.
.
f(x)=\frac{A}{2} + \frac{2A\cos(tw)}{\pi} - \frac{2A\cos(3tw)}{3\pi}+ \frac{2A\cos(5tw)}{5\pi}...
f(x)=2A+π2Acos(tw)−3π2Acos(3tw)+5π2Acos(5tw)...
傅里叶变换将信号分解成频率
更高频需要更快的采样
欠采样导致频率走样,高频信号采样不足,采样错误地显示为来自低频信号
在给定采样率下无法区分的两个频率称为走样
过滤=去除特定频率的内容
中心低频,
水平垂直的线:周期延拓。
仅滤除低频 (边缘) 高通滤波
滤除高频(模糊) 低通滤波
滤除低频和高频
滤波=卷积 (=平均)
空间域中的卷积等于频域中的乘法,反之亦然
Option 1:
- 在空间域中通过卷积滤波
Option 2: - 变换到频域(傅里叶变换)
- 乘以卷积核的傅里叶变换
- 变换回空间域(傅里叶逆变换)
盒子函数=“低通”滤波器
更宽的滤波器核=更低的频率
抽样=重复频率内容
冲击函数
时域乘积–频域卷积
混叠/走样=混合频率内容
如何反走样
1.增加采样率
- 本质上增加了傅立叶域中副本之间的距离
- 更高分辨率的显示器、传感器、帧缓冲区……
- 但是:昂贵并且可能需要非常高的分辨率
2.反走样Antialiasing - 在重复之前使傅里叶内容“更窄”
- 在采样前滤除高频
反锯齿=限制,然后重复
一个实用的滤波
一像素宽的滤波()
计算平均像素值的抗锯齿
- 对f(x,y)进行1像素的框模糊卷积
- 然后在每个像素的中心采样
在栅格化一个三角形时,f(x,y) = inside(triangle,x,y)在像素区域内的平均值等于该三角形所覆盖的像素面积。
通过超采样抗锯齿
(MSAA)
Supersampling
通过采样一个像素内的多个位置并取其值的平均值来近似1像素盒滤波器的效果
点采样:每像素一个样本
超采样:
-
在每个像素上取NxN个样本
-
对每个像素“内部”的NxN样本取平均值
j结果:这是显示器发出的相应信号
没有免费的午餐!
- MSAA的花费是多少?
里程碑(个人想法)
-
FXAA(快速近似AA)
-
TAA(临时AA)
超级分辨率/超级采样
-
从低分辨率到高分辨率
-
本质上仍然是“样本不足”的问题
-
DLSS(深度学习超采样)