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

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

上一篇:游戏开发中基于图像的渲染技术总结(一)

五、精灵与层 Sprites and Layers
 
最基本的基于图像的渲染的图元之一便是精灵(sprite)。精灵(sprite)是在屏幕上移动的图像,例如鼠标光标。精灵不必具有矩形形状,而且一些像素可以以透明形式呈现。对于简单的精灵,屏幕上会显示一个一对一的像素映射。存储在精灵中的每个像素将被放在屏幕上的像素中。可以通过显示一系列不同的精灵来生成动画。

图13 基于Sprite层级制作的《雷曼大冒险》@UBISOFT

更一般的精灵类型是将其渲染为应用于总是面向观看者的多边形的图像纹理。图像的Alpha通道可以为sprite的各种像素提供全部或部分透明度。这种类型的精灵可以有一个深度,所以在场景本身,可以顺利地改变大小和形状。一组精灵也可以用来表示来自不同视图的对象。对于大型物体,这种用精灵来替换的表现效果会相当弱,因为从一个精灵切换到另一个时,会很容易穿帮。也就是说,如果对象的方向和视图没有显着变化,则给定视图中的对象的图像表示可以对多个帧有效。而如果对象在屏幕上足够小,存储大量视图,即使是动画对象也是可行的策略。

考虑场景的一种方法是将其看作一系列的层(layers),而这种思想也通常用于二维单元动画。每个精灵层具有与之相关联的深度。通过这种从前到后的渲染顺序,我们可以渲染出整个场景而无需Z缓冲区,从而节省时间和资源。

图14 基于Sprite层级制作的《雷曼大冒险》@UBISOFT

六、公告板 Billboarding
 
我们将根据观察方向来确定多边形面朝方向的技术叫做公告板(Billboarding,也常译作布告板)。而随着观察角度的变化,公告板多边形的方向也会根据需求随之改变。与alpha纹理和动画技术相结合,可以用公告板技术表示很多许多不具有平滑实体表面的现象,比如烟,火,雾,爆炸效果,能量盾(Energy Shields),水蒸气痕迹,以及云朵等。如下文中贴图的,基于公告板渲染出的云朵。

图15 一棵由公告板技术渲染出的树木


图16 给定表面的法线向量n和近似向上方向的向量u,通过创建一组由三个相互垂直的向量,就可以确定公告板的方向。其中,左图是互相垂直的u和n。中图是r向量通过u和n的叉乘得到,因此同时垂直于u和n,而在右图中,对固定向量n和r进行叉乘就可以得到与他们都垂直的的向上向量u’

有三种不同类型的Billboard,分别是:

  • Screen-Aligned Billboard 对齐于屏幕的公告板
  • World-Oriented Billboard 面向世界的公告板
  • Axial Billboard 轴向公告板

其中:

  • Screen-Aligned Billboard的n是镜头视平面法线的逆方向,u是镜头的up。
  • Axial Billboard的u是受限制的Axial,r = u* n,(n是镜头视平面法线的逆方向,或视线方向的逆方向),最后再计算一次 n' = r * u,即n'才是最后可行的代入M的n,表达了受限的概念。
  • World-orientedbillboard就不能直接使用镜头的up做up,因为镜头roll了,并且所画的billboard原本是应该相对世界站立的,按Screen-Aligned的做法就会随镜头旋转,所以此时应该 r = u * n(u是其在世界上的up,n是镜头视线方向的逆方向),最后再计算一次u = r * n,即u'才是最后的up,即非物体本身相对世界的up,亦非镜头的up。

所以公告板技术是一种看似简单其实较为复杂的技术,它的实现变种较多。

归其根本在于

  • View Oriented / View plane oriented的不同
  • Sphere/ Axial的不同
  •  Cameraup / World up的不同

 
如View Oriented 和View plane oriented的不同,得到的公告板效果就完全不同:

图17 两种公告板对其技术的顶视图,左图为view plane-aligned(视图平面对齐),右图为viewpoint-oriented(视点对齐),其面向的方向根据算法的不同而有所不同。

图18 使用world-oriented Billboard创建的云层

在Unreal 4 Engine中,使用Axial Billboard作为树木LOD中的一级的一些图示 :

图19 使用Axialbillboard作为树木LOD中的一级 @Unreal 4 Engine

图20 使用Axialbillboard作为树木LOD中的一级 @Unreal 4 Engine

七、粒子系统 Particle System

粒子系统(Particle System)是一组分散的微小物体集合,其中这些微小物体按照某种算法运动。粒子系统的实际运用包括模拟火焰,烟,爆炸,流水,树木,瀑布,泡沫,旋转星系和其他的一些自然现象。粒子系统并不是一种渲染形式,而是一种动画方法,这种方法的思想是值粒子的生命周期内控制他们的产生,运动,变化和消失。

可以用一条线段表示一个实例,另外,也可以使用轴向公告板配合粒子系统,显示较粗的线条。

除了爆炸,瀑布,泡沫以及其他现象以外,还可以使用粒子系统进行渲染。例如,可以使用粒子系统来创建树木模型,也就是表示树木的几何形状,当视点距离模型较近时,就会产生更多的粒子来生成逼真的视觉效果。

以下是一幅用粒子系统渲染树木的示例:

图21 基于粒子系统渲染的树木

八、替代物 Impostors

作为一种公告板技术,替代物(Impostors)是通过从当前视点将一个复杂物绘制到一幅图像纹理上来创建的,其中的图像纹理用于映射到公告板上,渲染过程与替代物在屏幕上覆盖的像素点数成正比,而不是与顶点数或者物体的复杂程度成正比。替代物可以用于物体的一些实例上或者渲染过程的多帧上,从而使整体性能获得提升。

图22 一幅树的视图和一个Impostors(Impostors的黑色背景是透明通道,在渲染时可以处理)

图23 一幅相同的树和Impostors的线框视图

另外,Impostors和Billboard的纹理还可以结合深度信息(如使用深度纹理和高度纹理)进行增强。如果对Impostors和Billboard增加一个深度分量,就会得到一个称为深度精灵(depth sprite)或者nailboard(译作钉板,感觉很奇怪)的相关绘制图元。也可以对Impostors和Billboard的纹理做浮雕纹理映射(relief texture mapping)。

关于Impostors,一篇很好的文章是William Damon的《Impostors Made Easy》,有进一步了解兴趣的朋友可以进行延伸阅读:https://software.intel.com/en-us/articles/impostors-made-easy

未完待续......

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

推荐阅读