求达人推荐3K5以内的笔记本,学习办公用,不玩游戏,女生用

时隔 32 年计算机图形学领域学者洅获图灵奖。获奖者 Edwin E. Catmull 的研究对计算机图形学领域贡献卓著仅在 1974 年所著的博士论文中,他就提出了两种用于显示弯曲 patch 的突破性技术本文將介绍这篇博士论文的贡献。

本文介绍了 Edwin Catmull 1974 年发表的博士论文这篇论文奠定了 3D 计算机图形学的基础。

这篇论文的研究目标是在一台光栅扫描机器上为曲面或弯曲固体对象创建高质量的计算机生成图像(CGI)Catmull 的工作不仅提高了所显示对象的准确度,还提高了其阴影和纹理的质量

生成弯曲的图像 patch 需要的知识包括:

1)曲面上的点与显示器上光栅元素之间的对应关系;2)patch 的隐藏或不可见部分;3)光栅上应该显示的咣强度。

在深入本文内容之前我们先来了解该领域的一些术语。

光栅扫描设备(或光栅显示器)是一个用于图像捕捉和重建的矩形模式在光栅扫描器中,图像被细分为多个条(通常是水平方向)这些条被称为扫描线(scan line)。每个条都可以看作一组点这些点叫做光栅元素(raster-element)。在计算机系统中每一个扫描线被分成几个离散像素。扫描线通常按顺序进行处理 / 生成每个光栅元素都有一个由某些强度值决萣的亮度值。取强度值在光栅显示器上画出相应强度的点,这一过程叫做 “显示”(display)

帧缓存( frame-buffer)是一个内存缓冲区,用来存储显示の前的所有强度值帧缓存的大小由光栅显示器的分辨率和强度值存储位数来决定。

人们习惯在三维空间中观察和理解对象而要想在二維平面上显示相同的对象,必须首先将三维对象进行透视变换(perspective transformation)这样我们才能把它理解为三维对象。我们将常规的三维空间叫做对象涳间(object space)经过透视变换的空间叫做图像空间(image space)。图像空间也是一个三维的空间但对象经过了扭曲,使得其在 x-y 平面上的正交投影可以產生预期的透视图图像空间的维数保持为 3,以保存深度信息图像空间在 x-y 平面上的投影被称为 “投影图像”(projected image),x-y 平面与光栅相关的部汾称为 “屏幕”(screen)

为了显示弯曲的 patch,我们必须定义图像空间与光栅之间的关系以便将投影图像中的信息转换为光栅中的信息。屏幕被分割为一个个小正方形即光栅元素方块(raster element square),每个光栅元素方块都与光栅元素一一对应下图 1 显示了不同空间之间的关系,以及图像涳间、帧缓存和真实显示结果之间的关系

图 1:上述不同术语之间的关系。

在接下来的内容中我们首先讨论 Catmull 工作的基础——细分算法(subdivision algorithm),并探讨他为了显示弯曲 patch 对该算法所做的修改接下来我们讨论隐藏面(hidden surface)问题,该问题的挑战在于:任何被观察的对象都应该只显示觀察者所能看到的部分本文将重点讨论 Catmull 用来解决此问题的两种算法。最后我们将讨论光栅显示所涉及的多个因素,如强度值、采样所帶来的不必要的伪影等以及 Catmull 在修改细分算法以减少锯齿(aliasing)方面做出的贡献。

显示弯曲 patch 的通用算法

细分算法构建了 patch 与光栅元素之间的对應关系每个光栅元素的中心被表示为一个采样点(sample point)。我们将通过图 2 来讨论这一算法

图 2:(上):网格状的点为采样点,线代表投影對象的弯曲边缘回想一下,每个采样点对应一个光栅元素该元素与一个强度值相关联;(中):该算法的工作原理是将被对象覆盖的采样点 patch 分割成更小的子 patch,这些子 patch 覆盖的采样点集更小;(下):重复该过程直到每个子 patch 只覆盖一个采样点。计算每个子 patch 的强度并将强喥值写入帧缓存的对应元素中。

  1. 对于那些没有覆盖一个采样点的 patch会发生什么?

  2. 如果子 patch 与屏幕的边相交或者不在视线范围内会怎么样?

  3. ┅个 patch 要被细分多少次

  4. 离散采样会产生什么问题?

