在杨百翰大学,每年大约会有20名学生组成团队制作一款电子游戏。去年的作品是《Beat Boxers》,刚刚于2018年夏制作完成。这款游戏在E3著名的大学游戏评选赛(College Game Competition)中拔得头筹。
每年暑期伊始,杨百翰大学都会邀请动画和计算机科学院系的学生展开头脑风暴,选出一款作品作为小组的下一个阶段项目。

学生Vanessa Palmer绘制的效果图
2017年,《Beat Boxers》成为了获得最多选票的作品。我们最初对这款游戏的核心玩法定位是,为玩家提供一个能够大放异彩的对战舞台。最终,我们把它敲定为一款格斗游戏,玩家可以选择三种招式,每种招式只要与节拍越吻合,伤害威力就越强。玩家还需要在每个节拍点上打出正确的招式,从而压制对手,有点像在玩超快版的石头剪刀布。
项目的所有参与人员,包括制作人和总监在内,全都是本科生。当初提议《Beat Boxers》的学生则成为了主程。
虚幻引擎让游戏成为了可能
《Beat Boxers》不但能让学生们享受制作游戏的乐趣,还能进一步教导他们游戏的制作原理。我们采用虚幻引擎的一个原因是,它是一款功能强大、性能稳定的引擎,可以实现专业的游戏效果。杨百翰大学的学生志在全球各地的3A级工作室,所以游戏的最终视效对我们来说很关键。我们使用虚幻引擎的另一个原因是,它在教授深层次原理时价值非凡。节点网络式的创作环境和各类高级功能为学生探索并解决难题提供了舞台。UE4的材质系统基于节点网络和程序化的工作流,而我们的学生已经习惯了这种工作模式,所以这也是其中一个原因。
在暑假期间,美术师先用UE4的蓝图功能快速完成了原型开发。他们用角色白模完成了若干轮迭代开发,并且尝试了各种舞台风格。这些帮助我们在脑海中构思出希望玩家获得的体验,并为此进行了设计。

处于白模阶段的虚幻引擎游戏《Beat Boxers》
《Beat Boxers》既是一款格斗游戏,也是一款音乐节奏类游戏,但是由于格斗游戏和音乐游戏的机制各不相同,我们必须找到合适的游戏玩法来将两种元素融为一体。蓝图系统允许我们快速创建出大量玩法各异的游戏原型。在我们用C++编写游戏玩法前,主策可以用蓝图对游戏玩法进行快速调整和扩展。

游戏的最终效果图
操控方式/游戏玩法
要在格斗游戏和节奏游戏之间找到平衡并不容易。为了避免游戏不伦不类,我们决定先开发出一款格斗游戏,然后用节奏元素进行点缀。
从游戏测试结果来看,我们认为除非游戏节奏围绕节拍本身展开,否则玩家在进攻中不太会有动力去踩准节拍。这就导致游戏的设计是:只有在遇到节拍点时才会记录并触发玩家的输入事件,你的对手同样如此。我们采用的“石头、剪刀、布”式的出招理念,既能确保游戏操控对格斗游戏新人足够友好,又能确保格斗游戏发烧友能获得足够新奇的操控体验。

判断玩家是否踩准节拍的蓝图逻辑
借助FMOD插件,我们能够至始至终在音乐的节拍点时间触发一个事件。我们通过这个事件以及若干相关计时器来控制“节拍点”窗口的开启和关闭时间。窗口范围大概是节拍点前后的十分之一秒。只有当攻击发生在“节拍点窗口”期内(取决于当前哪些计数器处于激活状态)时,该攻击才会被判定为合拍,否则就判定为不合拍。
角色设计
我们遇到的第一个挑战就是如何将音乐类别拟人化,并将其塑造成引人瞩目、个性鲜明的角色。古典乐的代表人物小提琴角色迈斯特拉是我们最先想到的角色。她由一幅概念原画发展而来,也是游戏最初的部分内容。她的出现让所有人都对游戏充满期待。经过多位美术师的构思,以及数个月的反复推敲,最终才有了我们在2018年E3展上展出的那位高挑优雅的致命杀手。虚幻引擎允许我们快速导入模型,以便测试它们与其他团队成员资源搭配使用时的效果。我们会尽早将资源导入虚幻引擎,以查看它们互相搭配后的整体效果。

