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

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

游戏开发中基于图像的渲染技术总结(一)
游戏开发中基于图像的渲染技术总结(二)
游戏开发中基于图像的渲染技术总结(三)

十三、镜头眩光和泛光 Lens Flare and Bloom

镜头眩光(Lens flare)是由于眼睛的晶状体或者相机的透镜直接面对强光所产生的一种现象,由一圈光晕(halo)和纤毛状的光环(ciliary corona)组成。光晕的出现是因为透镜物质(如三棱镜)对不同波长光线折射数量的不过而造成的,看上去很像是光周围的一个圆环,外圈是红色,内圈是紫红色。纤毛状的光环源于透镜的密度波动,看起来像是从一个点发射出来的光线。Lens flare是近来较为流行的一种图像效果,自从我们认识到它是一种实现真实感效果的技术后,计算机便开始模拟此效果。

图31 镜头眩光效果 @WatchDogs

泛光(Bloom)效果,是由于眼睛晶状体和其他部分的散光而产生,在光源附近出现的一种辉光。在现实世界中,透镜无法完美聚焦是泛光效果的物理成因;理想透镜也会在成像时由于衍射而产生一种名为艾里斑的光斑。

常见的一个误解便是将HDR和Bloom效果混为一谈。Bloom可以模拟出HDR的效果,但是原理上和HDR相差甚远。HDR实际上是通过映射技术,来达到整体调整全局亮度属性的,这种调整是颜色,强度等都可以进行调整,而Bloom仅仅是能够将光照范围调高达到过饱和,也就是让亮的地方更亮。不过Bloom效果实现起来简单,性能消耗也小,却也可以达到不错的效果。

图32 Bloom效果 @ Battlefield3

图33 《Battlefield 3》中的渲染效果,同时包含镜头眩光(Lens flare),泛光(Bloom)和Dirty Lens

十四、景深 Depth of Field

在光学领域,特别是摄影摄像领域,景深(Depth of field,DOF),也叫焦点范围(focus range)或有效焦距范围(effective focus),是指场景中最近和最远的物体之间出现的可接受的清晰图像的距离。换言之,景深是指相机对焦点前后相对清晰的成像范围。在相机聚焦完成后,在焦点前后的范围内都能形成清晰的像,这一前一后的距离范围,便叫做景深。

图34 摄影中典型的景深效果

虽然透镜只能够将光聚到某一固定的距离,远离此点则会逐渐模糊,但是在某一段特定的距离内,影像模糊的程度是肉眼无法察觉的,这段距离称之为景深。当焦点设在超焦距处时,景深会从超焦距的一半延伸到无限远,对一个固定的光圈值来说,这是最大的景深。

景深通常由物距、镜头焦距,以及镜头的光圈值所决定(相对于焦距的光圈大小)。除了在近距离时,一般来说景深是由物体的放大率以及透镜的光圈值决定。固定光圈值时,增加放大率,不论是更靠近拍摄物或是使用长焦距的镜头,都会减少景深的距离;减少放大率时,则会增加景深。如果固定放大率时,增加光圈值(缩小光圈)则会增加景深;减小光圈值(增大光圈)则会减少景深。

景深的效果在计算机图形学中应用广泛,电影,游戏里面经常会利用景深特效来强调画面重点。相应的,已经有了很多成熟的算法在不同的渲染方法,而光栅化可以很高效的实现现有的景深算法。

图35 景深效果 @Battlefield 4

图36 景深效果 @ Witcher2

十五、运动模糊 Motion Blur

现实世界中,运动模糊(Motion Blur,或译为或动态模糊),是因为相机或者摄影机的快门时间内物体的相对运动产生的。在快门打开到关上的过程中,感光材料因为受到的是物体反射光持续的照射成像。即在曝光的这个微小时间段内,对象依然在画面中移动,感光材料便会记录下这段时间内物体运动的轨迹,产生运动模糊。

我们经常在电影中看到这种模糊,并认为它是正常的,所以我们期望也可以在电子游戏中看到它,以带给游戏更多的真实感。