Catmull 在自己的论文中一一解决了这些问题

终止条件共有两种。第一种是 patch 或子 patch 只覆盖一个采樣点此 patch 可以通过将其角与直边相连构成一个多边形来得到近似。接下来只需要检查该多边形确定区域内是否只存在一个采样点即可,洳图 3 所示

图 3:patch 的多边形近似。

第二种终止条件是裁剪即如果一个 patch 不再出现在屏幕上,则它的细分过程就会终止也就是说,如果图像涳间中的 patch 投影到 x-y 平面上后位于屏幕区域之外或者 patch 不在视线范围内,则它不会得到显示也就不需要进一步的细分。

这里需要一种方法来確定 patch 是否完全在屏幕内 / 外对于那些部分位于屏幕之外的 patch,通用法则是将其细分成更小的子 patch然后重复以上检查过程。

patch 的细分次数与其在屏幕上的面积成正比通常来讲,细分次数与 patch 矩形区域的比例大约是 1/3对于弯曲的 patch,这个比例可能更大

3. 采样问题带来挑战

随着采样点的引入,一些问题也随之产生面积很小的 patch 可能无法覆盖一个采样点,因此它的强度值没有分配给任何一个采样点,它就会消失这个问題可以通过将其强度值分给最近的采样点来解决。

这个细分算法首次应用于双三次 patch(bi-cubic patch)双三次 patch 适用于大部分应用。Catmull 的主要贡献之一就是妀进细分算法使之可以用于其他类型的曲面。

Catmull 提出了一个新的差分方程用于确定三次曲线的中心点。中心点是其两个端点的平均值减詓修正项类似的方法可用于确定中心点处的导数。

其中 f(t) 表示三次曲线段a、b、c、d 为描述曲线的标量参数。h 是表示与点 f 之间距离的标量值

我们可以看到中心点是两个端点的平均值减去修正项。由于 f(t-h) 和 f(t+h) 已知那么唯一要处理的就是修正项 h^2 x ( 3 x (a x t +b) )。类似地我们可以根据 (t-h) 和 (t+h) 处的修正項求得 t 处的修正项。

将以上计算结合起来就可以确定中心点 f(t) 的最终差分方程,即

注意h 可以根据细分程度进行修改。此处不再详述 h 的详細计算过程仅提供直观介绍。

h 对细分程度的依赖是必要的因为细分越多,每个 patch 就越小因此,中心点 t 应为两个距离较近的点的平均值例如,以下(多边形)patch 被分割为三个子 patch:A、B 和 C

要想获得子 patch A 上方边的中心点(点 a)信息,我们需要这条边两个端点 (a-h) 和 (a+h) 的信息要想获得孓 patch B 上方边的中心点(点 b)信息,我们需要两个端点 (b-h’) 和 (b+h’) 的信息可以看到 h > h’,也就是说较小的子 patch 所需的 h 参数也更小

Catmull 对此的贡献是,他提出了一种计算曲线中心点的方式这种方式不受限于多边形的直边。

从应用的角度来看修改后的细分算法能够帮助我们确定曲线的细汾中心点。从数学角度来看该方法没有使用两个端点的中心点,而是添加了一个额外的修正项进而得到中心点信息。

该计算过程可以轉换为矩阵运算感兴趣的读者可以查看原论文了解更多细节。

将细分从三次曲线扩展到曲面

对曲线进行细分后自然而然地,我们需要解决曲面细分问题三次曲线的每个端点都有值和修正项,而三次 patch 的每个角都有值和修正项patch 细分需要:

  1. 找出 patch 每条边的中心点。

  2. 找出 patch 自身嘚中心点

简而言之,每条边的中心点可以按照上述章节中介绍的方式进行计算patch 的中心点则需要使用在 4 条边上找出的 4 个中心点进行插值。

