游戏开发中基于图像的渲染技术总结

本文由@浅墨_毛星云 出品,转载请注明出处。
文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500

这是一篇近万字的总结式文章,关于基于图像的渲染(Image-Based Rendering,简称IBR)技术的方方面面,将总结《RTR3》书中第十章提到的16种游戏开发中常用的IBR渲染技术。

他们包括:

渲染谱 The Rendering Spectrum
固定视角的渲染 Fixed-View Rendering
天空盒 Skyboxes
光场渲染 Light Field Rendering
精灵与层 Sprites and Layers
公告板 Billboarding
粒子系统 Particle System
替代物 Impostors
公告板云 Billboard Clouds
图像处理 Image Processing
颜色校正 Color Correction
色调映射 Tone Mapping
镜头眩光和泛光 Lens Flare and Bloom
景深 Depth of Field
运动模糊 Motion Blur
体渲染 Volume Rendering

在过去很多年里,基于图像的渲染(Image-Based Rendering ,简称IBR),已经自成一派,逐渐发展成了一套广泛的渲染理念。正如其字面所表示的,图像是用于渲染的主要数据来源。用图像表示一个物体的最大好处在于渲染消耗与所要绘制的像素数量成正比,而不是几何模型的顶点数量。因此,使用基于图像的渲染是一种有效的渲染模型的方法。除此之外,IBR技术还有其他一些更为广泛的用途,比如云朵,皮毛等很多很难用多边形来表示的物体,却可以巧妙运用分层的半透明图像来显示这些复杂的表面。

OK,下面开始正文,对这16种常见的基于图像的渲染技术,分别进行介绍。

一、渲染谱 The Rendering Spectrum

众所周知,渲染的目的就是在屏幕上渲染出物体,至于如何达到结果,主要依赖于用户的选择,白猫黑猫,抓到老鼠的就是好猫。而用多边形将三维物体显示在屏幕上,并非是进行三维渲染的唯一方法,也并非是最合适的方法。多边形具有从任何视角以合理的方式表示对象的优点,当移动相机的时候,物体的表示可以保持不变。但是,当观察者靠近物体的时候,为了提高显示质量,往往希望用比较高的细节层次来表示模型。与之相反,当物体位于比较远的地方时,就可以用简化形式来表示模型。这就是细节层次技术(Level Of Detail,LOD)。使用LOD技术主要目的是为了加快场景的渲染速度。

还有很多技术可以用来表示物体逐渐远离观察者的情形,比如,可以用图像而不是多边形来表示物体,从而减少开销,加快渲染速度。另外,单张图片可以很快地被渲染到屏幕上,用来表示物体往往开销很小。

如《地平线:黎明》远处的树木,即是采用公告板技术(Billboard)替换3D树木模型进行渲染。(关于公告板技术的一些更具体的总结,详见本文第六节)。

图1 《地平线:黎明》中利用了Billboard进行画面的渲染

Lengyel于1998在《The Convergence of Graphics and Vision》一文中提出了一种表示渲染技术连续性的方法,名为The Rendering Spectrum 渲染谱,如下图所示。

图2 渲染谱 The Rendering Spectrum(RTR3书中版本)

图3 渲染谱 The Rendering Spectrum(Lengyel 1998论文版本)

可以将渲染谱理解为渲染的金字塔。从左到右,由简单到复杂,由二维图像到几何模型,从外观特征到物理渲染。

二、固定视角的渲染 Fixed-View Rendering

固定视角的渲染(Fixed-View Rendering),通过将复杂几何模型转换为可以在多帧中重复使用的一组简单的buffer来节省大量渲染时间与性能。

对于复杂的几何和着色模型,每帧去重新渲染整个场景很可能是昂贵的。可以通过限制观看者的移动能力来对渲染进行加速。 最严格的情况是相机固定在位置和方位,即根本不移动。而在这种情况下,很多渲染可以只需做一次。

例如,想象一个有栅栏的牧场作为静态场景,一匹马穿过它。牧场和栅栏渲染仅一次,存储其颜色和Z缓冲区。每帧将这些buffer复制到可显示的颜色和Z缓冲中。为了获得最终的渲染效果,马本身是需要渲染的。如果马在栅栏后面,存储和复制的z深度值将把马遮挡住。请注意,在这种情况下,马不能投下阴影,因为场景无法改变。可以进行进一步的处理,例如,可以确定出马影子的区域,根据需求进行处理。关键是对于要显示的图像的颜色何时或如何设置这点上,是没有限制的。固定视角的特效(Fixed-View Effects),可以通过将复杂几何模型转换为可以在多帧中重复使用的一组简单的buffer来节省大量时间。

在计算机辅助设计(CAD)应用程序中,所有建模对象都是静态的,并且在用户执行各种操作时,视图不会改变。一旦用户移动到所需的视图,就可以存储颜色和Z缓冲区,以便立即重新使用,然后每帧绘制用户界面和突出显示的元素。 这允许用户快速地注释,测量或以其他方式与复杂的静态模型交互。通过在G缓冲区中存储附加信息,类似于延迟着色的思路,可以稍后执行其他操作。 例如,三维绘画程序也可以通过存储给定视图的对象ID,法线和纹理坐标来实现,并将用户的交互转换为纹理本身的变化。

