《山海快车》游戏研发回顾:UE5引擎与Steam的完美结合

发布时间:2023-12-19 13:55:39 浏览量:212次

山海经的文本以非线性的方式描绘了一个无边无际的,静止的古代神话地理世界。山海经的世界观是一个古代世界观,在山海经里,怪物们永远不会离开自己的山海。


然而有一天,一辆无尽的列车开进了《山海经》的世界里,打破了这个神话世界的宁静。许多怪物离开了自己原本居住的山海,他们带着自己的故事,来到了这辆永恒行驶着的“山海快车”上。玩家置身于这辆列车中,将自己去发现这辆列车和怪物们背后的故事。

——山海快车 游戏概念简述

一 项目简介


《山海快车(英文名:Shan Hai Express)》是我在 柏林工业大学(TU Berlin) 的场景空间设计专业(Bühnenbild Szenischer Raum)的硕士毕业设计作品,该项目由我和插画师李紫珂 (Ise.Lee) 二人合作完成。该项目基于UE5开发,是一个基于山海经故事的互动叙事游戏,该项目的主要目的是创造一个具有高品质的视觉艺术表现力的互动作品,用新的方式,新的技术,新的叙事讲述中国传统的山海经故事。并已于2023年7月18日成功上线Steam平台,设定为免费游戏,欢迎点击此处获取。


山海快车(Shan Hai Express)的Steam页面

该项目为我和李紫珂二人合作完成。我们一起讨论确定了项目的概念,我负责从建模,材质,灯光以及在引擎中的实现的全流程,并且负责利用蓝图搭建游戏互动叙事逻辑,并且后续使用AI工具生成台词念白内容,以及在虚幻引擎中渲染制作宣传片等。李紫珂则主要负责场景的色彩设计,提供美术指导,以及创作2D的角色/场景和平面设计插画素材。


感谢该项目的两位导师 设计师Brigitte Fischer和 视觉艺术家Alona Rodeh在过程中为我们提供的指导和帮助。


本文的主要目的是记录这个游戏的制作过程。接下来,我将从视觉效果,互动叙事等方面全面地介绍这个游戏的设计和制作思路。


UE截图:火车场景1:逮捕令

UE截图,火车场景2:布匹

UE截图,火车场景3:旅行者

UE截图,零鱼

二 视觉效果的实现


美术资产制作流程:可复用性


实现高品质且性能合理的实时场景:“一辆永恒行驶着,随着玩家前进而无限生成的神秘火车”,是本项目的主要目标。然而从项目一开始,我们就面临着时间和人手的不足:必须在3个月内完成毕业作品,并且团队里只有我一个人,来负责从DCC到引擎全部的3D流程。


因此我从项目的一开始就将模块化和资产的复用性作为我设计美术资产制作流程的核心概念。通过尽可能地复用模型,贴图和着色器,我希望减少不必要的重复工作,从而尽可能地把时间花在提高项目品质上。而且建立了清晰的可复用性资产之后,也方便了后续的项目维护和更新。

模型:模块化的建模


在建模时,我采用了模块化的思路,因为模块化的思路很适合火车的场景。模块化建模的重点在于确定具体的车厢尺寸,以及设计所需的模块化组件,以确保模块化的模型在前后连接时没有问题。


模块化还体现在为同一资产创建不同的变体,例如对于椅子的模型,我创建了不同规格的一套椅子,有单排的有双排的,也有只剩下椅子底座的。增加在场景搭建时的灵活性。


本项目在部分模型上,例如椅子的部分,采用了高模雕刻烘焙低模法线的工作流。在布料建模时,也使用了Blender的布料模拟等进行建模。


该项目用到的模型均为原创,包括模块化的火车车厢;

在blender中对模型进行进行高模雕刻,后在sp中烘焙为法线贴图;

在blender中用布料模拟对场景的布料进行建模。

贴图:双UV工作流

双UV工作流在DCC工具中的流程

在贴图制作的层面上,我既希望尽可能地采用可平铺的纹理,也希望在不同的模型上有不同的边缘破损,积灰等基于模型的定制化效果。因此我决定采用双UV的贴图制作方式(Second UV Workflow),即为一个模型展两套不同的UV,模型的第一套UV用来显示可平铺的主要纹理,第二套UV用来显示定制化的边缘破损,脏迹效果。以达到“复用但不重复”的效果。


在展UV的思路上,第一套UV由于会被应用于不同的材质通道(Material Slot)上,所以我让不同的材质通道之间的UV在UV空间中上下排开,以尽可能的充分利用UV空间,达到最好的分辨率。而在第二套用于烘焙脏迹,破损效果的UV,我则避免了UV的重叠。


这套双UV的工作流,让后续在引擎中进一步调整颜色,贴图,脏迹等效果时有了更大的灵活度,方便在引擎中更准确地调整不同模型的颜色,有利于对整体效果的把控。也能有效地减少所需的贴图数量和母材质数量,更好地优化性能。


第一UV:用于可平铺的贴图,根据不同材质上下排开;

