图形学学习笔记三:光栅化

一、光栅化

  在学习完之前的变换之后,已经能使用我们放置的相机对 [ − 1 , 1 ] 3 [-1,1]^3 [1,1]3中的物体进行成像,接下来要做的就是将成像的结果呈现在屏幕上,也就是光栅化。

Viewport transform

如何将 [ − 1 , 1 ] 3 [-1,1]^3 [1,1]3的正方体转化到屏幕

  1. 忽视z轴的数据
  2. 转化到xy平面空间: [ − 1 , − 1 ] 2 [-1,-1]^2 [1,1]2 [ 0 , w i d t h ] × [ 0 , h e i g h t ] [0,width] \times [0,height] [0,width]×[0,height]
    在这里插入图片描述
      得到Viewport transform矩阵
    在这里插入图片描述

标题如何在像素点上表示一幅图形

在这里插入图片描述
inside ( t , x , y ) = { 1  Point  ( x , y )  in triangle  t 0  otherwise  \text {inside}(t, x, y)=\left\{\begin{array}{ll}1 & \text { Point }(\mathrm{x}, \mathrm{y}) \text { in triangle } \mathrm{t} \\0 & \text { otherwise }\end{array}\right. inside(t,x,y)={10 Point (x,y) in triangle t otherwise 
通过上式对各个像素点进行采样,显然出现了明显的锯齿。接下来要做的就是抗锯齿,反走样。

二、反走样、抗锯齿

先模糊再采样
在这里插入图片描述
如何理解上述结果呢,对一幅图像进行傅里叶变换。频域图像越中间,频率越低。
在这里插入图片描述
通过高通滤波器后 只剩下边缘信息
在这里插入图片描述
通过低通滤波器后 相当于对图像进行模糊
在这里插入图片描述
通过带通滤波器
在这里插入图片描述
在这里插入图片描述

图像滤波

图像的滤波=平均=卷积
时域上对两个信号进行卷积,等于频域上对两个信号进行乘积
在这里插入图片描述
采样
采样可以理解为重复信号在频域上的内容
时域上的乘积相当于频域上的卷积
在这里插入图片描述
采样的频率越低,会导致信号在频域上出现重叠
在这里插入图片描述
(香农采样定理:采样频率高于信号最高频率的一倍,那么,原来的连续信号可以从采样样本中完全重建出来)

如何反走样

  1. 增加采样率,增加屏幕的分辨率
  2. 先模糊(低通滤波),再采样
    低通滤波后,再用原来的采样率采样,信号在频域就不会发生堆叠
    在这里插入图片描述

Antialiasing By Supersampling (MSAA)

对原先的每一个像素进行进一步的细化

在这里插入图片描述在这里插入图片描述

总结

除了MSAA之外还有很多其他的反走样策略

加粗样式

二维下深度方向的处理

画家算法

  当我们要在屏幕上绘制物体的时候,会涉及到物体与物体间的遮挡问题。最常见的做法是像画家绘画那样,先绘制远处的物体,再绘制近处的物体。
  画家算法要求我们先在深度上进行一次排序(需要 n l o g n nlogn nlogn的时间),然后再进行绘制。但有些情况是无法通过画家算法来解决的,如下图:这个例子中,无论怎么排序,都无法得到上图的结果。
在这里插入图片描述

深度缓冲 (Z-Buffer)

深度缓冲用来记录每个像素的最小深度。
它的工作原理是:每次渲染的时候除了生成最终的图像之外,还生成一张深度图,该深度图记录了每个像素当前的最小深度。
在这里插入图片描述
具体实现步骤如下:

  1. 初始化所有像素的深度为 ∞
  2. 在光栅化过程中,不断更新其深度:
for (each triangle T)
for (each sample(x,y,z) in T)
    if (z < zbuffer[x,y]) {
        framebuffer[x,y] = rgb;
        zbuffer[x,y] = z;
    }

对于 n 个三角形,要得到某个像素的最小深度值,我们只需要遍历所有三角形即可,因此其复杂度为O(n);
深度缓冲还有以下的好处:
绘制三角形的顺序不影响最终结果所有 GPU 都支持深度测试
需要注意的是:深度缓冲并不能处理透明物体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值