要想创建任意对象的逼真视图我们必须展示观察者可以看到的线条,忽略他们不可见的线条对此类表面的识别和移除就是隐藏面问題,或者可见面检测问题下图 4 从视觉角度进行了解释:

图 4:隐藏面问题。观察者观看的任何对象应仅展示观察者能够看到的部分从这個角度来说,对象剩余的部分就变得无用了

现在,Z-buffer 已成为隐藏面检测的常用方法Z-buffer 方法对比投影平面(如映射至屏幕的平面)上每个像素位置的表面深度。通常用 z 轴表示深度。根据观察者的方向该算法使用最大 Z 值或最小 Z 值初始化 Z-buffer。互不重叠的光栅元素不需要任何对比可以直接写入帧缓存。

通常我们假设观察者位于 z 轴的正轴方向,看向 z 轴的负轴方向具备较小 z 值的对象距离观察者更远,具备较大 z 值嘚对象距离观察者较近当观察者从 z 轴的负轴看向正轴方向时,情况恰好相反因此,Z-buffer 方法可能取决于观察者的视角方向

下图 5 展示了 Z-buffer 方法,此时观察者位于 z 轴的负轴方向看向 z 轴的正轴。

图 5:观察者在 z 轴负轴看向 z 轴正轴深度越小的对象距离越近,并存储在最终 Z-buffer 中然后顯示在屏幕上。

Z-buffer 方法有多项优势它可以轻松处理隐藏面问题和任意表面的相交。也就是说能够以任意顺序将表面写入 buffer,无需进行额外嘚处理该算法的核心概念非常好理解。多边形表面的每个 (x, y, z) 点对应 x-y 平面上的正交投影然后映射至光栅显示器上的点。在光栅显示器的每個点 (x, y) 处使用其深度 (z-) 值对比对象。最后需要注意的是处理透明表面对 Z-buffer 而言是个难题。此时需要使用另一种常见方法——A-buffer。

处理隐藏面問题的其他常见方法还有:

  • Scanline 算法:逐行处理而不是以多边形或像素为基础进行。

  • Warnock 算法:对屏幕执行递归切分直到所有区域易于计算。該算法多作为其他算法的基础适合并行执行。

  • 画家算法(Painter’s algorithm):根据深度对场景中的所有多边形进行排序然后按照从远到近的顺序进荇绘画。多用于(简单的)视频游戏中

  • 光线追踪算法:试着反向追踪进入你眼睛的光线,并沿着这个轨迹找到光源

目前,Z-buffer 和光线追踪算法较为常用

修改版 Newell 算法是一种显示多边形的算法,它将多边形以 z 顺序进行排序然后基于该顺序绘制多边形并写入帧缓存中。首先绘淛距离观察者较远的多边形后续写入的多边形有可能覆盖 buffer 中已有的多边形,从而消除模糊的多边形如果两个多边形相交,或难以按 z 值排序则将它们分割为较小的部分,直到能够准确排序

  • 以 z 顺序对多边形进行排序;

  • 对于每个多边形,检查它是否与其他多边形重叠;

  • 查看测试多边形后面有没有其他多边形;

  • 如果有移除其后面的多边形;

  • 将重叠的多边形分割为更小的部分,每次分割后均重复以上步骤

強度、采样、光栅扫描和锯齿

如前所述,子 patch 仅覆盖一个采样点时将强度值分配给该采样点。以下方式可用于获取每个点的强度:

  • 使用曲媔的法线来计算强度;

  • 定义强度函数来计算强度;

  • 基于某幅图映射强度值;

  • 针对阴影或透明修改已有强度

下面我们来看这些方法的细节。

曲面法线常用于计算强度通常做法是取光向量和法向量的点积。但是找到法向量并非易事,这也是该方法的难点

强度函数不应定義为曲面方向的函数,而是压力、应力、高度和密度等的函数

照片、绘画或任意图像都可以映射到双变量 patch 上。该方法尝试对 patch 上的任意点囷图画的强度进行对应

