《失落之魂》制作人杨冰分享:如何制作动作类游戏战斗效果

来自 游戏葡萄 2018-05-30
深度

[ 游戏葡萄原创专稿,未经允许请勿转载 ]

《失落之魂》制作人杨冰分享:如何制作动作类游戏战斗效果

自demo视频放出之后,《失落之魂》(Lost Soul Aside)就因为其精美的画面、流畅的实时战斗系统等内容获得了大量国内外媒体和玩家的关注,并在不久之后得到了索尼互娱“中国之星”计划的支持。

1.png

5月24日,在虚幻引擎技术开放会第二天上,《失落之魂》制作人杨冰向业界分享了该游戏中战斗效果的制作经验。其中主要提到了刀光,打击效果和残影效果的制作方法。

以下演讲内容经游戏葡萄整理:

2.png

大家好,很感谢Epic Games的邀请,这次主要是讲我们用到的一些特效,以及如何表现战斗方面的一些效果。还会讲一些关于用到我之前在一些论坛上还有很多人提出过的,关于刀光,打击效果、残影效果怎么做的问题

image3.gif

这是我们演示的一个简单的剪辑,把里面实现的战斗效果放在了一起,可能有的大家有的之前见过,就是我们PSX演示里面用到的残影、打击的效果,粒子、屏幕振动。稍后我会把实现里面效果的制作经验分享给大家。

3.png

先讲我们会用到的一些刀光。左边是我们2016年当时我还一个人在制作这个游戏的时候的一些特效,当时很多媒体视频上评论,还有玩家当时反馈,我们的色彩太蓝了,整体上有点炸眼睛,后来我们在不断的迭代过程中,后边在整个的特效的这些表现中,把整个色彩还有一些透明度做了一些调整,让它不会抢整个画面的主体。右边这个就是我们现在的版本,虽然也还在继续进行迭代,但是比最早的2016年的刀光效果已经平和很多。

4.png

从右边的视频里大家可以看到,我们现在的整体刀光里,有两种类型的刀光,一种是用Unreal自带的粒子系统里面I Anim Trail动画的效果,动画里面有两个骨骼,把骨骼绑在一个起点和终点,在下面的Notify里面控制开始和结束的时间。

在Unreal的演示里面,我是用蓝图来实现的,为了让速度变快,我们都是用自带的notify来实现。我个人觉得比较重要的,是刚刚这个里面蓝色的框子里的折射效果。5.png

其实我们当时也研究比较了一些游戏的刀光实现,重点是刀光挥过去,尾端要有折射效果,同时还有刀光和空气的比较好地融合,这个时候里面对应的折射的节点就比较重要。所以我们用的就是大家看到的最左边的图,其实我们Particle Color里面有一个Alpha,我们用Alpha控制了整个折射,其实折射这里,1就是空气的折射,这边有一个参数,就是用RefrMax控制折射的部分和空气融合的部分,当刀光的尾部就是应该和空气结合到一起,我们就把它的数值会更偏向于1的点,这样就和空气融合到一起,同时我们还用了notifies来控制刀光折射的噪波。6.png

另外我们在动画还有一些发现,因为动画有些帧数非常少这个时候如果想要一些比较类似于圆形的刀光就很难,这个缺点完全是和动画绑定的,如果动画没有到那个地方,这个地方就没办法有刀光。比如说这个动画可能有4-5帧,这个时候刀光的拖尾就很难控制,所以我们在一些动画中做了一个假的刀光。这个做法的好处是,可以在假的刀光里加一些类似于GPU partile的东西。这就只是一个简单的mesh,在这个mesh上面做了一些材质的变化,同时用这个里面的mesh data控制旋转播放,给GPU的粒子加一些辅助,让刀光有更多的变化。

7.png

同时最右边这个是一个控制刀光旋转的一个Rotation Rate。我们研究了一些其他的动作游戏之后,发现尼尔里面的刀光90%以上都是用这个方法实现的。

9.png

我看到他们做过的有意思的现象,刀光甩出去没有马上消失,在消失之前速度会减慢,会停留一段时间,表现出空间被割裂后再慢慢恢复到正常的这种扭曲的感觉,这个其实用最右边的Rot rate到0.8的时候就变成零了,这个过程中阿尔法仍然还在慢慢的从1-0这个过程还在慢慢的消失。

10.png

下一个讲到打击效果的实现。

image11.gif

可能有点血腥,因为我们在做的主角的武器是一些类似于水晶的物质组合而成的,它更偏向于一种钝器,有一些碎片,武器的音效也是类似于钝器的感觉。

11.png

讲一下打击效果的组合。

第一个就是一个电火花的贴图,做了一些大小上的变化;第二个大家看到的是有点类似于白色的圈,其实这是一个加了折射的贴图,他打的时候会有一种空间折射的感觉,和一种表现气流爆开的感觉来强化打击效果;第三个就是用了一个序列图来表现血液喷溅的效果;最后一个大家看有点像花瓣的感觉,当时做的时候发现比较难表现出我刚刚讲的用盾器打击的感觉,少一些颗粒感,就加了一些血液凝固成的片崩开的表现,使它整体看起来有钝器打击的感觉。

12.png

