当前位置:文档之家› 三维影像渲染基本概要

三维影像渲染基本概要

三维图像渲染基本概要渲染(Render)是用软件从模型生成图像的过程。

模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何、视点、纹理以及照明信息。

图像是数字图像或者位图图像。

渲染这个术语类似于“艺术家对于场景的渲染”。

另外渲染也用于描述计算视频编辑文件中的效果以生成最终视频输出的过程。

渲染是三维计算机图形学中的最重要的研究课题之一,并且在实践领域它与其它技术密切相关。

在图形流水线中渲染是最后一项重要步骤,通过它得到模型与动画最终显示效果。

自从二十世纪七十年代以来随着计算机图形的不断复杂化,渲染也越来越成为一项重要的技术。

渲染的应用领域有:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计,每一种应用都是特性与技术的综合考虑。

作为产品来看,现在已经有各种不同的渲染工具产品,有些集成到更大的建模或者动画包中,有些是独立产品,有些是开放源代码的产品。

从内部来看,渲染工具是都是根据各种学科理论经过仔细设计的程序,其中有:光学、视觉感知、数学以及软件开发。

三维计算机图形的预渲染或者实时渲染的速度都非常慢。

预渲染的计算强度很大,通常是用于电影制作;实时渲染经常用于三维视频游戏,通常依靠带有三维硬件加速器的图形卡完成这个过程。

使用在图像初步建立(通常使用网格骨架构建)之后,就要进行渲染了。

渲染将会在上面添加位图纹理或者程序纹理、照明、凸凹纹理映射以及相对于其它物体的位置。

得到的结果就是消费者或者观察者所能看到的完整图像。

对于电影动画来说,需要渲染几幅或几帧图像,并且将这些图像在动画制作程序中将它们连结在一起。

大多数的三维图像编辑程序都能够完成这项工作。

特性渲染的图像有许多显著的特性,渲染研究的领域也主要集中在寻找高效模拟这些特性的方法。

有些特性只与特定的算法有关,有些却与多个算法相关。

●浓淡处理 — 表面颜色与亮度随光照的变化●纹理映射 — 在表面生成细节的方法●凸凹纹理映射 — 在表面模拟小凸凹的方法●距离模糊 — 光照穿过不清澈的大气时的模糊●阴影 — 阻挡光照的效果●柔和阴影 — 非常微弱的光源生成的暗处●反射 — 镜子或者非常光滑的反射●透明 — 固体明显允许光线穿过●半透明 — 光线通过固体高度散射●折射 — 与透明相关的光线弯曲●间接照明 — 表面由其它表面反射的光照亮,而非光源直接照亮●焦散(caustics)— 间接照明的一种形式,光滑物体反射的光线或者通过透明物体生成的聚焦光线在其它物体上形成照亮区域●景深 — 当物体在焦距物体前后太远时出现模糊●运动模糊 — 由于物体高速运动或者照相机运动而导致的物体模糊●真实感渲染 — 看起来较像现实世界的三维渲染●非真实感渲染 — 用艺术风格渲染场景,使它看起来象油画或者素描技术研究人员已经研究出了许多渲染算法,渲染软件可以使用多种不同的技术以生成最终图像。

对场景中的每束光线进行跟踪不太现实,并且需要耗费大得惊人的时间。

如果没有采样进行很好的约束,即使是一部分光线的跟踪以生成图像也需要非常大量的时间。

所以,大致可以分为四类的更加高效的光线传输模型技术就应运而生。

第一类是栅格化,包括扫描线渲染,这种方法考虑场景中的物体并将它们投影一幅图像,对于生成不同观察点的透视图没有任何帮助;第二类是光线投射,将场景从不同视角观察,只根据几何与反射强度的基本光学原理计算观察到的图像,也可能使用蒙特・卡罗方法减少人为噪声;第三类是辐射着色,使用有限元分析方法模拟光线在表面的散射;第四类是光线跟踪,类似于光线投射,但是使用了更加先进的光学模拟方法,并且通常使用蒙特・卡罗方法以实现更加真实的结果,但是这样做的代价通常是速度的大幅度降低。