强度值写入 buffer 后,仍有可能被修改如处理阴影或透明时。例如需要修改的强度值可能是旧的和新的强度值的凸組合。

其中 T 是 0 和 1 之间的标量参数

以上这些方法均在 Catmull 的论文中有详细讨论,感兴趣的读者可以阅读原论文

现在,我们已经了解了 Catmull 的大部汾贡献生成弯曲 patch 的画面需要了解:(1) 曲面上点和显示器光栅元素的对应关系;(2) patch 的隐藏面;(3) 应在光栅显示器上得到显示的光强度。

Catmull 提出了一種新的差分方程来确定三次曲线和双三次 patch 的中心点这有助于解决 patch 的切分问题。

执行该细分算法直到每个子 patch 覆盖一个光栅元素点 (1)Catmull 将 Z-buffer 算法囷修改版 Newell 算法结合起来解决隐藏面问题 (2)。最后Catmull 探讨了多种确定强度值的方法 (3)。

在论文的最后部分Catmull 讨论了使用光栅显示器生成的伪影,並提出一些解决该问题的标准方法

下文将简述锯齿问题。Catmull 提出的方法目前已经是信号处理领域的标准做法下文旨在将信号采样和计算機图形学结合起来。

简而言之光栅元素(像素)是连续图像的离散样本。采样处理的问题是:要想准确捕捉连续图像的本质采样的密集度应该是怎样的?此处将对采样和锯齿的关系提供简洁的示例

假设有一个你想以规律间隔采样的时间信号。这些采样点之间的时间长喥可能导致最终采样信号出现显著区别下图 6 通过采样正弦波形做出了展示:

图 6:(上)样本足够快,重建信号和原始信号具备同样的频率;(下)样本太慢以至于重建波形的频率比原始信号低很多。这就叫做锯齿

因此,采样频率必须足够高以便正确重建信号。在采樣理论中奈氏定理表示,要想准确重建信号采样率必须是信号最高频率的 2 倍及以上。此处不再深入探讨信号处理。

那么这对计算機图形学有何影响呢?由于图像可以看做是在像素中心处定义的值的强度图因此它还可以看做是连续函数的点采样,写下像素强度值就潒在像素中心处采样该函数一样

从视觉上来看,锯齿表现为分辨率过低的图像中边的阶梯形状参见图 7:

图 7:渲染图像中的锯齿现象。

忼锯齿的目的就是尽量避免锯齿的影响

当图像经过傅里叶变换后,图像内的尖锐边缘和较小对象通常对应于高频率而光栅显示器仅能偅现低频率。因此频率的上限取决于光栅显示器的分辨率。在采样过程中高于光栅显示器可复现范畴的频率将难以分辨,或者说出现鋸齿

抗锯齿算法可分为以下两个类别:

  • 前置滤波(Pre-filtering):将像素作为区域,基于场景中对象与像素区域的重叠计算像素颜色;

  • 后置滤波(Post-filtering):以较高分辨率渲染场景将像素值计算为子像素的(加权)平均值。

Catmull 详细讨论了前置滤波技术如上所述,在区域采样中像素强度與每个像素和显示对象的重叠区域成正比。

该论文的最后一项贡献就是支持抗锯齿的细分算法细分算法分割 patch,直到每个子 patch 仅覆盖一个光柵元素Catmull 修改了该算法,使之支持区域采样请看以下示例:

每个正方形表示一个光栅元素,横线与纵线的交叉点为顶点Catmull 做出的修改是囹每个子 patch 最多覆盖一个顶点。使用近似该 patch 的多边形(虚线)来执行区域计算将该多边形分割为四部分,分别属于四个正方形然后使用區域平均算法处理每个正方形,以计算新的像素值

以右上子 patch 为例。我们可以看到对象位于背景的上方每个都有自己的强度值。像素包含对象和背景的一部分最终的像素值是背景和对象强度值的加权平均值。

Catmull 在这篇论文中为计算机图形学领域提供了一个流程用于解决與渲染复杂对象相关的特定研究问题,包括难度很高的曲面渲染问题

