计算机图形学的一项主要工作是将计算机中抽象的模型转换为人们直观可见、可以形象理解的图形。它综合利用数学、物理学、计算机等知识,将模型的形状、物理特性(如材料的折射率、反射率、物体发光温度等,机械强度、材料密度等对运动模拟的影响等),以及物体间的相对位置、遮挡关系等性质在计算机屏幕上模拟出来,是一个将“几何”演绎到画面上的再创造过程,这就是渲染,也叫绘制。
1、什么是渲染?
当需要把模型或者场景输出成图像文件、视频信号或者电影胶片时就需要用到渲染
(Render)。渲染是指软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景,它包括几何、视点、纹理、照明等信息。图像是数字图像或者位图图像。除去后期制作,渲染是计算机图形处理的最后一道工序,通过它得到模型与动画的最终显示效果。实现渲染依靠多种软件,如各种 CG 软件自带渲染引擎、RenderMan 等。
随着计算机图形学的不断深入发展,渲染的应用领域越来越广泛:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计。作为产品来看,现在已经有各种不同的渲染工具产品,有些集成到更大的建模或者动画工具中,有些是独立产品,有些是开放源代码的产品。从内部来看,渲染工具都经过了仔细的设计,其理论基础是光学、视觉感知、数学以及软件开发等各种科学理论。
2、渲染技术有哪些?
扫描线渲染与栅格化:扫描线渲染是一行一行进行的一项技术和算法集。所有待渲染的多边形首先按照顶点 y 坐标出现的顺序排序,然后使用扫描线与列表中前面多边形的交点计算图像的每行或者每条扫描线,在活动扫描线逐步沿图像向下计算的时候更新列表。这种方法的一个优点是没有必要将主内存中的所有顶点都转到工作内存,只有与当前扫描线相交边界的约束顶点才需要读到工作内存,并且每个定点数据只需读取一次。主内存的速度通常远远低于中央处理单元或者高速缓存,避免多次访问主内存中的顶点数据,就可以大幅度地提升运算速度。
栅格化又叫光栅化,是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程。栅格化将顶点数据转换为片元,片元中的每一个元素对应于帧缓冲区中的一个像素。
如下图:
光线投射:从不同视角观察场景,并根据几何与反射强度的基本光学原理计算观察到的图像,这就是光线投射。光线投射算法的基本思想是从视平面每个像素发出一条光线,穿过体数据,基于最基本的光线吸收和发射模型,沿着光线方向对颜色和阻光度进行积累。当光线与物体交叉的时候,交叉点的颜色可以用几种不同的方法来计算。其中最简单的方法是用交叉点处物体的颜色表示该点的实际颜色;也可以用纹理映射的方法来确定;一种更加复杂的方法是依据局部光照模型进行计算。为了减少人为误差,可以对多条相邻方向的光线进行平均。另外的一些计算涉及到从光源到物体的入射角,以及根据光源的强度计算像素的亮度值。
光线投射算法从视点发出一组光线,对光线经过的三维数据集上的数据可以间隔均匀地采样,与人类真实视觉相似,适用于透视投影。因此光线投射主要被用于实时模拟场景下, 例如三维计算机游戏以及动画等,这类场景往往对细节不太重视而且通过人为制造细节可以得到更好的表现效果。
辐射着色:辐射着色是模拟反射光线如何反射到它表面以及如何照亮周围环境的方法。这种方法可以生成较为真实的浓淡效果,并且更加易于捕捉室内场景的环境光。这种模拟的光线基础是特定物体表面某一点的漫反射的光线散布在很大的方向范围内并且会照亮周围 的环境。 各种模拟技术的复杂性可能会有所不同。许多渲染方法所用的辐射着色模型都非常原始, 它们只是简单地根据环境因数变化照亮整个场景。但是当高级的辐射着色与高质量的光线跟 踪算法组合在一起使用的时候,它们能够生成相当真实的图像,尤其是对于室内场景更是这样。在高级的辐射着色模拟中,递归的有限元分析算法不断地将光线在模型表面之间来回反射,直到达到一定的递归条件为止。这样一个表面的色彩就会影响其它相邻表面的色彩,反之亦然。整个模型的照明结果会被保存起来,在光线投射或者光线跟踪模型中作为输入使用。由于这项技术的递归特性,所以对于复杂物体的模拟速度非常缓慢。一些先进的辐射着色计算方法可能只计算房间中从墙面、地板与房顶反射的环境光,而并不计算复杂物体反光对于辐射着色的影响,或者在辐射着色计算中使用同样尺寸及纹理的简单物体取代复杂物体。如果场景中运动的辐射着色物体很少,那么可以在多帧画面中重复使用同样的辐射着色数据。
光线跟踪:类似于光线投射,但是光线跟踪使用了更加先进的光学模拟方法,并且通常使用蒙特·卡罗方法以实现更加真实的结果,不过这样做的代价通常是速度的大幅度降低。
光线跟踪是比其他渲染方法如扫描线渲染等更加能够实现的模拟光线,因此像反射和阴影这样一些需要复杂精确渲染的效果,就需要光线跟踪算法来实现。因此,在要求高质量渲染效果的光线跟踪中,通常每个像素都需要采样多条光线,并且不仅是跟踪到第一次相交, 而是需要按照“入射角等于反射角”这样的光学定律以及更加高级的处理折射与粗糙表面反射的定律处理多次连续反射。一旦光线遇到光源更可能出现的是光线反射次数已经达到设定的限制,那么最终点的表面照明就通过上面的方法确定下来,并且经过多次反射发生的变化也可以估计在观察点看到的亮度。每个采样点、每个像素都要重复这个过程。在有些场合中每个交点可能生成多条光线。
作为一种非常有效的方法,光线跟踪的处理速度很慢,但也在一些需要高真实感效果的场合下得到应用,例如电影制作、广告制作等。此外,简化的光线跟踪方法可以广泛应用于不需要高质量细节的场合。目前已经出现了一些处于原型阶段硬件加速的光线跟踪设备,在一些游戏演示中也有实时软件或者硬件光线跟踪的应用。
版权声明:本文为CSDN博主「Papals」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_23030843/article/details/83033788