关于游戏中的特效

发表于2015-08-06
评论0 7.4k浏览
 

特效是游戏中增加交互印象的很重要一方面,一个好的特效系统能够很大程度上提高游戏的特色。这尤其体现在动作游戏上,比如God of War,Ninja Gaiden等系列中的特效效果就很出彩。这里简单总结一下自己所了解的一些游戏中较为常见的特效:

公告板

公告板效果就是直接使用公告板来渲染出一定的特殊效果。常规公告板的面方向始终与视线的方向垂直,但是也可以增加其属性设置为不必与视线垂直,此时即相当于在某些位置绘制一个面形出来,这样也可以完成一些特殊的效果,比如静止面上的纹理动画等(这需要引擎支持动态的纹理,比如gif等;或是帧贴图的合并与提取等)。

粒子

粒子特效中引擎中最为常见也是必须的一种效果,包括各种灰尘、火焰、烟雾等效果的实现均是由粒子系统来完成。粒子系统是一种过程模型,将造型与动画结合为一个整体,用单个随时间变化的粒子作为场景的基本元素。每个粒子都有自己的生命周期,比如“出生”、"生长"、“死亡”等基本属性。在实现过程中需要采用随机的方法来实现粒子的不确定性,从而增加更为真实的模拟。每个粒子本身的实现又是用公告板的渲染方式并结合不同的Alpha操作来完成。

拖尾

拖尾效果在动作游戏中比较常见,其一般的实现是在要渲染的模型中设置出一些对应的绑定点来,然后在动画播放的过程中记录这些绑定点的位置,并在其上生成相应的不同类型的连接面生,并以丰富的Alpha操作模型进行渲染而实现。在动画更新的过程中也同时完成这些生成的面片的更新以便实现出动态变化的效果。其通常会结合一定的环境反射或扭曲等来增强其表现力。该特效常见于动作游戏中的刀光或角色的运动中,实现较好可以很大程度上增加引擎的表现力,比如下述战神中武器上面的拖尾效果就很炫丽。

贴花

贴花效果严格意义上来说可以并不完全属于特效的范畴,比如可能在场景编辑器中同样需要,因为其不是动态变化的而属于静态场景的一部分。当前的贴花实现既可以用基于前向渲染的传统方式来实现,同样也可以用后处理的方式来实现,不过这就要求引擎使用了延迟渲染的架构,具体差异就跟引擎的细节相关了(之前也有简单介绍的实现)。贴花在游戏中主要使用在一些动态产生的图像或痕迹的表面上,比如射击游戏中的弹孔、走在雪地上的脚印、因攻击而溅到地面上的血迹等各种,这些实现通常也需要与引擎中的逻辑部分相结合从而在特定的场合特定的时间上合理产生以增强表面力。比如下图中就是Ninja Gaiden中的一些Decal使用效果(注意角色身上以及地面上的血渍):

残影

残影主要用来表现角色的快速移动效果,而其实现方式既可以用后处理方式也可以用非后处理方式。一般来说使用前向的基于几何实体的实现方式可能得到更好的效果。在后处理实现中主要是利用后备的累积buffer来实现基于屏幕空间的角色累积,其优点是实现效率较高,毕竟是基于图像空间的,但也有一个明显的缺点就是效果不是太好,特别是当摄像机的位置变化较为剧烈时,另外还有就是使用这种方式的话累积出的效果的材质可控性较差,变化不太丰富;另外一个方式就是前向的基于模型渲染的实现,这个通常是将模型进行虚拟的复制然后再下一帧进行还原绘制,这种方法不会受Camera变化的影响,而且由于是直接进行几何体的渲染因而材质的控制就为简单,也使用其效果较好。另外在这种方法中也可以将其与其它的特效相结合,比如使用拖尾对多个残影间进行连接可以得到另外一种更加炫丽的效果。这种效果在最新的Ninja Gaiden3中用得也挺多的,效果也很好看(主角快速攻击时身后的蓝色运动痕迹)

屏幕特效

屏幕特效一般是在后处理过程中施加的一个基于图像空间的用来模拟摄像机上一些效果的操作,比如FPS游戏中弹屏幕眩晕、动作游戏中的屏幕溅血等。这个操作的实现其实还是很简单的,只需在后得理过程中增加个目标贴图的Alpha混合即可,但是比较重要的是控制其基于Alpah的渐变、同引擎中逻辑相结合的触发以及各种状态下触发的随机性控制等,而且还需要美工制作出不错的屏幕以及Alpha通道贴图来供使用。比如下图中的Ninja Gaiden中主角攻击后敌人的血渍屏幕喷溅的效果:


特效在引擎中的组织与使用的一些注意点:

  • 特效可以以某类型结点的方式在引擎中管理,且其与其它结点,比如角色的模型应是等价的,同样要参与对应的可见性测试、帧更新等操作。
  • 基本上分布非后处理特效与后处理特效,这是从特效的实现方式上进行分解,两大类的实现方式也有一定的区别,但是对应的更新、加载及释放等操作区别不大。
  • 在引擎中需要提供编辑器供美工进行使用,其可以与场景等其它编辑器相互独立,但需要使用统一的引擎框架(包括资源、逻辑的管理,渲染流程等),需要既方便开发同时又方便维护。
  • 某些特效可能需要与特定的模型进行绑定,而且状态也可能会受这些关联模型的影响,因而在组织场景时就需要注意。
  • 由于特效中涉及到不可缺少的Alpha混合等操作,因而需要在支持半透明的Pass中完成渲染。针对不同的引擎渲染管线,整个特效部分所处的渲染位置可能有所差别。在传统的前向渲染引擎中没有什么特别之处;在使用延迟渲染或光照的引擎结构中则需要将特效渲染置于一个前向渲染流中来完成。对于后处理特效则需要置于合适的后处理Pass中。

上述简单介绍了游戏中一些常见特效的实现,原理都比较简单实现起来也不复杂,但最重要的是将这些效果整合到编辑器中,并提供关键属性的调节接口以供美工来进行使用与设计,这样才能在游戏中得到预期的效果。当然,不管何种类型的游戏想要提高体验效果特效是很重要的一部分,除了上述还有很多,有些情况下还需要根据美工人员的需求特别设计相应的实现,这就需要对具体问题进行具体分析。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引