大多数高级软件使用多种技术的组合以在合理的开销范围内实现足够好的结果。

扫描线渲染与栅格化图像的高层次表示有必要包含与像素不同的元素,这些元素称为基元。

例如,在示意图中线段与曲线是基元;在图形用户界面中,窗口与按钮是基元;在三维渲染中,三角形与空间多边形是基元。

在像素到像素渲染速度很慢无法实现的任务中,基元到基元的实现方法可能就能排上用场。

在这种方法中,循环遍历每个基元确定它将影响图像中的哪个像素,然后相应地修改那个像素。

这种方法称为栅格化,这是当今所有图形卡都用的渲染方法。

栅格化经常要比像素到像素的渲染速度快。

首先,图像中的大块区域可能根本没有基元,栅格化就可以忽略这些区域,而像素到像素的渲染方法却必须遍历这些区域;其次,栅格化可以提高缓存一致性并且可以利用图像中同一个基元占据的像素通常是连续的这样一个事实从而减少冗余操作。

正是由于这些原因,栅格化通常是需要交互式渲染的场合选择的一种方法,但是像素到像素的实现方法经常可以生成更高质量的图像,同时由于没有栅格化那么多的前提条件所以更加通用。

栅格化有两种主要的形式,不仅整个表面或者基元进行渲染,而且表面顶点全部进行渲染,以及用相邻顶点简单颜色混合来渲染位于顶点之间的表面上的像素,由于这种方法不使用复杂的纹理实现图像连续,所以这种方法已经取代了较旧的栅格化方法,并且由于简单的纹理可以节省内存空间,所以通过使用图形卡的已经繁重的浓淡效果处理功能仍然可以得到更好的性能。

旧的方法如果不使用复杂的纹理就会在图像逐个表面覆盖纹理的时候形成块状效应,并且由于像素之间没有颜色渐变所以表面看起来也不光滑。

有些情况下设计人员在某些表面上使用栅格化的方法,而根据其它表面相对于其它相交表面的角度使用其它的方法,这样一方面可以提高处理速度,另外也仍然可以保证整体效果。

光线投射光线投射主要用于如三维电脑游戏以及动画等实时模拟场合,在这些场合下细节并不太重要或者是通过人为制造细节可以得到更好的计算效率。

通常在需要多帧图像生成动画时就会出现这种情况。

如果不使用其它的技巧,这种方法得到的物体表面通常看起来比较扁平,就好像场景中的物体都是经过光滑处理的糙面。

建好的几何模型从外部观察点逐点、逐线进行分析,就如同是从观察点投射出光线一样。

当光线与物体交叉的时候,交叉点的颜色可以用几种不同的方法来计算。

其中最简单的方法是用交叉点处物体的颜色表示该点的实际颜色;也可以用纹理映射的方法来确定;一种更加复杂的方法是仅仅根据照明因数变更颜色值,而无需考虑与模拟光源的关系。

为了减少人为误差,可以对多条相邻方向的光线进行平均。

另外也可以对光的特性进行大致的模拟:简单计算从物体到观察点的光线。

另外的一些计算涉及到从光源到物体的入射角,以及根据光源的强度计算像素的亮度值。

此外还有一些模拟使用辐射着色算法绘制的照明结果,或者使用这两种信息的组合。

辐射着色辐射着色是模拟反射光线如何反射到其它表面以及如何照亮周围环境的方法。

这种方法可以生成较为真实的浓淡效果,并且更加易于捕捉室内场景的环境光。

一个经典的例子就是墙角处阴影的样子。

这种模拟的光学基础是特定物体表面某一点的漫反射的光线散布在在很大的方向范围内并且会照亮周围的环境。

各种模拟技术的复杂性可能会有所不同。

许多渲染方法所用的辐射着色模型都非常原始,它们只是简单地根据环境因数变化照亮整个场景。

但是当高级的辐射着色与高质量的光线跟踪算法组合在一起使用的时候,它们能够生成相当真实的图像,尤其是对于室内场景更是这样。