一个和静态场景相关的概念是黄金线程(Golden Thread)或自适应(Adaptive Refinement)渲染。其基本思想是,当视点与场景不运动时,随着时间的推移,计算机可以生成越来越好的图像,而场景中的物体看起来会更加真实,这种高质量的绘制结果可以进行快速交换或混合到一系列画面中。这种技术对于CAD或其他可视化应用来说非常有用。而除此之外,还可以很多不同的精化方法。一种可能的方法是使用累积缓冲器(accumulation buffer)做抗锯齿(anti- aliasing),同时显示各种累积图像。另外一种可能的方法是放慢每像素离屏着色(如光线追踪,环境光遮蔽,辐射度)的速度,然后渐进改进之后的图像。

在RTR3书的7.1节介绍一个重要的原则,就是对于给定的视点和方向,给定入射光,无论这个光亮度如何计算或和隔生成这个光亮度的距离无关。眼睛没有检测距离,仅仅颜色。在现实世界中捕捉特定方向的光亮度可以通过简单地拍一张照片来完成。

QuickTime VR是由苹果公司在1995年发布的VR领域的先驱产品,基本思路是用静态图片拼接成360度全景图。QuickTime VR中的效果图像通常是由一组缝合在一起的照片,或者直接由全景图产生。随着相机方向的改变,图像的适当部分被检索、扭曲和显示。虽然这种方法仅限于单一位置,但与固定视图相比,这种技术具有身临其境的效果,因为观看者的头部可以随意转动和倾斜。

Kim,Hahn和Nielsen提出了一种有效利用GPU的柱面全景图,而且通常,这种全景图也可以存储每个纹素的距离内容或其他值,以实现动态对象与环境的交互。

如下的三幅图,便是是基于他们思想的全景图(panorama),使用QuickTime VR来渲染出的全景视野范围。其中,第一幅是全景图原图,后两幅图是从中生成的某方向的视图。注意观察为什么这些基于柱面全景图的视图,没有发生扭曲的现象。

图4 全景图原图

图5 通过全景图得到的视图1

图6 通过全景图得到的视图2

三、天空盒 Skyboxes

对于一些远离观众的物体,观众移动时几乎没有任何视差效果。换言之,如果你移动一米,甚至一千米,一座遥远的山本身看起来通常不会有明显的不同。当你移动时,它可能被附近的物体挡住视线,但是把那些物体移开,山本身看起来也依旧一样。天空盒就属于这种类型的物体。

图7 基于天空盒渲染的场景 @mad max

环境贴图(environment map)可以代表本地空间入射光亮度。虽然环境贴图通常用于模拟反射,但它们也可以直接用来表示环绕环境的远处物体。任何独立于视图的环境地图表示都可以用于此目的;立方体贴图(cubic maps)是最为常见的一种环境贴图。环境贴图放置在围绕着观察者的网格上,并且足够大以包含场景中所有的对象。且网格的形状并不重要,但通常是立方体贴图。如下图,在该图所示的室内环境更像是一个QuickTime VR全景的无约束版本。观众可以在任何方向观察这个天空盒,得到很好的真实体验。但同样,任何移动都会破坏这个场景产生的真实感错觉,因为移动的时候,并不存在视差。

图8 一个典型的立方体环境贴图

环境贴图通常可以包含相对靠近反射对象的对象。因为我们通常并没有多精确地去在乎反射的效果,所以这样的效果依然非常真实。而由于视差在直接观看时更加明显,因此天空盒通常只包含诸如太阳,天空,远处静止不动的云和山脉之类的元素。

图9 玻璃球折射和反射效果的一个立方体环境贴图,这个map本身用可作天空盒。

为了使天空盒看起来效果不错,立方体贴图纹理分辨率必须足够,即每个屏幕像素的纹理像素。 必要分辨率的近似值公式:


其中,fov表示视域。该公式可以从观察到立方体贴图的表面纹理必须覆盖90度的视域(水平和垂直)的角度推导出。并且应该尽可能隐藏好立方体的接缝处,最好是能做到无缝的衔接,使接缝不可见。一种解决接缝问题的方法是,使用六个稍微大一点的正方形,来形成一个立方体,这些正方形的每个边缘处彼此相互重叠,相互探出。这样,可以将邻近表面的样本复制到每个正方形的表面纹理中,并进行合理插值。

图10 基于天空盒渲染的场景 @battlefield 1

四、光场渲染 Light Field Rendering

所谓光场(Light Field),可以理解为空间中任意点发出的任意方向的光的集合。

而光场渲染(Light Field Rendering),可以理解为在不需要图像的深度信息或相关性的条件下,通过相机阵列或由一个相机按设计的路径移动,把场景拍摄下来作为输出图像集。对于任意给定的新视点,找出该视点邻近的几个采样点进行简单的重新采样和插值,就能得到该视点处的视图。

图12  SIGGRAPH 2014会议上,MIT’s Camera CultureGroup介绍了一种基于开普勒望远镜中投影机和光学技术的无眼镜3D的新方法。 他们提出的“压缩光场投影(Compressive Light Field Projection)”新方法由单个设备组成,并没有机械移动的物件。

未完待续......

来源:CSDN,作者:浅墨_毛星云
原文:https://blog.csdn.net/poem_qianmo/article/details/78309500
版权声明:本文为博主原创文章,转载请附上博文链接!

推荐阅读