首页 > 其他分享 >【图形学笔记】Lecture02&03 光栅化、抗锯齿、Z-buffer

【图形学笔记】Lecture02&03 光栅化、抗锯齿、Z-buffer

时间:2023-10-25 12:11:30浏览次数:40  
标签:采样 03 抗锯齿 图形学 频域 Sampling 三角形 Aliasing

目录

Lecture02-Digital Drawing 数码绘画

  • Drawing Machine:示波器、阴极射线管上显示光栅、栅格扫描
    • 帧缓冲:用于光栅显示的存储器。
    • LCD (Liquid Crystal Display) :液晶、Electrophoretic Display:电子墨水

Triangles - Fundamental Area Primitive 三角形——基本区域

为什么是三角形?

  • 最基本的多边形:其他多边形可以剖分成三角形、适合优化
  • 三角形有的一些独特性质:保证在一个平面上、内部是良定义的、在顶点上插值(重心插值)是良定义的

Rasterization 光栅化

Sampling 采样

  • 可以通过周期性采样,来离散化一个函数。

光栅化最简单的栗子,就是判断每个像素的中心在不在三角形内部。然后这里给了个直线 \(L(x,y)=Ax+By+C=0\) 的例子,和你说 \(L>0,=0,<0\) 的情况(但是没有说明系数就直接说的话,感觉挺扯的)

当然它后面定义了一个向量 \(P-P_0=(x,y)\) 的“一般垂直向量”(General Perpendicular Vector),这里直接定义成 \(N=(-y,x)\),相当于定了个逆时针的方向。

那么对于经过 \(P_0\) 的向量 \(V\) 所在的直线,对应的直线方程恰是 \(L(x,y)=(P-P_0)\cdot N=0\) 这个方程,所以就可以通过点积,用 \(>0/<0\) 定向了(感觉不如叉积),对于一个三角形来说,只要定了方向,就只需要判断三个半平面的交,进一步判断三次点击的符号是否有相反的(如果相反就不在内部了)。

Lecture03- Sampling, Aliasing, Antialiasing 采样、锯齿、抗锯齿

Artifacts due to sampling - “Aliasing” 采样产生的问题-混叠

  • 锯齿、车轮效应(Wagon Wheel Effect)——实时采样、莫尔条纹(Moire)——欠采样

Antialiasing Idea: Filter Out High Frequencies Before Sampling 抗锯齿的方法:采样前过滤高频信号

先采样再模糊(x),先模糊再采样(√)

Frequency Space 频域

Fourier变换:把一个函数表示成 \(\sin (n\omega x),\cos(n\omega x)\) 的带权和,空间域(Spatial Space)频域(Frequency Space);逆变换:频域→空间域。

高频信号自然需要更高频的采样,而欠采样就会导致频率的失真,甚至在一些低频的采样,可能会无法区分两种不同频率的不同信号——也就是我们说的走样/失真(aliases),这也算是从频率的视角去看失真吧。

注记:Fourier变换明明应该是时域和频域的变换,为什么这里又来个“空间域”?好像是说你可以把空间也看成时域。以及图像上看的话,中心的原点代表低频,外侧代表高频)

Filtering-Getting rid of certain frequency contents 滤波-去处某些特定频率

  • 过滤低频信号(Edges),即高通滤波——提取边界(这是直观的,因为”边界“处意味着有一些突变,信号突变,自然是高频信号)
  • 过滤高频信号(Blur),即低通滤波——模糊(那就是把变化大的信息抹去了)

滤波=卷积=平均,卷积定理(Convolution Theorem):空间域(时域)上的卷积=频域上的乘法,反过来,空间域的乘法=频域上的卷积。

上面那个 \(3\times 3\) 带上 \(\frac{1}{9}\)的就叫做Box Filter(也就是低通滤波器),更大的卷积盒意味着更小的频域。

Sampling = Repeating Frequency Contents 采样=取重复频率的内容

所以从频域上看,采样(离散化)后的函数,相当于是把原来频域上的函数进行复制黏贴,而如果采样的频率太低(对应着\(P_{\delta}(f)\) 的频域太密),就会出出现混叠(Aliasing)的情况,即走样。