若无运动模糊,一般情况下,快速移动的物体会出现抖动,在帧之间的多个像素跳跃。这可以被认为是一种锯齿,但可以理解为基于时间的锯齿,而不是基于空间的锯齿。在这个意义上,运动模糊可以理解为是一种时间意义上的抗锯齿。

正如更高的显示分辨率可以减少但不能消除锯齿,提高帧速率并不能消除运动模糊的需要。而视频游戏的特点是摄像机和物体的快速运动,所以运动模糊可以大大改善画面的视觉效果。而事实表明,带运动模糊的30 FPS画面,通常看起来比没有带运动模糊的60 FPS画面更出色。

图37 Motion Blur效果 @GTA5

在计算机绘制中产生运动模糊的方法有很多种。一个简单但有限的方法是建模和渲染模糊本身。

实现运动模糊的方法大致分3种:

1、直接渲染模糊本身。通过在对象移动之前和之后添加几何体来完成,并通过次序无关的透明,避免Alpha混合。

2、基于累积缓冲区(accumulationbuffer),通过平均一系列图像来创建模糊。

3、基于速度缓冲器(velocity buffer)。目前这个方法最为主流。创建此缓冲区,需插入模型三角形中每个顶点的屏幕空间速度。通过将两个建模矩阵应用于模型来计算速度,一个用于最后一个帧,一个用于当前模型。顶点着色器程序计算位置的差异,并将该向量转换为相对的屏幕空间坐标。图10.34显示了速度缓冲器及其结果。

图38 Motion Blur效果 @Battlefield4

运动模糊对于由摄像机运动而变得模糊的静态物体来说比较简单,因为往往这种情况下不需要速度缓冲区。如果需要的是摄像机移动时的运动感,可以使用诸如径向模糊(radial blur)之类的固定效果。如下图。

图39 径向模糊可以增强运动感 @《刺客信条》Ubisoft

十六、体渲染 Volume Rendering
 
体渲染(Volume Rendering),又称立体渲染,体绘制,是一种用于显示离散三维采样数据集的二维投影的技术。体渲染技术中的渲染数据一般用体素(Volumeric Pixel,或Voxel)来表示,每个体素表示一个规则空间体。例如,要生成人头部的医学诊断图像(如CT或MRI),同时生成256 x256个体素的数据集合,每个位置拥有一个或者多个值,则可以将其看做三维图像。因此,体渲染也是基于图像的渲染技术中的一种。

图40 一个典型的体渲染Pipeline

体渲染技术流派众多,常见的流派有:

  • 体光线投射Volume ray casting
  • 油彩飞溅技术Splatting
  • 剪切变形技术Shear warp
  • 基于纹理的体绘制Texture-based volume rendering
  • 等。

图41 基于Splatting和voxel在Unreal 4中进行的体渲染

图42 Volume Cloud(体积云)效果 @Unity 5

图43 Volume Fog(体积雾)效果 @CRY ENGINE 3

其他参考
 
[1] https://udk-legacy.unrealengine.com/udk/Three/ColorGrading.html
[2] http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=DD633186A657949...
[3] http://blendermama.com/precise-distribution-of-trees-using-particles.html
[4] https://software.intel.com/en-us/articles/impostors-made-easy
[5] http://lightfield-forum.com/2014/05/mit-compressive-light-field-projecti...
[6] https://bartwronski.com/2014/04/07/bokeh-depth-of-field-going-insane-par...
[7] http://blog.csdn.net/silangquan/article/details/17148757
[8] https://en.wikipedia.org/wiki/Skybox_(video_games)
[9] 胡孔明, 于瀛洁, 张之江. 基于光场的渲染技术研究[J].微计算机应用, 2008, 29(2): 22-27.
[10] https://forums.unrealengine.com/community/community-content-tools-and-tu...
[11] http://unigine.com/cn/articles/procedural-content-generation2
[12] https://en.wikipedia.org/wiki/Tone_mapping
[13] https://en.wikipedia.org/wiki/Volume_rendering

来源:CSDN,作者:浅墨_毛星云,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/poem_qianmo/article/details/78309500
版权声明:本文为博主原创文章,转载请附上博文链接!

推荐阅读