编者按 几个大学生组成一个团队,在48小时内开发了一款赛博朋克风格的,以叙事为主的互动电影型游戏:《MOOD》。团队中的TA,MaxwellGeng在本文主要分享了团队在画面表现方面的经验及技巧。
本文内容由知乎专栏“Unity Graphics”提供,转载需征得同意。
在《MOOD》这款游戏中,主角将以第一人称的形式,扮演一名缺少能量核心的机器人,经过一系列冒险故事最终收获到自己的能量核心。
故事的开场是一段CG,简单的展示了一下主角如何拿到能量核心,以及其生活的城市环境,随后玩家将主角与酒吧老板沟通,得到门票,进入酒吧,并破译了酒吧内的加密机器,获得了自己的核心,由于时间关系,故事非常简单无聊,因为我们基本将大部分的精力都放到了画面表现上,因此在本篇文章中,我们将着重介绍在画面的表现方面所做的工作,以及一些或小或拙劣的技巧。
我们将从4个方面详细阐述画面的渲染与制作方法,分别是:
1. 引擎与工具的选择
2. 渲染管线的准备
3. 场景制作
4. 渲染工具的使用流程
在游戏引擎上,因为对画面表现有极高的需求,我们果断的选择了Unity3D,其渲染模块的灵活性,可定制性以及运行效率,效果表现等方面与其他商业引擎相比都是远远领先的,我们在最终的Demo阶段依然能够在GTX1070上达到每秒百帧以上,这少不了引擎本身的雄厚基础。为了尽可能提高美术制作效率,我们使用完全基于物理的制作流程,因此Substance Painter,3DSMax等工具的选择也在情理之中。
负责美术开发的小伙伴希望深层的定制渲染流程,因此我们使用了自己独立研发的渲染管线MPipeline来完成渲染任务,而非引擎提供的HDRP。实际上HDRP在许多方面并没有办法满足我们的渲染需求,而MPipeline的阴影绘制性能,屏幕空间反射质量,多种光照模型的支持,巨量贴花的支持等方面均比HDRP表现更好,由于几个月之前我们才得知有这么一个活动,因此管线的开发时间也非常急促,所以有许多功能现在仍然在开发阶段,虽然是我们内部自用的管线,但是这里依然要给出下载地址(文档暂时也没能写完):
https://github.com/MaxwellGengYF/Unity-GPU-Driven-Pipeline
场景的制作是整个游戏的大头,在确定赛博朋克主题之后,我们迅速头脑风暴出赛博朋克风最显著最易被抓住的美术风格和特点,如“不分昼夜”“光污染”“持续下雨”“奇怪的交通工具”“人类与城市机械化”“高度发达的科技与老旧的城市设施鲜明对比”,所以在游戏CG一开始这种趋向就已经很明显了:
破旧的金属楼梯,霓虹灯,不停的下雨,潮湿积水的地面,整个世界被浓雾笼罩,似乎没有昼夜之分,太阳也是不正常的蓝色
充满未来感与科技感的汽车隧道,偶尔经过的悬浮车辆,闪烁的霓虹灯走进巷子中,凌乱的帮派涂鸦,寥寥几盏霓虹灯也没办法照亮角落,与外边的灯红酒绿形成鲜明的对比,这时体积散射的雾效起到了关键性作用,雾形成一层天然的色彩屏障,降低了远处霓虹灯的对比度,使玩家很容易就形成“我与那片楼是隔开的”这样的感官体验,进一步深化了赛博朋克的主题效果,即科技高度的发达与生活水平低劣的强烈对比感与隔绝感:
室内秉承了室外的渲染效果,光与暗在狭小的空间内显得对比更加强烈,美术人员刻意的调整了光照的间接漫反射参数,配合镜头后期的特效表现出了这种效果。
在进入到酒吧中,走廊上的灯带将科技感推到了极致,甚至有了一种迷幻感在其中:
最后就是室内场景了,室内场景的渲染使用蓝紫色冷色调的面光源,配合暖色调的暖光源,再目的在于引诱玩家去吧台进行互动,这是互动电影中常用的打光技巧,并没有太多奇技淫巧:
为了避免让场景太过于死黑,需要在最黑的边缘处加上一些灯带之类进行点亮最后互动特效依赖图形开发人员手撸Compute Shader完成(因为确实没做可视化编辑器):
当然,笔者作为团队中的TA,对场景设计的理解有限,更详细的内容还需要请出我们专业的美术 Lute Li进行讲解。
如果场景素材的制作是保证美术表现下限的“锦”,那渲染工具的运用则是锦上添花。因此我们将详细阐述在这款游戏中渲染工具的使用流程。MPipeline将渲染的每一部分分别提供给了美术人员,并且每一部分可拆卸可组装,能够在多人协作中合并,这些部分包括但不限于贴花,体积散射,屏幕空间反射,抗锯齿,景深,自动曝光,色彩校正等,接下来我们将逐一介绍在开发场景时是如何使用这些工具达到目的的。从截图中不难看出,大量的贴花效果被用来表现帮派涂鸦,我们将需要用到的贴花图片保存为数张Atlas,并以Render Texture的形式加载,实现了类似Virtual Texture的加载方式,这样贴花可以实现动态加载等各种奇妙需求,其操作界面对于地编人员也更加友好:在体积雾的渲染上,我们必须尝试使美术人员理解雾效物理渲染的含义,即雾的存在是没有所谓“亮度”的,相反唯一能决定雾效果的是浓度和光源的亮度,所以在制作时每一块雾效以方块的体积形状摆放在场景中。
在反射方面,我们选择使用Stochastic Screen Space Reflection,这是一种物理正确的反射,为了追求物理正确,其在高速运动的摄像头下表现的并不优秀,好在我们游戏中摄像头高速运动的情况并不太多,所以这确实是目前看来最优的选择:
对于其他类型的后处理,MPipeline兼容了Post-Processing Volume v2的设置界面,因此原生的后处理效果基本都获得了支持。
材质总是最直观表现画面质量的一点,因此我们总要在材质上完成大量的工作,使用Forward+ 渲染的材质,不仅对多光源支持良好,同样可以提供数种光照模型供美术人员选择使用,对于光照模型我们选择直接照搬Unreal Engine 4提供的4种实现,分别是Default_Lit, Clearcoat_Lit, Skin_Lit, Cloth Cotton,配合基于物理的光照单位,能够为不同种类的材质提供多样化的支持:在游戏中也可以看到一些油漆桶有明显的Clearcoat材质效果,这也是常被用在金属或大理石+油漆材质上的效果:
个人认为,这样短时间高强度的开发,是对于开发者一个很好的锻炼,俗话讲“是骡子是马拉出来遛一遛”,要在短短48小时内将游戏有模有样的开发出来,这对于程序框架,美术生产以及引擎工具链等都是一个巨大的挑战,相信未来我们可以带来比这次作品剧情更加饱满,场面更加壮观,细节更加用心的游戏!