![

How Can We Reduce Aliasing Error?如何减少混叠误差?

  • 1、提高采样率:更高的分辨率、帧缓冲区,但是会带来更高的花费
  • 2、反走样(抗锯齿):移走/减少高频信号(即频域图上,距离原点较远的信号)。
  • (注:课件上还具体说了,移走的是高于Nyquist频率的部分)

A Practical Pre-Filter 一个实用的预滤波器

一个 \(1\times 1\) 的卷积盒将衰减周期 \(\leq 1\) (即频率较大)的信息,所以就有了计算面积的考量:

Antialiasing By Supersampling(MSAA)超采样

对于任何一个像素,认为它被划分成很多小的像素,对每个小像素采样再平均。

一些实现细节:

1、超采样的位置。2、有多个三角形。3、内存开销

Painter's Algorithm 油画家算法

好像就是说油画家画画,从远到近画,近的可以把远的覆盖。

一定程度上可以 \(O(n\log n)\) 地对三角形排序,但是很多时候,三角形并不具有全序关系:

Z-Buffer 深度缓冲

(这一部分在学校的课件放到了Lec5里,但我感觉放这里更合适?)

存储两个信息:

  • 1、frame buffer存RGB信息。
  • 2、depth buffer(z-buffer)存当前最小的深度信息。
for (each triangle T)
    for (each sample (x,y,z) in T)
        if (z < zbuffer[x,y]){// closest sample so far
            framebuffer[x,y] = rgb;// update color
            zbuffer[x,y] = z;// update z
        }else{
			// do nothing, this sample is not closest
        }

标签:采样,03,抗锯齿,图形学,频域,Sampling,三角形,Aliasing
From: https://www.cnblogs.com/yoshinow2001/p/17786878.html

相关文章

  • 题解 CF903G【Yet Another Maxflow Problem】
    加边\(A_n\stackrel{0}{\to}A_{n+1}\),\(B_0\stackrel{0}{\to}B_1\)。称形如\(A_i\toA_{i+1}\)的边为左部边,形如\(B_j\toB_{j+1}\)的边为右部边,形如\(A_i\toB_j\)的边为中间边。根据最大流最小割定理,将最大流问题转化为最小割问题求解。显然,至少存在一组最小割,包含恰好......
  • pinia: Cannot read properties of undefined (reading '_s')
    使用Vue3+Pinia+PNPM+Vite开发一个前端项目时,运行preview,报错:piniaCannotreadpropertiesofundefined(reading'_s')报错的代码是压缩后的:functionwe(e,t,n){lets,c;constu=typeoft=="function";typeofe=="string"?((s=......
  • flask 学习之解决flask migrate时报Can't locate revision identified
    错误原因:数据库已经和flask建立的连接,但是项目中migrations/versions下没有迁移版本文件,但是数据库中alembic_version中有版本号,当数据迁移时没有找到对应的迁移脚本文件,解决方案:手动创建迁移脚本:flaskdbrevision-m  然后将数据库中的alembic_version中的version_num改成......
  • 03前端开发
    溢出属性#文本内容超出了标签的最大范围overflow:hidden;直接隐藏文本内容overflow:auto\scroll;提供滚动条查看#溢出实战案例div{overflow:hidden;#例如可以把头像多余溢出部分隐藏}divimg{width:100%;#把头像比例......
  • 麒麟KYLINOS桌面操作系统2303上安装tigervnc
    好文推荐:统信UOS或者麒麟KYLINOS上软件包有未满足的依赖关系怎么办hello,大家好啊,今天给大家带来在麒麟桌面操作系统2303上安装tigervnc的文章,本篇文章给大家讲述如何安装并且远程连接使用,后面会给大家更新如何将tigervnc做成桌面图标点击即可开启及关闭,欢迎大家浏览分享转发。1、查......
  • 【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
    问题描述在AppService中,为AppService配置了访问限制,结果导致在克隆AppService的代码时候,遇见403错误。  问题解答因为在使用gitcloneAppService的应用代码时,使用的URL地址为https://***.scm.chinacloudsites.cn/***.git,它是通过公网访问,并且会根据设定的访问限制......
  • 《代码大全》阅读笔记03
    第五章:软件构建中的设计1、软件的首要技术使命就是管理复杂度,以简单性作为努力目标的标记方案对此最有帮助。2、好的设计是迭代的,你尝试设计的越多,你的最终方案就会约好。3、隐藏实现、封装变化。 第六章:可以工作的类1、类的接口应该提供一致的抽象。很多问题都是由于违背......
  • CH32X035 模拟IIC驱动EEPROM
    在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035GPIO模拟IIC的实现例程。 具体程序代码如下:iic.h文件:#ifndef__IIC_H#define__IIC_H#include"c......
  • CH32X035 模拟IIC驱动EEPROM
    来源:https://www.cnblogs.com/liaigu/p/17784027.html在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035GPIO模拟IIC的实现例程。 具体程序代码如下:iic.......
  • 云原生架构实战03 核心实战
    1、资源创建方式命令行YAML2.Namespace名称空间隔离资源kubectlcreatenshellokubectldeletenshelloapiVersion:v1kind:Namespacemetadata:name:hellokubectlgetnskubectlgetpods-Akubectldeletensmy-istio-ns3、Pod运行中的一组容器,Pod是kubernetes中应用......