计算机图形学应用计算机技术制作和操控视觉表现——本章聚焦 3D 图形学:先建造虚拟世界的数字编码版本(建模),再模拟摄影过程把它“拍成”二维图像(渲染),最后让画面动起来(动画)。背景中的线框正在实时完成一次“三维 → 二维”的投影。
每节末尾附「本节小结」与 2 道课堂选择题(A / B / C / D),共 12 题,参考答案见页尾。一条主线:建模给世界,渲染给像素,动画给时间。
| 小节 | 核心问题 | 关键概念 |
|---|---|---|
| 10.1 计算机图形学的范围 | 2D、图像处理与 3D 有何分工? | 2D 图形学 · 图像处理 · 3D 图形学 |
| 10.2 3D 图形学概述 | 一张 3D 图像如何诞生? | 建模 → 渲染 → 显示 · 帧缓冲区 |
| 10.3 建模 | 虚拟物体和场景如何表示? | 平面片 · 多边形网络 · 贝塞尔 · 程序化模型 · 场景图 |
| 10.4 渲染 | 如何算出每个像素的颜色? | 镜面光/漫射光 · 折射 · 渲染流水线 · 着色 |
| 10.5 处理全局光照 | 如何模拟光的全局传播? | 光线跟踪 · 分布式光线跟踪 · 辐射度 · 渗色 |
| 10.6 动画 | 静态场景怎样动起来? | 帧 · 变形 · 故事板 · 关键帧 · 运动学/动力学 |
计算机图形学 computer graphics:应用计算机技术制作和操控视觉表现的分支——文本呈现、图表构建、图形化用户界面、照片处理、视频游戏、动画电影,都属于它。“计算机图形学”一词如今越来越多地专指 3D 图形学,本章也聚焦于此。
处理生成图像——把二维图形(圆、矩形、文字等)转化为像素模式来产生图像。
例:绘图软件画流程图;统计软件把数据绘成柱状图。
处理分析图像——分析图像中的像素来识别模式,以达到增强或“理解”图像的目的。
例:照片去瑕疵、去红眼;医学影像中识别病灶;把几张照片的部分剪切拼贴成并不反映现实的新图像。
把三维场景转换成二维图像:① 建造三维场景的数字编码版本——创建、编码、存储和处理场景,是创造性的艺术过程;② 模拟摄影过程制作这些场景的图像——是密集的计算过程。
2D 图形学“生成”图像,图像处理“分析”图像,3D 图形学把虚拟三维世界“拍成”二维图像——三者同属计算机图形学。数字图像可以生成、可以处理、也可以组合;计算让我们能创造性探索现实与虚拟现象。一句话:生成(2D)· 分析(图像处理)· 模拟拍摄(3D)。
创建并显示一幅 3D 图像的整个过程由三步构成:建模 modeling → 渲染 rendering → 显示 display。
用数字编码数据和算法设计、构建布景。在计算机图形学背景下产生的场景,可能在现实中永远都不存在——这是创造性活动。
通过计算场景中的物体如何出现在由特定位置的摄像机拍摄的照片中,制作场景的二维图像。
每个像素的外观确定后,结果被表示成图像的位图,集中存储在帧缓冲区 frame buffer中,再送屏幕显示或存入持久存储器。
存储最终图像的存储区域——可能是主存储器中的一块区域;在配备专用图形硬件的系统中,也可能是一块专用存储电路。其中图像要么立即显示,要么传送到更持久的存储器以备以后显示。
建模是创造性的艺术过程(像布置摄影棚);渲染是密集的计算过程(像真正按下快门)。理解这一区分,就理解了 3D 图形学的分工。
三步流水线:建模(用数字编码搭虚拟世界)→ 渲染(模拟摄影算出每个像素)→ 显示(位图存入帧缓冲区再显示)。一句话:建模是艺术,渲染是计算,显示靠帧缓冲区。
3D 项目的开始方式与戏剧舞台制作十分相似:布景叫场景 scene,道具叫物体 object。3D 场景是虚拟的——组成它的物体由数字编码模型“构建”,并非物理结构。模型是现实的简化:模型越精确,图像质量越高,但渲染时间越长。
物体的形状 shape 被描述成小平面——平面片 planar patch 的集合;这些多边形构成多边形网络 polygonal mesh 逼近物体形状。平面片常选三角形:三个顶点是三维空间中确定一个平面所需的最少点数;整个网格可表示为其平面片顶点的集合。
规则形状可用分析方法描述:贝塞尔曲线 Bezier curve 只用几个控制点在三维空间中定义曲线段,移动控制点,曲线就被扭曲成不同形状;该思想扩展到三维即贝塞尔曲面 Bezier surface。例:字体轮廓、汽车车身曲面。
无法用优雅数学技术表示时:先构建物体的物理模型,再用能记录自身三维空间位置的笔触摸表面、逐点记录位置——这个过程叫数字化 digitizing;得到的点集用作顶点,构成描述形状的多边形网格。
形状太复杂、几何建模和手工数字化都难获得时,可编写自动构建所需形状的程序——程序化模型 procedural model(应用算法生成所需结构的程序单元),能高效生成多个相似又独特的复杂物体。另一种方法是粒子系统 particle system:把物体基础结构模拟为大粒子集合,按预定义规则移动粒子产生所需形状。例:火焰、烟雾、人群、草丛。
多边形网格只捕获形状;渲染系统可在渲染时丰富表面特征。纹理映射 texture mapping:将一个预定义的图像与物体的表面相关联。用于平坦表面效果最好;大幅扭曲纹理或包裹出接缝时不够逼真。已被证明高效,广泛用于实时敏感场合。
分形 fractal:通过把较低维度物体的副本“打包”而形成的几何体,通常用递归过程生成——每次激活重复打包更小的副本。结果处处自相似:放大任何部分,看到的仍像它自身。例:海岸线、树木、云朵、雪花。
物体经充分描述和数字编码后,被赋予场景内的位置、大小和朝向,这些信息链接成场景图 scene graph。它类似传统摄影的工作室布置——摄像机、灯光、道具、背景各就各位;不同的是,场景图里全是数字编码表示。简而言之:场景图描述的是一个虚拟世界。
场景图包含制作最终图像所需的一切信息。它的完成标志着艺术建模过程的结束,和渲染这一计算密集型过程的开始——是 3D 流水线的分水岭。
形状 = 平面片的集合 = 多边形网络(常用三角形,顶点集合即可表示);获得网格的三条路:数学描述(贝塞尔曲线/曲面)→ 手工数字化 → 程序化生成(算法/粒子系统)。纹理映射丰富表面,分形用递归自相似造复杂形体,场景图组织整个虚拟世界。一句话:网格是骨架,纹理是皮肤,场景图是整个舞台。
渲染 rendering:确定场景图中的物体投影到投影平面时将如何显示。物体的外观由从它发出的光决定——确定外观的任务,最终变成对光的行为的模拟。照射到表面的光可能被吸收、被反射、或穿过表面形成折射。
反射定律:光线以入射角 incidence angle 射到表面,反射角与入射角相同(相对于法线测量),入射光线、反射光线与法线共面。光滑表面上平行光仍以平行方向离开——形成镜面光 specular light,即表面明亮的高亮区;它与表面接触时间最短,颜色最接近原始光源。
真实表面很少绝对光滑:光线在表面微粒间跳弹,向不同方向散开——形成漫射光 diffuse light。它与表面接触更久,更受材料吸收特性影响,颜色更接近物体本身。发亮表面镜面光多于漫射光;灰暗表面漫射光多于镜面光。
某些表面有细微特性:入射方向不同,镜面光与漫射光的比例也不同——旋转时外观从明亮变为灰暗,称为各向异性表面 anisotropic surface(如拉丝金属、丝绸);明亮度保持不变的称为各向同性表面 isotropic surface,反射模式对称。
光照射透明物体时穿过而非反射,方向改变即折射 refraction,程度由材料折射率决定(密度高→折射率高)。进入折射率较高的材料:向靠近法线方向弯曲;反之远离法线。渲染软件还须知道:表面哪面朝内、光线正进入还是离开物体。例:水杯中的筷子“折”了。
| 渲染流水线步骤 | 做什么 | 要点 |
|---|---|---|
| ① 裁剪 clipping | 去掉每个物体在视体 view volume(投影中心向图像窗口各角延伸出的棱锥区域)外面的部分 | 看不到的就不算——平面片与视体边界逐一比较,只留下完全在视体内的多边形网络 |
| ② 扫描转换 scan conversion | 又称光栅化 rasterization:把保留平面片上的点与最终图像中的像素位置关联 | 从投影中心向每个像素位置引投影线,求它与平面片的交点;落在两个像素中间的细节在最终图像中不可见 |
| ③ 隐藏面消除 hidden-surface removal | 识别并去除场景中被遮挡的点 | 前面的物体挡住后面的——只留下摄像机“看得见”的表面 |
| ④ 着色 shading | 确定面片在该点朝向摄像机发出的光的外观 | 平面着色 flat shading 呈小平面状;Gouraud 着色插值颜色、Phong 着色插值朝向(更易捕捉面片内部高光);凹凸映射 bump mapping 添加表面质感 |
流水线已用超大规模集成电路(VLSI)技术微缩成芯片——图形卡 graphics card(图形适配器),作为专用控制器连到计算机总线上。应用软件只需交出场景图,硬件执行流水线并把结果放进帧缓冲区:渲染流水线被简化为一个抽象工具。
当期望图像中的模式与组成图像的像素密度不匹配时,就会出现图形走样 aliasing——斜边呈现锯齿状。渲染计算成本很高,必须采用各种技术丢弃不影响最终结果的模型细节。
光到表面三条路:吸收、反射、折射;反射分镜面光(亮斑、近光源色)与漫射光(柔和、近物体色)。渲染流水线四步:裁剪(留视体内的)→ 扫描转换/光栅化(对齐像素)→ 隐藏面消除(去遮挡)→ 着色(算颜色),由图形卡硬件完成。一句话:镜面光画“亮”,漫射光画“色”,折射画“透”,流水线四步一次走完。
传统渲染流水线是局部光照模型——算每个面片时不管别的物体。要模拟光的全局传播,有两套方案:光线跟踪与辐射度。(本节为选学内容)
光线跟踪 ray tracing:对要渲染的像素,确定它与投影中心所在的直线,沿此直线反向追踪光线进入场景,直至接触物体——若是光源则终止(像素取光源颜色);否则计算表面特征,找出产生该光线的入射光方向,递归地继续追踪。遇透明物体时分成两路:同时追踪反射光与折射光。
终止条件:光线碰上光源;不再与任何物体相交;达到递归次数上限;或表面吸收率已使入射光几乎无影响。
缺点一:光线跟踪仅跟踪镜面光——渲染出的物体往往都有光泽的外观。改进:分布式光线跟踪 distributed ray tracing——从反射点同时追踪多条方向略异的光线。
缺点二:非常费时——没有在“消费者级”实时系统中实现,只见于实时性要求不高的“专业水平”应用(如电影特效)。
辐射度 radiosity:考虑每对平面片之间辐射光能(本质上是漫射光)的总和——每个物体的外观都要算上从其他物体接收的光能。形状因子 form factor:一个物体辐射的光对另一个物体外观的影响程度。渗色 color bleeding:一个物体的颜色影响其周围其他物体的色调。优点:结果与视点无关,捕获光的许多细微特征。
缺点:计算量非常大,无法满足当前消费市场图形系统的实时要求;且无法捕获镜面光的细节——用它渲染的表面倾向于灰暗的外观。实践中与光线跟踪互补:一个管漫射的全局柔和,一个管镜面的高光反射。
光线跟踪沿光线反向递归追踪,擅长镜面反射与折射,但只追镜面光、非常费时(分布式光线跟踪可缓解);辐射度计算面片间的漫射光能交换,能表现渗色、与视点无关,但抓不住镜面高光、同样费时。一句话:光线跟踪抓“镜面”,辐射度抓“漫射”——两手都要硬,但都费时。
计算机成像 computer generated imagery(CGI):利用计算机技术制作和显示呈现运动的画面。动画通过快速连续地显示一系列称为帧 frame 的静止图像来实现。
帧 frame:动画序列中的单个静止图像,以固定时间间隔捕获变化场景的外观——顺序展示便产生观看连续场景的错觉。电影业标准:每秒 24 帧;广播视频标准:每秒 60 帧。帧可传统摄影制作,可计算机人工生成,也可两者结合。
变形 morphing:一个物体看起来逐渐变成另一个物体。取变形前最后一帧与变形后第一帧为关键帧,用控制点 control point 把前后帧的特征(点、线)关联,再用数学技术逐渐扭曲,生成填充两个关键帧之间的图像序列——变形幻象由此产生。
故事板 storyboard:以关键点场景草图讲述完整故事的二维图像序列——动画项目从这里开始。主动画师把故事板细化成关键帧 key frame(固定时间间隔的角色与场景外观);助理动画师绘制填充两个关键帧间隔的帧,使动画连续平滑——这个过程叫中间渐变 in-betweening。
3D 项目中故事板只是构建三维虚拟世界的蓝图。物体“移动”的真实含义:物体是场景图中的数据集合,其中存放指示位置与朝向的值——改变这些值就完成了“移动”,新值用于渲染,物体便在最终的二维图像中看起来动了。
运动学 kinematics:根据物体各部分间的相对运动方式来描述物体的运动。例:角色行走时小腿相对大腿、大腿相对躯干如何摆动——只描述“怎么动”,不问“为什么动”。
动力学 dynamics:应用物理定律确定力作用于物体的效果,以此描述运动。例:小球自由下落的加速、布料随风飘动、爆炸碎片飞散——由力推算运动。
动画师用软件操纵场景图中的三维虚拟物体,创建一系列虚拟场景,再逐一“拍摄”成动画。常见做法:只为关键帧制作场景,然后由软件应用动力学与运动学,把场景图中的物体从一个关键帧位置自动移到下一个关键帧位置,自动渲染出中间渐变帧——曾经靠助理动画师手绘的中间渐变,如今被软件接管了。
动画 = 帧的快速连放(电影 24 fps、广播视频 60 fps);变形 = 关键帧 + 控制点 + 数学插值;流程 = 故事板 → 关键帧 → 中间渐变。3D 中“移动”只是改场景图里的数值再渲染;运动学描述相对运动(怎么动),动力学由物理定律推运动(为何动)。一句话:人做关键帧,软件补中间——动画的错觉来自足够快的静止。
逐题一句话解析;错题请回到对应小节复习。速记:10.1→B B|10.2→C B|10.3→B D|10.4→C A|10.5→B C|10.6→B D
Q1B图像处理分析像素识别模式;“生成像素模式”是 2D 图形学。
Q2B3D 图形学 = 先建数字场景(艺术),再模拟拍照(计算)。
Q3C渲染 = 模拟摄影:算物体在特定机位照片中的样子。
Q4B帧缓冲区存的是像素外观已确定的位图。
Q5B三点定一面——三角形是最经济、永不翘曲的面片。
Q6D纹理映射 = 把预定义图像贴到物体表面上。
Q7C镜面光接触短、近光源色;漫射光接触久、近物体色。
Q8A先裁剪留视体内的,再对齐像素,去遮挡,最后着色。
Q9B光线跟踪只追镜面光且费时;分布式光线跟踪是补救。
Q10C渗色:一个物体的颜色“染”到周围物体上。
Q11B电影 24 帧/秒;广播视频是 60 帧/秒。
Q12D关键帧之间的过渡帧由“中间渐变”补出。
计算机图形学把虚拟世界的搭建(艺术)与光、像素的计算(计算)连成一条流水线。下一章预告:人工智能。
| 小节 | 一句话总结 |
|---|---|
| 10.1 范围 | 2D 生成图像、图像处理分析图像、3D 把虚拟世界拍成图像 |
| 10.2 概述 | 建模(艺术)→ 渲染(计算)→ 显示(帧缓冲区) |
| 10.3 建模 | 形状 = 平面片/多边形网络;贝塞尔、数字化、程序化模型;场景图组织一切 |
| 10.4 渲染 | 镜面光/漫射光/折射;流水线四步:裁剪 → 扫描转换 → 隐藏面消除 → 着色 |
| 10.5 全局光照 | 光线跟踪抓镜面(递归、费时);辐射度抓漫射(形状因子、渗色) |
| 10.6 动画 | 帧的快速连放;故事板 → 关键帧 → 中间渐变;运动学与动力学让运动自动化 |