另外,当别人死亡的时候,我们做了一个爆开的特效。整个敌人的难度对于新上手的玩家可能有点难,这个时候在被敌人打或者受到挫折之后,把敌人击杀掉的快感就需要爆发式的体验。我们为了强化这个体验,把怪物死亡特效做的非常夸张。这个参考了一些游戏怪物死亡的特效,也就是整个瞬间爆开的元素。为了实现这些东西,我们的主要元素和刚刚我讲过的打击特效其实大体上是一致的,同时多加了一个爆开的感觉。当时做这个,我一共用了两个mesh,一个mesh加了一些类似于血肉的材质,然后爆开;我们另外用了一个特效,相当于会追着这个粒子系统的另外一个组件,肉块掉下去的时候会拖一个丝绸的带子出来,这个是类似于血的效果,这样就形成了血肉飞溅的感觉;还加了一些GPU的粒子,加这个粒子是因为我发现在血里面想表现一些高光效果比较困难,之前研究过,想做类似于血爆开上面有高光的,相对技术能力还有问题,没能实现出那个效果,就加了一些用GPU颜色比较浅的部分,和血一起爆开的时候会让血里面有一些感觉上会有一些比较亮的部分,充当了液体高光的作用。

13‘2.png

第四个其实是一个碎块,因为我们的怪物有一些类似于甲壳的东西,在怪物爆开的时候会有黑色的碎片爆开,也是为了强化这个感觉。最右边上面有一个烟雾状的东西,其实是想塑造一些血雾。这个是我刚刚提到的折射效果,下面的动图里面爆开那一刻有一种瞬间膨胀的感觉,也是为了塑造爆炸的感觉。

14.png

这其实是很重要的效果,后处理实现了当一些比较重击,或者怪物爆炸效果的时候,让他有一个中间皮肤的Radial blur的效果。大家可能在很多以前的电影或者游戏里面经常见这种效果,怪物吼叫或者有爆炸的时候,会有中心往外发散的动态模糊。我们刚刚的怪物爆炸的时候,会附加一个模糊效果来让它表现得更夸张一点。

15.png

这个效果就是,在PostProcess里面加了一个材质,我们当时在论坛上找到了一个后处理中做这种效果的帖子,里面就提到如何用HLSL实现屏幕的效果。我们对它进行了一些修改,让它可以控制这个效果触发模糊提供顶点的位置。还有用蓝图控制,右边红色的框里面有一个RadiusBlur的变量,它的作用就是在蓝图里面可以调用它,从蓝图里零改成一的时候,就有中性模糊,一改成零的时候就消失了。最左边是一个后期处理的Volume的图,这个是需要用在我们的整个场景里面,或者要加到角色的后期处理上。

16.png

这个是HLSL的一些代码,如果大家想实现类似的效果,可以把这个代码丢进去。

17.png

我看到有一些开发者问到,这种残影是怎么制作的,我们这个残影也迭代过很多次。最早是一些类似于纯发光的效果,后来加了GPU粒子觉得还是有一点炸,到又回到了有一些残影拖尾的效果。

18.png

我们用到了一个插件GhostMesh。用这个插件的作用是,主角蓝图里面的一个mesh可以拿出来,在这个时候做一个Mesh就可以获取到你当前角色的那一帧动画的数据。

image20.gif

这个残影里面,最右边是我们用到了我们的主角的低面模型作为Ghost,来做我们残影效果。因为大家可以看到刚刚的动图里面,角色快速移动的时候,再加上一些类似动态模糊,整体效果是模糊掉的,所以这个时候面模效率也不会特别差。还有自发光的材质,在一定角度角色的上一个如果是球只有半个表面会自发光,下面是黑的,几个残影重叠起来就会比较好看。

19.png

然后就是一些其他的素质效果。包括刚刚我讲过的例子系统,这一种其实都是辅助的东西。

20.png

刚刚大家可能发现了,击杀敌人的时候会有屏幕振动,那个时候手柄也会振。我去年也大概地讲了一点,实现比较简单,都是在蓝图里面。Unreal也提供了很多直接的接口出来,基本上直接驱动就可以了。

21.png

这个顿帧做法比较多,比较科学的做法,应该是用里面一个可以单独控制一个acter的系统,下面有一个Set Global Time Dilation的节点,设置成0.5的时候,整个游戏的系统时间就会变成原来的一半。下面Dilation是我们把整个东西做了一个Macro,这个蓝图里面没有办法加时间之类的东西,我们只能写一个Macro,大家可以看到暴露出来的变量,这个点需要变慢多少倍,变慢需要持续多久,都暴露在这个Macro里面,我们实现的效果就是想让他有一个当主角打到怪物的时候我们想让他有一个时间变慢的顿帧的效果,后面有一个0.5处理,其实是让它在delay之后再有一个时间加快的效果。这个时候当这个顿帧结束的时候我们又有一个比较短的时间让时间加快,来表现武器砍到物体上面会被阻拦一下,切开的一瞬间之前积累的力道会整个发泄出来,这个时候就会有一个加快的效果。

22.png

手柄力反馈也是Unreal提供了一个直接的接口,Client Play Force Feedback,一个填变量的,我们创建出来就会看到,下面可以调节手柄振动的频率。刚开始的时候振的比较重,然后慢慢衰减。

23.png

屏幕振动其实就像手柄振动一样,Unreal里面有一个直接的接口暴露,参数大家看字面上的意思就能明白,也像刚刚的力反馈一样,需要自己建一个相机振动,竖着振动就可以实现。Unreal里面因为提供了这些技术,相对来说会比较简单。今天的介绍就是这些,谢谢大家!


文章评论
游戏葡萄订阅号