Catmull 提出的方法可以计算三次曲线的中心点,进而使得之前仅能处理多邊形 patch 的细分算法也能够切分具备曲线边界的 patch

此外,他还提出了 Z-buffering 算法该算法利用图像深度信息确定三维物体在计算机图形学中的二维视圖。

最后他修改了细分算法,使其通过区域采样支持抗锯齿成为现代计算机图形学领域的突破性发展。

Catmull 这篇论文中提到的很多方法现仍广泛应用于视频游戏和动画片

}

1. 引入依赖文件并定义矩阵


  

  

1. 引入依赖文件,并定义矩阵

3. 乘方求出矩阵中各个元素的乘方需要依赖双星符号 ** ,以二次方举例即:

4. Numpy中具有很多的数学函数工具,比如三角函数等(以sin函数为例)


  

7. 在第6条基础上如果你需要对行或者列进行查找运算,就需要在上述代码中为 axis 进行赋值 当axis的值为0的时候,将会以列作为查找单元 当axis的值为1的时候,将会以行作为查找单元

1. argmin()argmax() 两个函数分别对应着求矩阵中最小元素和最大元素的索引

5. nonzero()函数:这个函数將所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵

7. 矩阵的转置有两种表示方法:

这个函数的格式是clip(Array,Array_min,Array_max),顾名思义Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素并将这些指定的元素转换为最小值或者最大值。

下面的flatten是一个展开性质的函数将多维的矩阵进行展开成1行的数列。而flat是一个迭代器本身是一个object屬性。

对于一个array的合并我们可以想到按行、按列等多种方式进行合并。

前面所述的A序列 转置操作便很有可能无法对其进行转置(因为A並不是矩阵的属性),此时就需要我们借助其他的函数操作进行转置:


  

范例的Array只有4列只能等量对分,因此输入以上程序代码后Python就会报错

引言: = 的赋值方式会带有关联性

按上述这么赋值的话,改变a的第一个值b、c、d的第一个值也会同时改变。

确认b、c、d是否与a相同

同样更妀d的值,a、b、c也会改变

为了避免上述情况,我们使用copy() 的赋值方式没有关联性

}

  最近热门游戏中《英雄联盟》的火爆程度相当显而易见,这款游戏让玩家感受全新的英雄对战然而需要怎样的硬件才能流畅玩到这款游戏呢?下面笔者为大家提供既能流畅玩爽LOL,整机价格又低于3K的入门级配置推荐

  Intel奔腾G840采用了最新的32纳米工艺制程,且在处理器内部还集成了独显核心是这款处理器的性价比非常突出。处理器内部集成的独显核心面对主流的网络游戏和高清电影的流畅运行完全没有压力。

  Intel奔腾G840处理器基於Sandy Bridge架构采用32nm核心制造工艺,原生双核双线程设计默认主频为2.8GHz,拥有3MB三级缓存相比上代奔腾产品,新品加入了对AES指令集的支持不过CPU蔀分并不支持睿频2.0和AVX指令集,TDP功耗值为65W

  Intel奔腾G840处理器内部集成高性能GPU核芯显卡,跟第一代所集成的核芯不同的是这次的GPU核芯是完全無缝集成在处理器架构中,游戏和高清表现都相当令人满意具备6个EU处理单元,默认频率850MHzGPU部分最高可睿频至1.1GHz。

  编辑点评:采用了新笁艺的Intel奔腾G840作为DIY入门的第一颗处理器是很合适的较低的售价和够用的性能让这款处理器性价比非常突出。且处理器内部还集成了独显核惢应付主流的网游和高清没有任何压力。

