图形学 Lecture3 光栅化(三角形)*

目录

上节课的回顾

光栅化

视口变换

光栅化

采样Sampling

反走样(抗锯齿)

        Artifacts

        频域

        滤波

        卷积

        频域上的采样

        反走样的做法

其他抗锯齿方法

深度缓冲


上节课的回顾

MVP 完成之后,会得到-1到1的立方体......

透视投影的两个属性

  • 长宽比
  • 垂直可视角度forvY (水平可视角度)

定义一个视锥,只需定义一个垂直可视角度和一个宽高比,就可以得出远近、左右、上下。

光栅化

概念:将立方体画在屏幕上

屏幕:可描述为二维数组,每个元素都是一个像素。

像素:可表示灰度,划分为256个等级,0表示黑,255表示白。

像素坐标:如图中蓝色像素坐标为(2,1)【左下角】

像素中心:(2.5,1.5)(x+0.5,y+0.5)

视口变换

从(-1,1)的正方形变到屏幕空间。

(忽略z轴)

  1. 先进行缩放
  2. 再将左下角移到原点

 

光栅化

将屏幕空间的多边形进一步打碎,打碎成像素,看每一个像素的值是什么。

看每一个像素是否在三角形内......

采样Sampling

---(光栅化的最简单的方法)将一个函数离散化的过程......

这里是利用像素中心对屏幕空间进行采样。

如何定义inside函数(即如何判断一个点是否在三角形内)?

 通过向量的叉乘

Q同时在三条边的左侧或者右侧 则Q在三角形内部。 

如果有一个点在三角形的边上呢? ---自己定义一个标准,不做特殊要求。

优化:

1. 定义包围盒

 for(x=xmin;x<xmax;++x)

        for(y=ymin;y<ymax;++y){ }

2. 每一行找一个最左、最右,就是每一行都定义一个包围盒。

  • 操作复杂
  • 适用情况:窄长的三角形....

反走样(抗锯齿)

 采样结束的结果:

产生了锯齿.......(走样)

如何反走样(抗锯齿)?

  • Artifacts

采样的三种Artifacts:

        锯齿 摩尔纹(空间上采样带来的问题) 车轮效应(时间上采样带来的问题)

本质:信号的变化太快导致采样跟不上,所以产生了走样。

反走样的做法:

>>> 先模糊(滤波)再采样

先采样再滤波行吗?

>>>不行,因为已经发生了走样。

  • 频域

傅里叶变换:把函数变成不同频率的段,并且把不同频率的段显示出来......

相同的采样方法,采样不同频率的函数。如采样f5的时候,采样频率太低,跟不上函数的变化。

>>>上图中,这些采样点采样黑色函数和蓝色函数得到的结果相同。

同样的采样方法,采样两种频率的函数,得到的结果我们无法区分,这就叫走样

  • 滤波

 去掉一系列的频率......

傅里叶变换:可以把一个函数从时域变到频域。

                        时域                                                  频域

右图中,中间部分为低频,周围部分为高频。(可以看出,低频信息较多)

 

 高通滤波(去掉低频信号)   ---对应 图像的边界

>>>图像边界(发生变化较大--对应高频信息)

 低通滤波(模糊)(去掉高频信号)  ---对应 一幅模糊的图像

带通滤波(去掉低频与高频信号)  ---留下了不太明显的边界信息

  • 卷积

>>>信号在任何一个地方,在它周围的区域,做了一个平均。

时域上的卷积==频域上的乘积

 

卷积方法:(相当于做了一个低通滤波)

 1). 一个图,用某一个卷积的滤波器,做一个卷积操作。

 2). 把这个图先傅里叶变换变到频域上,卷积的滤波器变到频域上,把两者相乘,乘完后得到频域的结果,再进行逆傅里叶变换变到时域上。

时域上的一个卷积核 变到频域上(卷积核越大 频域越小)

  • 频域上的采样

 

 采样不够快 >>> 采样点之间的距离很大 >>> 频谱上间隔越小 >>> 产生信号重叠(走样)

>>> 走样:频率的频谱发生了混叠。

结论 :(采样的密集 >>> 走样情况会好很多)

反走样的做法

  1. 增加采样率。
  2. 先模糊再采样。(把一个信号的高频信息拿掉,再进行采样。)

模糊:低通滤波

怎么做模糊 ?

用什么样的滤波器进行模糊操作?选用1个像素大小的低通滤波器。

 >>>(即对一个像素内的颜色进行平均)

MSAA(近似模糊过程)

MSAA所做的不是提高了采样率和分辨率,而只是为了得到三角形的近似覆盖。

将一个像素划分成四个小的像素。 

 再进行采样......

MSAA缺点:增加了计算量。

其他抗锯齿方法

  • FXAA(快速近似抗锯齿)

>>> 图像的后期处理(**和采样无关**)

先把有锯齿的图像得出来 通过图像匹配找到边界,把边界换成没有锯齿的边界。

  • TAA

>>> 复用上一帧感知到的结果,相当于把MSAA的样本分布到时间上,然后不对当前这一帧引入额外的操作。

深度缓冲(Z-buffer)

很多三角形叠在一起时,他们之间互相遮挡,怎么解决。

画家算法

>>>(先把远处的画出来,再用近的覆盖远处物体......)

需要对每个三角形排序 o(nlogn)

由于存在这样的情况

画家算法并不适用,引入了深度缓存的概念......

深度缓存(Z-buffer)

>>> 看每一个像素记录最浅深度

不需要排序 o(n) n为三角形数量

 

  1. 初始化所有像素的距离为无限远。
  2. 遍历所有三角形中的所有像素。比较之前记录好的深度,若小于之前记录的,更新此深度。

举例:

如果做MSAA,则要对每一个采样点进行Z-buffer,而不是一个像素。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值