games101计算机图形学入门 (四)光栅化

上节课,我们学习了MVP变换,那么这节课,我们来思考一下在MVP变换之后要做什么

---光栅化(Rasterization)

定义宽高比,以及垂直可视角度

图片
图片

\[
可视角度\\\\\begin{aligned}
\tan \frac{f \text { ov } Y}{2} &=\frac{t}{|n|} \\
\\\\宽高比\\
\text { aspect } &=\frac{r}{t}
\end{aligned}
\]

思考:什么是屏幕?

一个与像素相关的数组(二维数组)


屏幕是一个典型的光栅成像装置

ps: pixel(FTI ,short for "picture element")

在本课中,我们假设像素只有一种颜色,已经是最小的单位

但是在实际的情况之中,我们知道,一个像素并不是简单的只有一种颜色

定义屏幕空间

图片

我们对屏幕空间进行了简单定义

  • 我们认为,屏幕空间以原点开始
  • 一个像素,用x,y的整数index来表示他,但是他的中心在x,y的像素的中心点

视口变换

​ 将一个(-1,1)的归一化空间进行投影,再对得到的投影进行视口变化,使其变为屏幕空间

视口变化矩阵:
\[
\begin{pmatrix}width/2 &0&0&width/2\\0&height/2&0&height/2\\0&0&1&0\\0&0&0&1\end{pmatrix}
\]

​ 视口变化的作用是将物体从ndc空间转换为屏幕空间,视口变换之后,进行采样,并进行光栅化。

引入一些成像机器

早期的视频设备

  • 示波器

图片

  • crt屏幕

图片

早期的成像技术--扫描

为了加快成像的速度,人们采取一些取巧的方式来实现图像成像,例如隔行扫描技术。

隔行扫描

简单的原理:利用了人的视觉暂留性,前一帧和下一帧分别进行图像2行的成像,减少了成像的时间,提高的刷新率

如今,虽然已经这样的方式已经没有继续在计算机图像学领域继续使用,但是在一些其他的领域,仍然发挥着他的作用

  • 视频压缩领域
  • 音频压缩领域
  • taa抗锯齿技术(借用思想)

一些特殊的成像装置

  • CNC sharpie Drawing Machine
  • line laser cutter

现在的显示原理->通过内存中的一块区域,直接影射到屏幕上

  • LCD液晶显示屏,通过液晶来影响光的极化,光的偏振现象

    图片

  • LED 发光二极管

  • 电子墨水屏

    通过电来控制墨水屏的层级,使其翻转,从而实现显示

    但是也产生了相应的问题->刷新率很慢

光栅化成像

​ 在进行光栅化成像的流程前,我们先来分析一下图形学中,应用最多的图像--三角形

三角形有哪些优秀的性质呢?

  • 三角形的表示能力很强
  • 三角形是最基础的图像,任何一个图形都能分解为多个三角形
  • 三角形的内部一定是在同一个平面内
  • 三角形的内外的判定很容易
  • 三角形内知道顶点属性,对三角形内进行插值是非常容易的

​ 了解了这些性质,那么我们就来研究如何对一个三角形进行光栅化处理,当我们知道了如何光栅化一个三角形的时候,我们也就有了处理复杂图形的能力。

采样(A Simple Apporach: Sanmpling)

​ 对于一个三角形,我们要对他进行着色,那我们就要判断相对应的三角形是否在三角形内,而这个过程最简单的实现办法就是采样。

ps我们这里指的采样是对屏幕的二维空间进行采样,而图形学之中,进行采样的方法很多,如三维空间采样

什么是采样?

​ 简单来说,就是给你一个已知函数f(x),再给你一些点,让你求出在这些点函数的值,正规一点来说,采样就是将连续的函数离散化的一个过程。

我们要做什么呢?

​ 我们要通过对三角形使用inside()函数,求出这些点是否在三角形内

图片

​ 那么我们具体要怎么操作呢

​ 回想一下第一节课,我们知道了2个向量的叉乘可以得到一个向量在另一个向量的左或者右,这样问题其实就解决了

图片

​ 按照A->B->C的顺序对Q和三角形定点组成的向量和三角形相邻顶点组成的向量做叉乘,我们可以得出若点在三角形内,那我们得到的三次叉乘结果方向应该是相同的

​ 但是对于这个算法,我们无法处理在三角形边上的顶点,所以,对于这样的点,我们一般有2种选择

  • 不做处理
  • 做特殊处理

​ 在一些图形学api中,大多做了严格的规定

在进行实际采样前,我们可以进行一些加速处理

图片

​ 可以求出三角形的MAXy,MINy,,MAXx,MINx。来组成包围盒,我们只需要求包围盒内的像素点和三角形是否有交点,从而减少运算量。

其他的一些加速思想

  • 我们只求三角形没一行的最大值和最小值,在对这个区域求交

图片

​ 但是这样的方法,求包围盒并不好求。

实际的平面的光栅化,实际的像素是什么样呢?

image-20210520234810944

ps右侧图片中像素的排列为Bayer pattern,使像素均匀分布在屏幕上

同时我们可以观察到一个很有意思的点,红蓝单元的密度地狱绿色

这是因为人眼对绿色的感知是很敏感的,更多的绿色单元会使得人眼更舒服

ps平面中的rgb是减色系统,打印是加色系统

本节课遗留的问题

​ 我们如果真的只是执行本节课的光栅化算法,我们会得到一个怎样的图形呢?

图片

​ 没错,这个图形与我们想象中的三角形相去甚远,我们可以明显的发现这个三角形发生了走样,产生了锯齿,那么我们要如何处理这些问题呢,详情下节课揭晓。

Thanks you

图片来源:闫令琪老师的games101计算机图形学入门课程,欢迎大家前去了解