原画(左)与虚幻效果图(右)。
我们还希望创造第二个角色,与迈斯特拉产生鲜明对比,又同属于一个世界背景。我们决定,一个魁梧有趣、喜欢舞台灯光的摇滚角色将会很好地与迈斯特拉的高挑产生鲜明对比,并且让游戏更加完整。他被亲切地称作里夫。相比一下子推出所有角色,我们逐个制作的方法更有价值。这样我们的角色设计团队就能集中精力解决所有角色相关的问题,然后将经验推广给下一个角色设计团队,这样各个团队就不会重复解决相同的问题。
在《Beat Boxers》中,所有角色和物品的纹理都使用Substance Painter绘制完成。迈斯特拉的琴身木质纹理完全由程序绘制。她的眉毛和金色点缀则由手绘完成。贴图从Substance Painter中以基本纹理贴图格式导出,然后再使用虚幻引擎的着色器节点网络添加菲尼尔这类额外效果。

原画和虚幻引擎实际效果图比较。
里夫和迈斯特拉在设计上都着重突出了他们所代表的音乐类型。他们的模型均用Maya和Zbrush制作完成,纹理则用Substance Painter绘制完成。迈斯特拉有37670个三角面,而里夫有29747个面。两个角色都只用到了一个UV通道。
动画
说到动画,我们希望角色看起来既像是在格斗,又有表演的成分。我们参考了很多街霸风格的游戏,以便让每个角色的招式都看起来独一无二。我们还参身临音乐会现场,探寻了交响乐的庄重优雅与摇滚乐的狂野释放的核心差异。所有这些都为我们设计迈斯特拉和里夫的招式奠定了基础。
将节奏元素引入格斗游戏极具挑战。游戏在各个层面都必须体现节拍的重要性。为了实现这点,我们为每种攻击方式创建了两种动画文件。我们引入了踩点机制和格斗强化机制,所以只要玩家的招式踩准节拍,他们的招式动作就会更强力、更炫酷。如果玩家不能踩准节拍,他们就会用另一种弱得多的招式(得分也会变少)。我们把动画文件交给了程序员,然后他们神奇般地在节点网络中将动画文件衔接在一起,以便让玩家在打出连招时做出连贯的动作,在错失节拍时磕磕巴巴。在最终的游戏版本中,玩家会感觉自己仿佛就站在舞台上——我们对这种效果非常满意。
所有招式都编写在一个状态机中,并通过特定条件,例如玩家按键输入,来判定是否要切换状态。
舞台环境
游戏中的许多人物都被设计成可灵活复用的人物。我们使用Houdini创建复杂的程序资源,并通过Houdini将它们导入到虚幻引擎中。虚幻引擎编辑器对于Houdini引擎插件的高度支持允许我们在虚幻引擎编辑器中高效搭配从各种软件导出的资源。这让美术指导变得非常容易,哪怕是会场座位和脚手架这类精细的场景部件。
光照
游戏中使用的光源数量降到了最低。每个角色都是用单独的光照通道被照亮。我们可以单独设计它们的光照并加以微调,这样就不必重新渲染其它角色或整个环境。尽管背景元素的亮度十分微弱,为了确保角色从背景中脱颖而出,我们还是降低了所有背景光源的亮度,并且添加了雾效。我们和主美一起反复调整光照效果,每次调整后他都会进行后期手绘。
这个项目在美术风格上得到了许多赞誉,这和虚幻引擎强大的美术工具密不可分。
背景观众
背景观众全部是硬件实例化的模型;人物动画通过将动画烘焙到纹理中来实现。动画可以通过着色器中的顶点偏移信息来控制。
通常情况下,每渲染一个模型,CPU都必须向GPU发送一次绘制调用指令。这样会使得GPU的很多时间在等待中白白浪费,因为还没等CPU发出下一次调用指令,GPU就已经完成绘制了。使用硬件实例化后,GPU会保存一个变换矩阵数组。只需一次绘制调用,GPU就会针对所有变换矩阵绘制模型。

我们的背景观众通过硬件实例化实现
硬件实例化的缺点是,如果计算机没有安装专门的显卡,或者资源没有添加骨架动画,动画就不会生效,背景观众就没法做出动作,或者动作看上去会像是如出一辙。
要让硬件实例化模型做出动作,需要先从动画骨架网格体开始,对它和动画进行一系列处理,然后得到一个在顶点颜色数据中存有特定数据的静态网格体、一张表示动画的纹理,以及一个复杂的着色器。

实现纹理动画的节点网络。

在动画纹理上利用颜色通道的效果。
这个过程的本质就是在每一帧内计算每个顶点与绑定位置之间的差异。你需要将这些差异保存在一张纹理中,用一根轴代表时间(或者当前帧),另一根轴则是顶点ID(你为每个顶点分配的唯一标识符)。我们为模型顶点颜色数据的RGBA通道中的所有顶点ID数值进行编码。然后,编写一个着色器将顶点ID从顶点颜色数据中解析出来。有了着色器后,通过帧与帧的间隔时间来计算出要采样的UV,然后对纹理进行采样,并计算出每个顶点要移动的距离值,并将该值输入顶点偏移中。必须确保禁用sRGB并使用最接近的纹理过滤。在将它们应用到顶点偏移之前,还要确保将顶点位移转换到世界坐标系中。将多个动画合并到一张图像中,就像使用Sprite图一样对不同动画进行取样。