在高级的辐射着色模拟中,递归的有限元分析算法不断地将光线在模型表面之间来回反射,直到达到一定的递归条件为止。

这样一个表面的色彩就会影响其它相邻表面的色彩,反之亦然。

整个模型(有时也包括空白空间)的照明结果保存起来,在光线投射或者光线跟踪模型中作为输入使用。

由于这项技术的递归特性,所以对于复杂物体的模拟速度非常缓慢。

一些先进的辐射着色计算方法可能只计算房间中从墙面、地板与房顶反射的环境光,而并不计算复杂物体反光对于辐射着色的影响,或者在辐射着色计算中使用使用同样尺寸及纹理的简单物体取代复杂物体。

如果场景中需要重排的辐射着色物体很少,那么可以在多帧画面中重复使用同样的辐射着色数据,这样就使得辐射着色一方面可以改进光线投射中的扁平效果,另外一方面每帧的渲染时间也不会受到很大的影响。

正因为如此,辐射着色已经成为领先的实时渲染方法,并且已经用于最近大量著名的长篇三维动画电影从头到尾的制作过程。

光线跟踪光线跟踪是与扫描线渲染和光线投射开发的同样技术的延伸,同那些方法一样,它可以很好地处理复杂物体,并且也可以用数学方法描述物体。

与扫描线渲染和光线投射不同的是,光线跟踪几乎是一项蒙特・卡罗方法,蒙特・卡罗方法是一项基于从模型中随机得到的一组采样进行平均的技术。

在这种方法中,采样是假想的从场景物体发出与观察点相交的光线。

在重点考虑阴影、折射与反射等需要复杂精确渲染的场合这种方法就可以派上用场。

在最终要求产品质量渲染效果的光线跟踪中,通常每个像素都要多条光线,并且不仅仅跟踪到第一次相交,而是需要按照“入射角等于反射角”这样的光学定律以及更加高级的处理折射与粗糙表面反射的定律处理多次连续反射。

一旦光线遇到光源或者更可能出现的是光线反射次数已经达到设定的限制,那么最终点的表面照明就通过上面的方法确定下来,并且经过多次反射发生的变化也可以用来估计在观察点看到的亮度。

每个采样点、每个像素都要重复这个过程。

在有些场合中每个交点可能生成多条光线。

作为一种非常有效的方法,光线跟踪的实时处理速度太慢,直到最近也没有在任何质量要求的短片电影中获得应用,尽管它已经开始在一些特殊效果要求的场合开始使用,如在需要高质量甚至是Photorealistic的脚本片断的广告中开始使用。

但是,降低不需要高质量细节部分的或者与光线跟踪特性无关部分的计算量的努力已经使得光线跟踪的应用更加广泛。

目前已经出现了一些至少已经处于原型阶段硬件加速的光线跟踪设备,在一些游戏演示中也有实时软件或者硬件光线跟踪的应用。

优化艺术家构建场景的时候所用的优化方法由于所需计算量非常大,一项逐步进行的工作的细节渲染通常对应于当时工作的进度。

因此,在建模的开始阶段可以使用线框模型或者光线投射进行处理,即使是最终的目标结果是要使用辐射着色的光线跟踪也可以这么做。

另外也经常只对一部分进行高质量的渲染,而对于当前工作无关紧要的部分剔除出去。

实时渲染中常用的优化方法对于实时渲染来说,适当的做法是简化一个或者多个共同的近似,将关键场景调到正确的参数,并且要将参数调整到能够获得最好的效果。

另外还有些一些不太出名的渲染方法,如球谐函数。

这些技术由于速度较慢、缺少实用性或者仅仅因为它们还不太完善所以不太出名,或许其中的某些技术能够提供一些新的解决方案。

采样与滤波不管系统采样哪种渲染方法,都必须解决采样问题。

本质上来讲,渲染过程试图用有限数目的像素将图像空间的连续函数表现成颜色。

根据采样定理的结论,扫描频率必须是点速(dot rate)的两倍,点速与图像分辨率成正比。

相关主题