一 项目简介
《山海快车(英文名: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脏迹贴图,在相应的材质实例中进一步制作为有着不同颜色和不同脏迹磨损的木板效果。
除了木板材质以外,其他材质也运用了类似的思路。例如场景中所有不同颜色的铁材质也都是基于同一个主材质的材质实例。另外,场景中还有一些其他的材质,我也尽量贯彻了可复用的思路。

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