用于驱动观众纹理动画的Sprite表单时间轴。
借助虚幻引擎的实例化静态网格体组件,你可以为每个实例指定一个单独的随机值,从而让人群中的每位观众都实现不同的动作。在将位置变化量转变为顶点偏移量之前你还应该将它从本地坐标系转换到世界坐标系中(尽管这可能导致比例上的问题)。你可能会发现法线出现了异样。这是因为模型仍然在采用它们作为静态网格体时使用的法线。如果出现这种问题,可以通过计算、用第二张图像保存(或同一张图像的不同部分)、改变动画过程中的法线等方法来修复。
优化
我们使用了虚幻引擎的微调选项和强大的工具来优化游戏,并让游戏看起来更出彩。除了角色和他们所处的舞台,我们关闭了所有其它对象的碰撞组件。我们还用静态光照渲染了背景资源。
我们的另一项性能优化措施就是调整观众人群中的雾效和粒子特效。最初场景中有三种雾效。由于游戏视角变化不大,我们负责优化的学生就将雾效减少到一个,并将其范围延伸到摄像机的视锥范围中。尽管从其它角度观察效果可能不是太好,但是与我们在第一次迭代中从玩家视角观察到的效果是一样的。
我们有三种母材质,它们的复杂度逐个递增。最简单的一个用在了所有人群和背景上。那个材质只有一个颜色通道。第二个用在了舞台地板和布景上。那个材质用到了颜色、粗糙度、法线、金属和环境遮挡通道。最后一个材质只用于角色,不仅包含了前面提到的所有通道,还包括着色控制、菲涅尔效果和其它一些功能。通过这样做,我们成功将所有着色器的复杂度等级控制在绿色水平。
特效
我们的动画特效全部都是用Sprite表单手绘完成的。表单随后由虚幻的级联粒子系统从左到右逐帧读取,以便作为2D动画在游戏中播放,并且会与玩家的攻击和动作完美契合。这种流程允许我们规划并计划特效图形、节奏,并且将特效融入到我们需要的外观风格中。然后,通过在动画中加入火花、光效和打斗效果,我们的特效得以更加自然地与游戏的3D风格融为一体。最终成效比一般的3D特效更加具有风格,有点类似于《龙珠斗士Z》和《罪恶装备Xrd》等游戏。我们会根据玩家是否踩准节拍来改变特效。


未踩准节拍的特效(左)和踩准节拍的特效(右)。
总结
虚幻引擎有助于我们这样的学生团队快速开发出一款具备专业外观水准的游戏,并对其进行优化,达到良好表现。它的操作界面十分友好,允许我们的美术师上传他们自己的作品,也能提供足够丰富的功能帮助我们的程序员自定义游戏玩法并获得我们想要的体验。正因如此,我们才能快速完成快速开发和润色,而这也恰恰是我们能为E3大学游戏竞赛做足准备的关键原因之一。团队中的每个人都很高兴能有机会参加加州的E3游戏展,并与我们的同行进行交流,参观3A游戏工作室的作品。我们也为《Beat Boxers》赢得2018大学竞赛感到荣幸。正是源于团队中每一位程序员、建模师、纹理美术师、原画设计师、游戏玩法设计师和游戏逻辑设计师的通力合作,我们才能创造出满意的效果。我们希望你也会爱上这款游戏。这款游戏已经在Steam平台免费发布。
主创人员
总监 - David Burnham
制作人 - Jessica Runyan
主策 - Mike Towne
美术总监 - Vanessa Palmer
音乐 - Alastair Scheuermann、Jarrett Davis
声效 - Jared Richardson、Dallin Frank
其他制作人员 (下列学生分别在游戏制作中承担了各项不同职责):
Sydney Adams
Dyanara Banana
Paige Caldwell
Andrea Davila
Jessica Davila
Derrick Drysdale
Wyatt Earnshaw
Jedi Lion
Shannon Lyman
Connor Mathewson
Calvin McMurray
Brenna Oldroyd
Do Park
Parin Phurisat
Laura Porter
Alexa Poulton
Andrew Rios
Patrick Spencer
Jordan Stewart
Nate Swinney
Sarah Tippets
Jenessa Welker
Wei Wong