三维计算机图形
三维计算机图形(3D Computer Graphics)是计算机和特殊三维软件帮助下创造的作品。一般来讲,该术语可指代创造这些图形的过程,或者三维计算机图形技术的研究领域,及其相关技术。
三维计算机图形和二维计算机图形的不同之处在于计算机内存储存了几何数据的三维表示,用于计算和绘制最终的二维图像。
一般来讲,为三维计算机图形准备几何数据的三维建模的艺术和雕塑及照相类似,而二维计算机图形的艺术和绘画相似。但是,三维计算机图形依赖于很多二维计算机图形的相同算法。
计算机图形软件中,该区别有时很模糊:有些二维应用程序使用三维技术来达到特定效果,譬如灯光,而有些主要用于三维的应用程序采用二维的视觉技术。二维图形可以看作三维图形的子集。
技术
OpenGL和Direct三维是两个用于产生实时图象的流行的API。(实时表示图象的产生在“真实的时间”中,或者说“随时”)。很多现代显卡提供了基于这些API的一定程度的硬件加速,经常使得复杂的三维图象实时产生。但是,真正产生三维景象并不一定要使用其中的任何一个。
三维计算机图形的创建
创建三维计算机图形的过程可以顺序分为三个基本阶段:
- 建模
- 场景布局和动画
- 绘制
建模
建模阶段可以描述为“确定后面场景所要使用的对象的形状”的过程。有很多建模技术,他们包括(但不仅仅是):
- 构造实体几何
- NURBS建模
- 多边形建模
- 细分曲面
- 隐函数曲面
建模过程可能也包括编辑物体表面或材料性质(例如,颜色,荧光度,漫射和镜面反射分量—经常被叫做粗糙度和光洁度,反射特性,透明度或不透明度,或者折射指数),增加纹理,凹凸映射和其它特征。
建模可能也包括各种和准备动画的三维模型相关的各种活动,有时在复杂的任务建模中,这将自己成为一个阶段,称为索具(rigging)。对象可能用一个''骨架''撑起来,一个物体的中央框架,它可以影响一个对象的形状或运动。这个对动画构造过程很有帮助,骨架可以自动决定模型相关部分。参看正运动动画和逆运动动画。在索具阶段,模型也可以给定特定的控制,使得运动的控制更为简便和直观,例如用于声音嘴唇同步的面部表情控制和嘴形(音素)。 建模可以用以此为目的设计的程序(例如Lightwave建模软件,Rhinoceros 三维,Moray),应用的模块(Shaper,三维 Studio Max的Lofter)或者某些场景描述语言(例如POV-Ray)。在有些情况,这些阶段之间没有严格的区别,在这些情况下,建模只是场景创建过程的一部分(例如Caligari trueSpace就属于这种情况)。
三角剖分和网格
把物体的表示(例如球面的中点坐标和它的表面上的一个点所表示的球面),转换到一个(球面的)多边形表示的过程,称为剖分(tesselation)。该步骤用于基于多边形的绘制,其中对象从象球面,圆锥面等等这样的抽象的表示(“体素”),分解成为所谓“网格”,它是互相连接的三角形的网络。
三角网格(而不是正方形等形状)比较流行,因为它们易于采用扫描线绘制进行绘制。
多边形表示不是所有绘制技术都必须的,而在这些情况下,从抽象表示到绘制出的场景的转换不包括剖分步骤。
场景布局设置
在渲染成图象之前,模型必须放置在一个场景中。这定义了模型的位置和大小。
场景设置涉及安排一个场景内的虚拟物体,灯光,摄像机和其他实体,它将被用于制作一幅静态画面或一段动画。
照明是场景布置中一个重要的方面。就象在实际场景布置的时候一样,光照是最终作品的审美和视觉质量的关键因素之一。因而,它是一项很难掌握的艺术。光照因素可以对一个场景的氛围和情绪反映作出重大贡献,这是为摄影师和舞台照明师所熟悉的事实。
设置动画
主条目:计算机动画
动画是指对模型随时间的变化描述。常见的方法有设置关键帧,动作捕捉、骨骼动画和逆运动学(ik)等 这些技术经常结合使用。
渲染
渲染是从准备的场景创建实际的二维景象或动画的最后阶段。这可以和现实世界中在布景完成后的照相或摄制场景的过程相比。
用于诸如游戏或模拟程序这样的交互式媒体的渲染需要实时计算和显示,速度约为20到120帧每秒。非交互式媒体(譬如录象或电影),渲染的慢得多。非实时渲染使得有限的计算能力得以放大以获得高质量的画面。复杂场景的单帧的渲染速度可能从几秒到一个小时或者更多。渲染完成的帧存贮在硬盘,然后可能转录到其它媒介,例如电影胶卷或者光盘。然后这些帧以高帧率播放,通常为24,25,或30帧每秒,以达成运动的假象。
最后的作品经常会需要达到真实感图形质量,要达到这个目的,很多不同和专门的渲染技术被发展出来。这些技术的范围包括相当非真实感的线框模型渲染技术,到基于多边形的渲染,到更高级的技术,例如:扫描线渲染、光线跟踪或者辐射着色。
渲染软件可以模拟例如镜头光晕、景深或者运动模糊这样的视觉效果。这些技术试图模拟镜头和人眼的光学特性所造成的视觉现象。这些技术可以增加场景的真实程度,虽然该效果可能只是镜头的人造模拟现象。
为模拟其他自然发生的效应的各种技术被发展出来,例如光和不同形式的物质的相互作用。这些技术的例子包括粒子系统(它可以模拟雨,烟,或者火),体采样(用于模拟雾,尘或者其它空间大气效果),焦散效果(用于模拟光被不均匀折射性质的表面所聚焦的现象,例如游泳池底部的光的涟漪),还有次表面散射(subsurface scattering)(用于模拟光在人的皮肤这样的实体对象内部反射的现象)。
渲染过程计算上很昂贵,特别是所模拟的物理过程复杂且多样时。计算机的处理能力逐年上升,使得真实感渲染的质量渐进的提高。生产计算机动画的电影工作室可能用渲染农场(render farm)来进行及时的渲染。但是,硬件费用的下降使得在家庭计算机系统上产生少量的三维动画完全成为可能。
渲染器经常包含在三维软件包中,但是有一些渲染系统作为流行三维应用程序的插件使用。这些渲染系统包括Final-Render,Brazil r/s,V-Ray,Mental Ray,POV-Ray,和Pixar Renderman。
这些渲染程序的输出经常用于最终电影场景的一小部分。很多材料的层次可以分别渲染,然后采用合成软件集成到最终的画面中。
反射和明暗模型
现代三维计算机图形严重的依赖于一个简化的反射模型称为Phong反射模型,它和Phong明暗图是完全不同的主题,不能混淆二者。
在光的折射中,有一个重要的概念称为折射率。在多数三维编程实现中,该值“index of refraction”(折射率)通常简写为“IOR”。
三维计算机图形中流行的反射绘制技术包括:
- 平直着色(Flat shading):使用多边形的法矢量和位置以及光源的位置和强度对于物体的每一个多边形给出一个明暗值的技术。
- Gouraud着色:H。Gouraud于1971年发明,一个快速的基于顶点和光源的关系的着色技术,用于模拟光滑着色的曲面。
- 纹理映射:通过把图像(纹理)映射到多边形上来模拟曲面的大量细节的技术。
- Phong着色:由Bui Tuong Phong发明,用于模拟光滑着色曲面的镜面反射高光效果。
- 凸凹纹理映射:由Jim Blinn发明,用法向扰动技术模拟带褶皱的曲面。
- Cel着色:用于模拟手绘动画的观感的一种技术。
三维图形应用程序接口(API)
三维图形已经非常流行,特别是在电子游戏中,这使得专门化的应用程序接口(API)被创建出来用于简化计算机图形产生的各个阶段的处理。这些API对于计算机图形硬件厂商也是极为重要的,因为他们提供给程序员一种使用硬件的抽象方式,而依然能够利用那个显卡的特定硬件的长处。
这些三维计算机图形的API颇为流行:
- OpenGL和OpenGL着色语言
- OpenGL ES嵌入式设备的三维API
- Direct三维(DirectX的子集)
- RenderMan
- RenderWare
- Feekood
也有一些高层的三维场景图API,他们提供在底层绘制API之上的附加功能。处于活跃的发展中的这类程序库包括:
- QSDK
- Quesa
- Java 三维
- JSR 184(M3G)
- NVidia Scene Graph
- OpenSceneGraph
- OpenSG
- Wooyoo
- OGRE
- Irrlicht