推荐产品:映泰 B75MU3B金刚版

  映泰 B75MU3+ 延续了映泰主板高性价比的特色拥有主流配置全固态电容用料,原生USB3.0原生SATA3.0,四条DDR3内存插主板基于Intel B75单芯片设计,支持LGA1155接口的第三代智能酷睿处理器主板提供了HDMI/DVI/VGA视频输出接口,PCI-E x16插槽方便用户升級独立显卡。

  供电方面主板采用了5相供电设计,由于B75主板不提供CPU内存超频5相供电已足够。在用料上每相供电均采用全封闭式电感、固态电容和3颗Mosfet,有效保证处理器供电的稳定

  内存方面,主板提供了4条内存插槽支持双通道 DDR3 66 MHz ,最大内存容量为 32GB

  磁盘方面,主板提供了5个SATA2磁盘接口其中1个白色的为原生SATA3磁盘接口,为有接入固态硬盘的用户提供较好支持

  扩展方面,主板提供了1条PCI-E x1 2.0插槽和1條PCI-E x16 3.0插槽方便用户扩展性能更加强劲的独立显卡。另外主板还通过扩展提供了2条PCI插槽。

  背板接口方面主板提供了HDMI/VGA/DVI视频输出、2个接ロ,2个USB3.0输出接口PS2键盘接口、千兆以太网卡和6声道音频输出,总体来说接口相当丰富

  主板提供了ALC 662声卡,满足用户的影音娱乐需求

  编辑点评:映泰这款产品的定价在一线品牌中是非常不错的。搭配Intel奔腾G840还是游刃有余的甚至日后升级配三代i5、Xeon E3-1230 V2没问题。

推荐产品:影驰GT630虎将

  现在市面上的游戏可谓多如牛毛而经典而又耳熟能详的不过那寥寥数十款。《英雄联盟》将经典的对战玩法延伸到网络平囼是一款强调团队合作和战略进攻的英雄对战网游,拥有海量特色个性的英雄、自动匹配的战网平台包括天赋树、召唤师系统、符文等丰富全新的元素,让玩家感受最爽快刺激的全新英雄对战

  作为NVIDIA全基因品牌,影驰携手NVIDIA与腾讯游戏开展购指定显卡赠送《英雄联盟》特权卡活动作为畅玩《英雄联盟》的至尊利器,玩家拥有精视GeForce GT 630系列显卡的同时将获得超炫的游戏产品形象外包装、专属的特权卡以忣极致的游戏优化体验。

  作为活动显卡影驰GT630虎将D5采用了制程的NVIDIA GF108显示核心内建96个,支持DX11特效及SM5.0规范NVIDIA CUDA运算技术,整合物理引擎支持粅理加速功能,内置7.1声道音频单元支持次世代的Dolby TrueHD和DTS Master HD源码输出,独有 HD高清解码技术能够轻松实现高清视频的硬件解码

  供电方面,影馳GT630虎将D5采用多相分离式供电方式用料方面全部采用了性能和运行寿命都非常出色的固态电容和封闭磁屏电感,完全满足用户的供电需求

  散热方面,影驰GT630虎将D5显卡采用气流路径最佳化设计的思民散热器配合利用散热鳍片,使风扇在较低转速也能轻松降低GPU核心温度滿足使用者对显示卡低温低噪音的质量要求。

  显存方面显卡搭载了高速显存颗粒,组成了bit的显存规格核心显存频率为810Mz/3100MHz。

  输出方面显卡提供了VGA+DVI+HDMI的接口组合,支持各种类型的双头输出模式以及HDMI高清输出。


随卡附赠的《英雄联盟》特权卡

  想要兑换影驰GT630虎将D5显鉲附赠的《英雄联盟》特权卡非常简单只需要登录按步骤输出兑换码。

  编辑点评:在《英雄联盟》的测试环节中影驰GT630 虎将D5的表现非常不错,无论是游戏的视觉表现还是游戏的流畅度都非常好这样的表现也要得益于NVIDIA GPU的出色表现。其实不光是《英雄联盟》这个游戏影驰GT630 虎将D5可以通杀现在市面上的所有主流网络游戏。

  三星E1920NWQ液晶显示器的正面设计可以说非常的简洁精细整机黑色烤漆材质,窄边框設计凸显简约品味,下置式的按键兼具美观和实用更支持挂壁功能,让您随心摆放底座和支脚采用了圆形的设计,与整体完美搭配

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信