一切都始于计算机和计算机屏幕【3D渲染的秘密】
一切都从计算机(和计算机屏幕)开始

计算机图形世界的旅程从计算机开始...... 通过陈述对你来说显而易见的事情开始本课可能听起来很奇怪,但事实上我们确实认为这是理所当然的,并且从未想过用计算机制作图像时它的真正含义。我们应该关注的不仅仅是计算机,而是我们如何使用计算机显示图像:计算机屏幕。计算机和计算机屏幕都有一些重要的共同点。它们与离散结构相反,与我们周围的世界相反,它由连续的结构组成(至少在宏观层面)。这些离散的结构是位于计算机和像素对于屏幕。我们举一个简单的例子。在现实世界中占据一席之地。它是不可分割的。但是这个线程在计算机屏幕表面上的表示需要将其“切割”或“分解”成称为像素的小块。这个想法如图1所示。

图1:在现实世界中,一切都是“连续的”。但在计算机领域,图像由离散块(像素)组成。

图2:在计算机表面上表示对象的过程可以看作是在对象的表面上布置了网格。与该对象重叠的该网格的每个像素都填充有底层对象的颜色。但是当物体仅部分重叠像素表面时会发生什么?我们应该用哪种颜色填充像素?
在计算实际转换任何连续对象的过程(数学中的连续函数,线程的数字图像)被称为离散化。明显?是的,但是,如果不是计算机图形学中的所有问题,大多数问题都来自计算机基于的技术的本质:0,1和像素。
你可能仍然认为“谁在乎?”。对于在电脑上观看视频的人来说,这可能并不是非常重要。但是如果你必须创建这个视频,这可能是你应该关心的事情。想想这个。让我们想象一下,我们需要在计算机屏幕的表面上表示一个球体。让我们看一个球体并应用它顶部的网格。网格表示屏幕的像素(图2)。球体完全重叠了一些像素。一些像素也是空的。但是,有些像素存在问题。球体仅部分重叠。在这种特殊情况下,我们应该用以下内容填充像素:背景的颜色或对象的颜色?
直观地,您可能会认为“如果背景占据像素区域的35%,而对象占75%,则让我们为像素分配一种颜色,该颜色由背景颜色组成,为35%,对象颜色为75%”。这是一个很好的推理,但事实上,你刚刚解决了这个问题。无论如何,你如何计算这些区域?该问题的一种可能的解决方案是将像素细分为子像素并计算背景重叠的子像素的数量,并假设所有子像素与对象重叠。可以通过将由背景重叠的子像素的数量乘以子像素的总数来计算背景所覆盖的区域。

图4:为了近似与形状和背景重叠的像素的颜色,可以将表面细分为更小的单元。通过计算与形状重叠的单元格数乘以形状的颜色加上与背景重叠的单元格数乘以背景颜色除以整个单元格数,可以找到像素颜色。然而,无论细胞有多小,它们中的一些将始终与形状和背景重叠。
然而,无论子像素有多小,总会有一些子像素与背景和物体重叠。虽然你可以通过这种方式获得对象和背景覆盖的非常好的近似值(子像素越小,近似值越好),它总是只是近似值。电脑只能近似。可以使用不同的技术来计算这种近似(将像素细分为子像素只是其中之一),但是我们需要从这个例子中记住,我们将不得不在计算机科学中解决许多问题。计算机图形学来自于必须“模拟”由具有分立结构的连续结构构成的世界。事实上,不得不从一个人到另一个人提出各种复杂问题(或者他们的理解很简单,但解决方案却很复杂)。
解决这个问题的另一种方法,显然也是为了提高图像的分辨率。换句话说,使用更多像素来表示羞耻形状(球体)。然而,即便如此,我们是否受到屏幕分辨率的限制。
使用二维像素阵列来表示或显示图像的图像和屏幕分别称为光栅图形和光栅显示。术语栅格通常在显示空间上定义x和y坐标的网格。我们将在透视投影一章中了解有关光栅化的更多信息。
如所建议的,用计算机表示对象图像的主要问题是对象形状需要被“分解”成离散的表面,即像素。计算机通常只能处理离散数据,但更重要的是,可以在计算机的存储器中定义数字的定义受限于用于编码这些数字的位数。例如,您可以在屏幕上显示的颜色数受限于用于编码RGB值的位数。在计算机的早期阶段,使用单个位来编码屏幕上像素的“亮度”。当该位的值为0时,像素为黑色,当为1时,像素为白色。第一代计算机使用彩色显示器,使用单字节或8位编码颜色。使用8位(红色通道为3位,绿色通道为3位,蓝色通道为2位),您只能定义256种不同的颜色(2 ^ 3 * 2 ^ 3 * 2 ^ 2)。当您想要显示不是您可以使用的颜色之一的颜色时会发生什么?解决方案是从调色板中找到最接近的匹配颜色到您理想要显示的颜色,然后显示此匹配颜色。该过程称为颜色量化。并显示此匹配颜色。该过程称为颜色量化。并显示此匹配颜色。该过程称为颜色量化。

图5:我们的眼睛可以感知到非常小的颜色变化。当使用太少的位来编码颜色时,会出现条带(右)。
颜色量化的问题在于,当我们没有足够的颜色来准确地采样连续渐变的色调时,连续的渐变表现为一系列离散的步骤或颜色带。这种效应称为条带(在术语“分色”或“假轮廓”下也称为条带)。
这些天显然没有必要关心绑带(最常见的图像格式使用32位来编码颜色。使用32位可以显示大约1600万种不同的颜色),但请记住,从根本上说,颜色和几乎任何颜色我们可能需要在计算机的存储器中表示的其他连续函数必须被分解为一系列离散或单个量子值,其精度受用于编码这些值的位数限制。

图6:数字图像无法准确捕获小于像素的物体形状。
最后,必须将连续函数分解为离散值可能会导致信号处理和计算机图形中的混淆。数字图像的主要问题是您可以捕获的细节数量取决于图像分辨率。这个问题的主要问题是图像无法准确捕获小细节(粗略地说,小于像素的细节)。想象一下,例如,你想用一个茶壶的数码相机拍摄照片,尽管物体比图像中的像素小(图6)。像素是离散结构,因此我们只能用恒定颜色填充它。如果在这个例子中,我们用茶壶的颜色填充它(假设茶壶有一个恒定的颜色,如果它是阴影可能不是这种情况),你的茶壶只会在图像中显示为一个点:你没能捕获茶壶的颜色形状(和阴影)。实际上,混叠比这复杂得多,但你应该知道这个术语并且现在知道,并且应该记住,由于数字图像的本质(因为像素是离散元素),给定分辨率的图像只能准确地表示给定大小的对象。我们将在有关别名的课程中解释对象大小和图像分辨率之间的关系(您可以在中找到)计算机图形学的数学和物理部分)

图像只是像素的集合。如前所述,当现实世界的图像存储在数字图像中时,形状被分解为离散结构,即像素。光栅图像(和光栅屏幕)的主要缺点是我们可以存储或显示的图像的分辨率受图像或屏幕分辨率(其像素尺寸)的限制。放大,不会在图像中显示更多细节。矢量图形旨在解决这个问题。使用矢量图形时,不使用数学表达式存储像素,而是表示对象(及其颜色)的形状。这样,文件中定义的形状可以在所需的分辨率下即时渲染,而不是受图像分辨率的限制,从而产生对象形状的图像,该图像总是非常清晰。
我们想要在这个介绍中强调的是,再次并总结一下,计算机使用量子值实际上,我们想要用计算机模拟的现实世界的过程通常(如果不是总是)连续的(至少在宏观甚至微观尺度上)。事实上,这是一个非常基本的问题,它引发了各种非常令人费解的问题,其中有大量的计算机图形研究和理论致力于这些问题。
另一个计算机图形领域是流体模拟,其中世界的离散表示是一个特殊问题。流体本质上的流动是一个连续的过程,但是为了用计算机模拟流体的运动,我们需要将空间划分为“离散”结构,通常称为细胞的小立方体。