第二UV,用于定制的脏迹蒙版图,排列在一个UV空间中。

我希望后续在虚幻引擎中直接在场景里通过顶点绘制进行材质混合,打破由模块化建模带来的重复感。所以我在Quixel Mixer中为同一个材料设计了不同状态的PBR材质贴图,用于第一套UV:例如掉漆前后的木地板,生锈前后的铁等,以供后续在引擎中进行顶点绘制材质混合。


第二套UV用于显示定制化的边缘破损,脏迹,这部分我在Substance Painter中制作了三个不同的破损智能材质,用来生成三张不同的边缘破损/污渍的 黑白图。然后将不同的模型分别在Substance Painter中进行烘焙后,将三张黑白图分别打包到一张RGB图中,导出一张专门用于特定模型的第二UV图。这些破损脏迹也在后续的材质编写中,结合顶点绘制使用。



用Quixel Mixer制作掉漆前/后的木板,


在Substance Painter中制作三种不同的脏迹蒙版打包在同一张RGB图中,用于第二UV。

材质:顶点绘制与可替换的Second UV


接下来就是在虚幻引擎中开始编写所需的材质,编写时候的目标仍然是以“可复用性”为目标,尽可能使用主材质和材质实例,减少重复的主材质编写。


由于“山海快车”总体是一个复古的火车场景,所以场景中会有大量的不同的木板,例如屋顶板,地板,不同颜色的墙板,甚至包括火车的座椅也是木板的材质。在这部分我的思路是创建一个“万用的”木板的主材质,然后通过一些可变参数,如颜色,可替换的Second UV贴图等将材质实例运用于不同的木板上。



我编写的“万用木材”主材质的材质蓝图。


“万用木材”的材质实例,图中标识位置可替换为不同模型的第二UV脏迹贴图。


项目场景中绝大部分的材质都是自三个主材质的材质实例。

我运用了材质函数来打包在主材质中需要进行混合的不同材质,以万用木板材质为例,这里使用了三个材质函数来整理不同的PBR材质,这里分别是上了漆的木板,掉漆的木板和灰尘材质。


在材质的编写中,我运用了“顶点绘制+HeightLerp”的思路:在这个材质中我在两个地方使用了顶点绘制:第一处是通过顶点绘制来混合不同的材质函数,例如木板案例中混合的是上了漆的新模板和掉漆后的老木板,混合的时候使用木板本身的高度图作为HeightLerp,让混合显得更自然。第二个使用了顶点绘制的地方则是将顶点绘制的颜色作为显示边缘破损,灰尘材质的蒙版图。这样在后续可以通过顶点绘制让场景中的不同模型显现出不同的脏迹和不同的掉色效果。


完成了主材质的编写后,根据不同木板的颜色,反光度以及不同模型单独烘焙的第二UV脏迹贴图,在相应的材质实例中进一步制作为有着不同颜色和不同脏迹磨损的木板效果。


除了木板材质以外,其他材质也运用了类似的思路。例如场景中所有不同颜色的铁材质也都是基于同一个主材质的材质实例。另外,场景中还有一些其他的材质,我也尽量贯彻了可复用的思路。


一个自动生成海报不同老旧破损效果的材质。

场景搭建:顶点绘制与物理模拟


在场景搭建的部分,主要的工作是摆放好模块化的模型,并且对场景进行顶点绘制,混合出理想的材质效果。并且在场景里对颜色进行统一的调整。在效果确定后,将场景元素打包为一个火车车厢蓝图,供后续编写交互时使用。


在搭建不同车厢时,也根据不同场景设计的需要,使用了不同的技术,例如利用物理模拟进行行李箱的堆叠,和布料模拟等。

确定好的场景打包放进火车的子蓝图中。

灯光与后处理:复古色调


在灯光的设计部分,我选择使用UE5的Lumen系统,完全使用可移动光源,以配合一些移动灯光效果的设计。并且默认开启了Hardware Raytracing,包括Hardware Raytracing的阴影,以力求达到最佳视觉效果。针对本项目的特点:一个根据玩家的前进实时生成的无限火车。我设计了两套灯光系统,一套是火车内部的灯光蓝图,该灯光蓝图包含两个矩形灯和一个室内补光用管状的点光源。该蓝图会随着运行时车厢蓝图同时生成或者删除。


除了灯光蓝图外,还有关卡内的天光,指数高度雾和方向性光源,这套系统由一个不断循环的Sequencer控制,模拟日光角度的变化。这里对于方向性光影(Directional Light)有一个特殊的处理:关闭了项目默认光追阴影,设定为Lumen默认阴影,这样可以得到清晰的光影效果。


在后处理体积部分除了调色以外主要增加了一些视效例如暗角,以及使用了一个电影用的LUT进行调色,并且控制了玩家相机的EV曝光值。目标是达到一种柔和,复古的视觉效果。


仅光照的场景效果。


在项目设置的光照部分设置。


上方为场景中的灯光,下方为在蓝图中的灯光,图中标注了对平行光的特殊处理。


