图形学笔记5 光栅化

词源

光栅化一词起源于德语, 原型是屏幕加上动词后缀(笔者德语没有系统性学过 不知道这样说对不对) 也就是说 光栅化的原本意思是 在屏幕上绘制 这一动作

视锥范围的感性划定

我们在上节课提到了视锥, 那么如何直观的划定视锥的范围

我们规定看向的第一个面是near , 然后求出来垂直视角 \(fovY\) ,再定义一下视角比 \(aspect \ ratio\) 根据这两个值就可以求出来水平视角\(fovX\)

image-20230414183252766

这里我们假设图片中间的灰色虚线经过坐标轴, 也就是说 \(l=-r,\) \(b=-t\)

得到如下关系 \[ \begin{aligned} \tan \frac{f o v Y}{2} & =\frac{t}{|n|} \\ \text { aspect } & =\frac{r}{t} \end{aligned} \] image-20230414190228185

定义什么是屏幕(可绘制对象)

我们把屏幕定义成这样(一般的情况下, 屏幕坐标系的原点是屏幕最左上角的地方, 这里为了直观和方便, 定义为最左下角)

image-20230414214039247

第一个像素点的索引(index)被标记为二元组 \((0,0)\) 其中心坐标为 \((0.5,0.5)\) 需要加上0.5

索引数: \(from \ (0,0)\ to \ (x-1,y-1)\)

屏幕cover的范围: \(from \ (0,0)\ to \ (x,y)\)

把上一小节的视锥映射到屏幕(视口变换)

首先暂时忽略z坐标, 该值表示深度, 后续会用于竞争待渲染元素对像素的所有权

只看x和y的话就很直观了, 只需要把正方体的视锥, 拉伸到屏幕的大小

拉伸函数为: \[ M_{\text {viewport }}=\left(\begin{array}{cccc} \frac{\text { width }}{2} & 0 & 0 & \frac{\text { width }}{2} \\ 0 & \frac{\text { height }}{2} & 0 & \frac{\text { height }}{2} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \]

w列向量用于平移枢轴

另外两个主对角向量用于缩放scale

乘完上面的矩阵后就基本接近最终结果了, 接下来一步是把浮点数的描述图元, 映射到屏幕这个离散的承载体上面 转换成片元, 片元还携带着法线等信息, 需要进一步转换成像素点

介绍了一些显示设备

略过

主要有绘图机和CRT和示波器等

image-20230414221132252

为什么选用三角形作为基本平面

  1. 三角形是最少点可以组成平面的图形
  2. 三角形一定是平的, 三个点确定一个平面, 四个点不一定
  3. 其他图形都可以拆成三角形
  4. 三角形的内外定义很清晰, 不用考虑有洞的情况, 或者凹多边形什么的
  5. 渐变效果好做, 定义距离三个点的距离比多个点简单

光栅化过程

image-20230414221747734

经过前面的MVP和视口变换, 现在已经拿到了在二维平面(平面大小等于屏幕)上的点的坐标(是浮点数的连续坐标, 不是离散的) 我们现在需要映射到一个个单位中(片元) 接下来才能把片元映射成像素点

接下来需要判断各个像素中心点与三角形的内外关系, 这里需要用到之前的判定方法, 同号在内, 异号在外

image-20230414224437462

不考虑抗锯齿的话, 如果覆盖了中心点, 就可以认为覆盖面积超过一半, 应当显示在屏幕上对应像素位置, 如果没超过一半, 则完全不显示(现实中会用抖动算法部分的进行显示)

然后进行采样(采样 sample 定义: 把连续的数据离散化的操作)

定义函数如下

image-20230414222442313

输入是一个连续的浮点三角形t和待采样的位置(屏幕像素) 执行过程:

image-20230414222753982

输出是一个离散的布尔信号, 结果如下

image-20230414222633547

我们可以优化一下, 上述算法需要测试屏幕上所有像素, 我们只需要测试外接的盒体内的像素就行了

其他光栅化优化算法

image-20230414224551666

由于屏幕等显示设备一般是一行行的

所以我们也别费尽心思找碰撞盒了, 直接找每行最左边的像素, for循环往右边循环,等找到了某个像素判断在外面的时候, break到下一行的for循环

但是这种优化方法作用有限,有效性较大的场景是一个旋转的狭长钝角三角形, 他的碰撞盒包括的内容很多 但是自身的实际体积(面积)很小

介绍了一些其他显示像素排布

也就是常说的钻石排布和周冬雨排布, 此时的像素不是一行行的, 而是斜对角的, 或者是更加花里胡哨的形式

附上一段弹幕

光线叠加会更加强烈明亮,但是色彩叠加会变暗,所以有聪明的画家发明了点彩法,用很小的紧密的点间隔画上黄色和蓝色,实现高亮饱满的绿色

也就是说, 颜料是减色的,屏幕显示是增色的

image-20230414224932083
image-20230414224955186

抗锯齿

简答讲述了一下抗锯齿,锯齿英文 jaggies

信号采样率不够高导致的走样

解决方法和细节请看下节课

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: