关于作者

 一个毕业于北京大学数学力学系,在中国科学院计算所、计算中心和网络中心工作过,在澳大利亚科工组织DMS、香港浸会学院数学系和中国21世纪议程管理中心等处工作过,多次获国家和中科院科技奖并享受政府特殊津贴的退休老头。现在在【中国科普博览】网“科学新语林”栏目里开设一个《数学与计算机》的个人专栏,愿和爱好数学与计算机的各界网友和青少年朋友,谈谈对数学与计算机的看法、想法。

计算机图形学(上)

张建中
2015年03月18日

1.??? 计算机图形学概述

计算机图形学(Computer Graphics,CG),也常简称为图形学或计算机图形,是研究图形输入和输出、图形模型构造和表示、图形数据库管理、图形数据通信、图形操作、图形数据分析,以及如何以图形信息为媒介实现人机交互作用的方法、技术和应用的一门学科,是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。计算机图形学主要研究如何在计算机上表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。它包括图形硬件、图形算法、图形软件和图形应用等多方面的内容。
图形通常由点、线、面、体等几何属性和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的图形,如工程图、等高线图、曲面线框图等;另一类是明暗图,也就是通常所说的真实感图形。计算机图形学主要目的是利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。
目前,计算机图形学的应用已深入到真实感图形、科学计算可视化、虚拟环境、多媒体技术、计算机动画、计算机辅助工程制图等多个领域。计算机图形学发展迅速,现仍处在快速向前发展的趋势中,并且已经成为一门独立的学科,傲立在计算机科学的前端,有着广泛的发展前景。

2.?? 计算机图形学的研究内容

计算机图形学,是一种研究基于物理定律、经验方法以及认知原理,使用各种数学算法处理二维或三维图形数据,生成可视数据表现的科学。它是计算机科学的一个分支领域与应用方向,主要关注数字合成与操作视觉的图形内容。
计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实、图形软件等。
计算机图形学是研究计算机表示、生成、处理和显示图形的原理、算法、方法和技术的一门学科。它的研究分为两个方向,一方面是研究几何作图,如平面线条作图和三维立体建模等;另一方向是研究图形表面渲染效果,主要包括表面色调、光照、阴影和纹理等表面属性的研究。

3.? 二维计算机图形学

二维计算机图形(2D Computer Graphics),也简称为二维 CG,是基于计算机的数字图像的产生------主要是从二维模型产生(例如二维几何模型,文本,和数字图像),并且使用只适用这些模型的技术,采用该技术的计算机科学的分支称为二维计算机图形学。
二维计算机图形主要用于本来采用传统印刷和绘制技术的那些应用场合,如字体、地图、工程制图、广告等。在这些应用中,二维图像不仅仅是现实世界物体的一个表示,它本身是有附加含义的独立个体;因而二维模型在这些应用中更为实用,因为它们给出了比三维计算机图形更为直接的控制。
在诸如桌面发布、工程、商务很多应用领域里,基于二维计算机图形的文档的表述比相应的数字图像可能会小得多,经常只有1/1000 或者更小。这种表示法也更灵活,因为它可以在不同的图像分辨率进行绘制以适应不同的输出设备。因而,文档和插图经常采用二维图形文件存储和传输。
二维计算机图形学含如下几方面的内容:
二维图形技术?? 二维图形模型可以是如下这些的组合:几何模型(也称为矢量图形),数字图像(也称为光栅图形),需要排版的文本(由内容、字体和大小、颜色和方向定义),数学函数和方程,等等。这些组件可以通过象平移、旋转、缩放这样的二维几何变换来修改和操作。
直接绘制??? 创建一个复杂图像的一个简易办法是从一块空白画布开始背景色的光栅图,然后通过正确的次序“画”,“漆”或者“贴”上简单的色块。特别,画布可以是计算机显示器的帧缓存。
有些程序会直接设置像素色彩值,但多数会依赖一些二维图形库以及(或者)机器的图形卡,它们通常会实现下列操作:将一个给定的数字图像以一个给定的偏移贴到画布上;在给定的位置和角度将一个字符串以给定的字体写成帧缓存;绘制一个简单的几何形体,例如用三个定点定义三角形,或者给定圆心和半径的圆;绘制一条线段、圆弧、或者用给定粗细的虚拟笔绘制简单曲线。
扩充色彩模型 ???文本、形状和线条使用用户指定的色彩绘制。很多库和卡提供色彩梯度,它对于产生平滑变化的背景、阴影效果等等都很实用。用给定色彩绘制一个像素通常会取代其原先的色彩。但是,很多系统支持用透明和透过色彩绘制,它只会修改原先的像素值。
两个色彩也可以用更花哨的方法组合,被称为反色或者色彩翻转,并经常在图形用户界面中采用,用于高亮显示、钉钉板以及其它临时绘制——因为再次以同样的色彩绘制相同的图形会恢复原始的像素值。
分层模型??? 在分层模型中,目标图像通过“绘制”或者“粘贴”每个层次到虚拟画布上产生,次序是按深度递减。概念上,每一层首先独自绘制,产生所需分辨率的数字图像,然后在画布上一个像素一个像素地描绘。当然,层次全透明的部分无须绘制。绘制和描绘可以并行进行,也就是说,每个层次的像素在绘制进程中一产生就可以描绘到画布上。
包含复杂几何体的层次(如文本或者多边形)可以分解为更简单的元素(分别是字符或者线段),然后作为分离的层次以某种次序绘制。但是,这个办法可能在两个元素重叠在同一个像素时产生不良的走样这样的人工因素。
二维图形硬件??? 现代计算机图形卡几乎全部采用光栅技术显示,把整个屏幕分成像素的矩形点阵,这是因为基于光栅的图形硬件和矢量图形硬件相比要低价。多数图形硬件对于位图传送操作和精灵绘制有内部支持。专门用于位图传送的协处理器称为传送器芯片。
二维图形软件??? 很多图形用户界面(GUI),包括微软视窗,或者X视窗系统,主要基于二维图形概念。这些软件提供了和计算机交互的视觉环境,并且常常包括某种形式的视窗管理器来帮助用户从概念上区分不同的应用程序。单个软件应用程序的典型用户界面也是本质上二维的,部分因为最普通的输入设备(例如鼠标)被限制于做二维的运动。
二维图形在打印机、绘图仪、线切割机等等外围设备的控制中都很重要。它们也用于早期的视频游戏和计算机游戏中,并依然在棋牌类游戏中使用,例如接龙、象棋、麻将等等。
二维图形器或者说绘图程序是应用程序级的软件,用于图像、流程图、插图等的创建,它采用二维图形体素的直接操纵实现(通过鼠标,绘图版,或者类似的设备)。这些软件一般提供二维几何体素以及数字图像,有些甚至支持过程化模型。插图通常内部表示为分层模型,经常会有一个等级结构以方便这些软件通常输出图形文件,其中层和体素分别以其原始形式保存。
图像器是专用于数字图像的操作的,主要通过自由手绘和信号处理操作。他们主要采用直接绘制的范型,其中用户控制虚拟笔、刷、以及其他自由手动艺术设备来将色彩绘于虚拟画布上。有些图像器支持多层模型;但是,为了支持图像模糊这样的信号处理操作,每个层通常表示为一个数字图像。所以,任何软件提供的几何体素直接被转换成像素并描到画布上。这类软件也包括很多专门化的图像器——如用于医药、遥感、数字摄影等。

4.?? 三维计算机图形

[caption id="attachment_1261" align="aligncenter" width="250"]简单三维图形绘制 简单三维图形绘制[/caption]
三维计算机图形(3D Computer Graphics)是计算机和特殊三维软件帮助下创造的作品,也可指创造这些图形的过程,或者三维计算机图形技术的研究领域及其相关技术。
三维计算机图形和二维计算机图形的不同之处在于计算机内存储了几何数据的三维表示,用于计算和绘制最终的三维图像。一般来讲,为三维计算机图形准备的几何数据与三维建模的艺术和雕塑及照相类似,而二维计算机图形的艺术和绘画相似。但是,三维计算机图形依赖于很多二维计算机图形的相同算法。
计算机图形软件中,该区别有时很模糊;有些二维应用程序使用三维技术来达到特定效果,譬如灯光,而有些主要用于三维的应用程序采用二维的视觉技术。二维图形可以看作三维图形的子集。
创建三维计算机图形的过程可以顺序分为三个基本阶段:建模,场景布局和绘制。
建模:建模阶段可以描述为“确定后面场景所要使用对象的形状”的过程。有很多建模技术,包括:构造实体几何,NURBS建模,多边形建模,细分曲面,隐函数曲面等建模过程,可能也包括物体表面或材料性质(如颜色,荧光度,漫射和镜面反射分量——经常被叫做粗糙度和光洁度,反射特性,透明度或不透明度,或者折射指数),增加纹理,凹凸映射和其它特征。
建模可能也包括各种准备动画的三维模型相关的各种活动。对象可能用一个骨架撑起来,一个物体的中央框架,它可以影响一个对象的形状或运动。这个对动画构造过程很有帮助,骨架的运动自动决定模型相关部分。在模具阶段,模型也可以给定特定的控制,使得运动的控制更为简便和直观,例如用于声音嘴唇同步的面部表情控制嘴形(音素)。
建模可以用以此为目的设计的程序,应用的模块或者某些场景描述语言。在有些情况中,这些阶段之间没有严格的区别;在这些情况下,建模只是场景创建过程的一部分。
场景布局设置
场景设置涉及安排一个场景内的虚拟物体,灯光,摄像机和其他实体,它将被用于制作一幅静态画面或一段动画。如果用于动画,该阶段通常采用叫做“关键帧”的技术,它使得场景内复杂的运动的创建变得简单。使用关键帧的帮助,而不是必须对于动画中的每一帧设定对象的位置、方向或比例,只需设立一些关键的帧,它们之间的状态可以用插值得到。
照明是场景布置中一个重要的方面。就像在实际场景布置的时候一样,光照是最终作品的审美和视觉质量的关键因素之一,因而,也是一项很难掌握的艺术。光照因素可以对一个场景的氛围和情绪反映作出重大贡献,这是为摄影师和舞台照明师所熟悉的事实。
三角剖分和网格?? 把物体的表示转换到一个多边形表示的过程,称为剖分。该步骤用于基于多边形的绘制,其中对象从象球面、圆锥面等等这样的抽象的表示(“体素”),分解成为所谓“网格”,它是互相连接的三角形的网络,比较流行,因为它们易于采用扫描线绘制进行绘制。
多边形表示不是所有绘制技术都必须的,而在这些情况下,从抽象表示到绘制出的场景的转换不包括剖分步骤。
绘制
绘制是从准备的场景创建实际的二维景象或动画的最后阶段。这可以和现实世界中在布景完成后的照相或摄制场景的过程相比。
用于诸如游戏或模拟程序这样的交互式媒体的绘制需要实时计算和显示,速度约为20到120帧每秒。非交互式媒体(如录像或电影),绘制的慢得多。非实时绘制使得有限的计算能力得以放大以获得高质量的画面。复杂场景的单帧的绘制速度可能从几秒到一个小时或者更多。绘制完成的帧存贮在硬盘,然后可能转录到其它媒介,例如电影胶卷或者光盘。然后这些帧以高帧率播放,通常为24,25,或30帧每秒,以达成运动的假象。
最后的作品经常会需要达到真实感图形质量,要达到这个目的,很多不同和专门的绘制技术被发展出来。这些技术的范围包括相当非真实感的线框模型绘制技术,到基于多边形的绘制,到更高级的技术,例如:扫描线渲染、光线跟踪或者辐射着色。
绘制软件可以模拟例如镜头光晕、景深或者运动模糊这样的视觉效果。这些技术试图模拟镜头和人眼的光学特性所造成的视觉现象。这些技术可以增加场景的真实程度,虽然该效果可能只是镜头的人造模拟现象。
为模拟其他自然发生的效应的各种技术被发展出来,例如光和不同形式的物质的相互作用。这些技术的例子包括粒子系统(它可以模拟雨,烟,或者火),气体采样(用于模拟雾,尘或者其它空间大气效果),焦散效果(用于模拟光被不均匀折射性质的表面所聚焦的现象,例如游泳池底部的光的涟漪), 还有次表面散射等。
绘制过程计算上很昂贵,特别是所模拟的物理过程复杂且多样时。计算机的处理能力逐年上升,使得真实感绘制的质量得到提高。生产计算机动画的电影工作室可能用渲染农场来进行及时的绘制。但是,硬件费用的下降使得在家庭计算机系统上产生少量的三维动画完全成为可能。
绘制器经常包含在三维软件包中,但是有一些绘制系统作为流行三维应用程序的插件使用。这些绘制程序的输出经常用于最终电影场景的一小部分。很多材料的层次可以分别绘制,然后采用合成软件集成到最终的画面中。
三维计算机图形中流行的反射绘制技术包括: 平直着色使用多边形的法矢量和位置以及光源的位置和强度对于物体的每一个多边形给出一个明暗值的技术。Gouraud着色,一个快速的基于顶点和光源的关系的着色技术,用于模拟光滑着色的曲面。纹理映射:通过把图像(纹理)映射到多边形上来模拟曲面的大量细节的技术。Phong着色,用于模拟光滑着色曲面的镜面反射高光效果,凸凹纹理映射,用法向扰动技术模拟带褶皱的曲面。Cel着色,用于模拟手绘动画的观感的一种技术。
[caption id="attachment_1262" align="aligncenter" width="250"]平直着色一例:三维绘成的敦刻尔克级战列舰 平直着色一例:三维绘成的敦刻尔克级战列舰[/caption]