后处理效果对比。


后处理调整的参数。

动画设计:简单直接


在怪物和窗外绘画风格风景的部分则采用了比较简单直接的呈现方式,怪物部分我将插画师提供的2D怪物插画在blender中制作了简易的片状骨骼动画,这样制作比较简单,又能够保留插画师作品的原作感。然后导入虚幻引擎中,以透明材质的形式进行使用。


窗外景色部分则采用了一个简单的Panner节点持续移动插画师提供的二方连续风景图。营造火车不断前进的感觉。场景灯笼的部分也采用了类似的简单直接的骨骼动画。




灯的摆动部分,使用了copy rotation的骨骼动画。

窗外景色运动效果由插画师提供的二方连续贴图Panner而成。

三 交互叙事的实现


蓝图交互逻辑


本项目的交互逻辑比较简单:玩家可以在无穷无尽的山海快车中探索,过程中会遇到不同怪物,听到他们各自的故事。所有的交互逻辑完全用蓝图实现。


在蓝图交互的编写上,完全采用类蓝图进行编写,并且采用了父蓝图和子蓝图的模式,即在父蓝图中编写主要功能,然后制作几个略有不同的子蓝图公用同一个父蓝图的功能逻辑,这样便于维护,以下为蓝图交互逻辑的简单流程图:


游戏中主要有三个主要的父蓝图类,分别是火车,怪物和叙述者蓝图:


火车类蓝图用于控制火车的生成与销毁,车门关闭,以及实现车厢的转向,颠簸效果。
怪物蓝图用于控制怪物的渐入渐出,生成和销毁。
叙述者蓝图一直用于控制旁白声音的播放和切换,和选取下一节生成的车厢。
玩家蓝图则是一个第一人称视角。

其中,火车蓝图和怪物蓝图会随着流程的进行不断生成和销毁,实时地消除看不见的模型,优化性能。叙述者蓝图本身不包含模型和贴图,只有蓝图功能,所以一直在场景中方便实时监测游戏状态的改变,播放对应的声音,以及进行一些相关运算。



“叙述者”主蓝图。

“火车”主蓝图,只包含蓝图功能,模型均在子蓝图中。


”怪物“主蓝图,只包含蓝图功能,模型均在子蓝图中。

UI界面的设计


完成了交互的部分后,在UE自带的Widget组件中完成了简单的游戏UI的部分,做了开场睁眼的动画效果,模拟玩家在火车中醒来。以及游戏的退出菜单和游戏背景的介绍部分。



游戏开场的睁眼效果UI,在PS中制作了PNG眼形状图,后在UI蓝图里进行了动画变形。

游戏简单的UI界面,两个页面有不同的透明度。

AI赋能的内容生产


玩家在游戏的过程中,会一直听到一个戏剧腔调的男低音在叙述关于玩家在山海快车上的境遇,遇到的怪物的故事。这部分的文本和念白声音是我们在AI助力下完成的。文本部分,由于山海经的文本本身就言简意赅,给了我们更大的发挥空间。


我们将怪物在山海经中的原文中提取出各自角色的关键信息,例如:怪物“类”的关键信息是,它因为据说吃了它的肉,能够摆脱嫉妒,所以我们设定的关键信息就是“它是一只正在逃离追捕的猎物”加上我们对于目标文本的要求:例如“戏剧感”,“在无尽的列车上”“以第二人称为主语”之类的要求,一起输入GPT后经过多次调试确定我们需要的最终故事文本。


最后将得到的故事文本输入AI文字转语音网站Uberduck,选取了一个有戏剧感的男低音,并在后期软件中调整配乐而成。


在GPT中根据要求生成的关于“零鱼”的文本,平面设计:李紫珂

四 发布 分享与展览


视频渲染的设置,因为毕设的时间紧张,使用了TSR抗锯齿方式渲染。

在主要场景和互动制作完成后,我在虚幻引擎中的MovieRenderQueue 渲染了预告片的视频,导出格式为exr的图片序列,后期在Premiere中进行了剪辑和合成。毕设答辩完成后,我整理了项目文件,后打包了成可执行文件,在不同展览,分享现场供观众体验。并且在steam上完成了上线。


项目完成后该项目参与了不同的展览,分享,旨在让不同背景的观众体验该作品,提供反馈,和跨文化交流。该项目6月17日参与在德国柏林举办的毕业展“Open Master Exhibition”,让不同国家的观众透过《山海快车》更加了解中国文化。并在7月份在福建晋江经验馆举办了线下分享会等。


德国柏林展览现场。


晋江经验馆分享现场。

热门课程推荐

热门资讯

请绑定手机号

x

微信扫码在线答疑

扫码领福利1V1在线答疑

点击咨询
添加老师微信,马上领取免费课程资源

1. 打开微信扫一扫,扫描左侧二维码

2. 添加老师微信,马上领取免费课程资源

同学您好!

您已成功报名0元试学活动,老师会在第一时间与您取得联系,请保持电话畅通!
确定