搜索 Unity

烟雾、镜子和滚动纹理:《TUNIC》幕后揭秘

2022年5月26日 类别 游戏 | 14 分 阅读
Cartoon fox, in a forest holding a sword and shield
Cartoon fox, in a forest holding a sword and shield
分享

Is this article helpful for you?

Thank you for your feedback!

独立开发者Andrew Shouldice(ISOMETRICORP Games)在本次Unity的GDC大会Twitch直播上与我们分享了动作冒险游戏《TUNIC》背后的开发秘辛。

《TUNIC》是一款关于探索与冒险的小故事,我们的主角:一只小狐狸,将在一个辽阔的奇幻世界里与各式各样的怪物战斗、揭开古老的秘密、找寻隐藏的宝藏。尽管《TUNIC》从《塞尔达传说》《黑暗之魂》等游戏大作那里借鉴了不少东西,但它仍旧凭借着自己的特色走出了一条独特的成功之路。游戏目前在Metacritic上收获了85分的高分,有游戏评论家更是称《TUNIC》“是一部冒险和探索的大师之作”。

该工作室的首席开发者Andrew Shouldice这次特地加入了我们的Twitch直播,与Unity的Hasan Al Salman和Unity Insider Joyce Plokker (@MinionsArt)一起,揭开了这个自15年以来开发至今的项目的幕后。你可以在本文中了解GDC直播未涵盖的关键点,或直接跳到最后观看完整的“Creator Spotlight”录播。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

围绕环境叙事

Shouldice表示:“我非常珍视老游戏所勾起的那种好奇感和探索冲动。这些游戏充满了秘密,但它们表面上并不会告诉玩家,除了游戏手册里暗含的几条线索——而手册通常又是独立于卡带的另一件艺术品。”

Shouldice希望用轻色调突出《TUNIC》的神秘气氛、引导玩家。游戏的叙事围绕着环境展开(直接在游戏中而非具体的对话来传达事件),并俏皮地致敬了游戏手册等怀旧元素。

《TUNIC》把当今几乎消失的游戏说明书搬到了游戏中,作为收集品待玩家发现。玩家可以在这些说明书上学到许多的提示和技巧,了解各个地图、敌人以及其他隐藏宝藏的线索——只要他们能够破译神秘文字并把一切拼凑起来。

“你找到的隐藏秘密可能是一次升级或一些货币,但真正的宝藏是好奇感,”Shouldice解释说,“这扇门后面有什么?那条河的另一边有什么?这就是我想唤起的感觉。”

与林克和不死灰烬一样,《TUNIC》的主角也是一言不发,但也不是完全的沉默。游戏中的大部分文字和对话都用一种难以理解的象形文字来呈现的,目的在于将玩家代入一个完全不同的异世界里。于是,玩家必须依靠自己的直觉和其他线索来搞清楚这里究竟发生了什么。这种令人耳目一新的叙事方式使得《TUNIC》的故事和世界构建 脱颖而出。

图像与视角

《TUNIC》的世界采用了明亮的简单多边形渲染而来,视角采用了等距视角。游戏的早期版本以图块、折纸般的模型为特点,有着完全扁平的纹理,Shouldice表示这些风格反映了他当时的建模水平。随着他越来越有信心,游戏的图像也不断发展,变得更加详细,如今的画面不仅能完全展现出他所设想的废土世界,同时又能忠实于最初的“低多边”美学。

从游戏设计的角度来看,等距视角是《TUNIC》隐藏许多秘密的关键。“在使用真正的正视角摄像机时,每一种元素都未经过透视收缩(foreshortening)处理,没有几何图形上的视觉把戏——我们并没有特意去追求这种效果。因为我们使用的是等距正交投影,垂直线可以一直保持完美的对齐,方便我们隐藏东西。”

Shouldice对此进行了解释:“在游戏前期,有一条瀑布的后边藏着一条隐藏的小道,你可以悄悄溜过去。如果我们采用了任何形式的FoV透视摄像机,那这条路就会变得很明显。你会看到物体在周围移动,视角的变化则会泄露这个秘密。”

使用正视摄影机带来了视角上的挑战,Shouldice必须克服这些挑战才能营造出一种规模感。“对于那些需要表现得宏大、向玩家展示远处不可触摸之物的情形,比如悬崖边上的一片巨大森林,我们需要用上一些技巧,”他揭露说,“我会用到多层摄像机。你可以在正交视角的棱形视野(平行视锥)末端粘上一块包含远处景物的视锥。”

光照与着色器

为了保证性能,Shouldice采用了动态光照全局光照(GI),并为《TUNIC》仔细计算了光照数量:“因为延迟渲染不支持正交摄像机,所以我需要特别注意以下光照数量。我用了预先计算好的GI而非点光源(Point Light)来做大部分的光照,并依靠批处理来减少绘制调用次数。”

他曾经手写过着色器,但最后决定为《TUNIC》使用Shader Forge的节点式着色器。“我当然可以写点代码,但我更偏爱视觉图形,更喜欢实时预览、在一块空间里组织想法,”Shouldice继续说道,“节点编辑器和我的大脑可谓是非常契合。它非常的灵活,非常的有趣!”

Shouldice还大量使用了滚动纹理来照亮游戏中的元素,这不仅能大大降低开发的复杂性,还能实现华丽(且性能还高)的效果。

在游戏早期,《TUNIC》的主角可以与一尊雕像互动来打开一扇金色的门,这个雕像在被触摸时会发出一阵脉冲光。Shouldice使用了几种Unity编辑器和Shader Forge的组件来实现这种效果。

最初的一片光点——我称之为“星爆”——是从三块带动画的网格变化而来,每张网格的旋转都不同步。一个甜甜圈状的“光环”会围绕在网格周围,向这个扁平圆柱体投射一张滚动的UV纹理,Shouldice把这些纹理向外滚动,形成一种环绕光。这里,UV坐标会被滚动并乘上一个因数,然后再被反转,从而创造出黑底白光效果。

Shouldice将滚动纹理应用在了几种网格上,借此来改变光的行动。在另一个例子中,他将纹理导到一个狭窄的圆锥形网格上,创造出魔法能量向天空凝聚的效果。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

“我之所以非常喜欢这种技术——将基本效果应用在专门的网格上——一个原因是,你可以通过调整UV坐标等把同样的材质以不同的方式表现出来,”Shouldice肯定说,“这里的能量射向天空的效果可以通过聚拢或分散网格上的UV来实现。”

另一个效果是在空中按照一定模式运动的光斑,光斑最后会聚焦到一点上再冲向一座雕像。这本来可以使用粒子效果或贝塞尔曲线来实现,但Shouldice回归了一个可靠的老方法,他问自己,“如果我们滚动这里的纹理会怎么样?”

在例子中,光的轨迹实际上是一条在Blender中编写和展UV的长管,经过扭曲、旋转、变形和复制。由于每条管子都有着UV,柔和的渐变彩色纹理可以在上边滚动,并借助后处理和“炫目的泛光”来掩盖可能存在的缺陷。

Shouldice在颜色选择上非常地挑剔,他想保证能量球能恰当地呈现想象中的白热化场景。他指出:“我常会选择一些色度非常高、非常饱和的颜色,我会略微降低一点饱和度,以免掩盖了其他的通道......不要只单纯地选择蓝色、红色或绿色,选择一个稍弱的颜色,降低它的色度,同时再用上一些色轮对面的颜色,这样一来你在应用HDR时,它就能‘轰’地变成白色。”

角色控制、战斗和动画

Shouldice 使用了Unity的NavMesh系统来影响敌人和玩家的行为。默认时,敌人身上的NavMesh代理将其引导到一个特定的目标地点。NavMesh会告诉敌人要前往哪里,还会与物理系统沟通,让怪物的刚体可以正确地碰撞,并且还驱动着底部以运动为基础的行为。

Shouldice同样使用了NavMesh代理来划定游戏的边界。他会查询NavMesh代理可以前往的地方,然后用参数将信息输入动画控制器,防止玩家离开NavMesh。

敌人的定向是《TUNIC》的一个重要部分,它和《黑暗之魂》一样都采用了以动画为基础的战斗。《TUNIC》的许多动画都是用Blender创建,再用Unity的动画曲线继续打磨。Shouldice希望能精细地控制某些部分,比如敌人在攻击时哪一部分会面朝着玩家,将命中盒(Hitbox)与角色模型的特定部分相连:“即便你把剑向敌人挥去,如果剑没有碰到敌人的命中盒,那它就不算接触到敌人!”

这种方法能做出更加细致的战斗机制,比如诱骗敌人互相攻击,或针对Boss的攻击间隔来练习躲闪与攻击。

Shouldice甚至创建了一个委托系统来随机化敌人与Boss对玩家不同位置的反应。躲到BOSS后面可能会触发几种特殊的攻击,比如生成小怪、喷火,或用左爪/右爪攻击。

Boss的行为代码片段:

                                         if (far) { // FOX OUT OF MELEE RANGE Mathx.Choose( delegate { cachedAnimator.SetTrigger("ACT_freem"); }, delegate { cachedAnimator.SetTrigger("ACT_deployAdds"); }, delegate { StartCoroutine(gunSequence()); }, delegate{ cachedAnimator.SetTrigger("ACT_advancingSwipe"); }, delegate{ cachedAnimator.SetTrigger("ACT_missiles"); }.); }

Mathx.Choose的应用:

    internal static void Choose(params System.Action[] paramList) { paramList[Random.Range(0, paramList.Length)] (); }

用游戏测试和QA继续打磨

优秀的游戏开发不可能凭空产生——即便你只有一个人的工作量。Shouldice寻求了几种测试游戏、收集反馈的途径。曾作为Halifax游戏开发社区活跃成员的他咨询了社区里的同行,并且参加了Stugan加速项目,与其他几名开发者在瑞典的一个小屋中共同度过了两个月。

Shouldice的发行商Finji也在孵化项目为成熟游戏上发挥了重要作用,他们提供了翔实的意见板以及QA测试支持。“如果说他们只管发布游戏,那就太轻描淡写了,”他解释说。“我们做了传统的游戏测试:站在玩家身后直接观察或记录游戏过程,但Finji最有价值的地方之一是他们有一支出类拔萃的QA团队。”

通过观看别人游戏并与Finji的QA团队合作,Shouldice完善了游戏的探索要素,让玩家能纵身跃入并迷失在《TUNIC》的怀旧世界中,又不会因为不知道下一步该去哪而感到沮丧或困惑。游戏的反响非常积极:“每当有人给我们发邮件说,'你们让我感觉像是回到了童年!'我就觉得......真棒! 这段经历对我来说非常神奇:在纸上潦草记下我希望别人感受到的东西,然后用七年把概念转变成碎片,再编译成二进制文件,接着大家就都能在屏幕的另一端感受到了它们。这感觉有点神奇。”

对有抱负的独立创新者的建议

那在《TUNIC》面世后,你的下一步是什么?

“我故意不去构思下一个项目,因为我想保持专注,”Shouldice承认道。“我可能要休息一下。就算我真的再做一个游戏,也多是做一些小游戏,可能不是商业性游戏,而是一些有文字的作品。”

在谈话的最后,Shouldice向有志于自己制作游戏的独立开发者们提供了一些建议:“别想太多直接开做,多与别人分享你的作品,并且不要怕做出烂游戏,尽快做出成品!假设你脑子里有着一排想要做的游戏,那么前100个左右都会非常糟糕。只管把它们做出来,然后搜集反馈、吸取教训,再继续前进。”

《TUNIC》现已登陆桌面端 (PC和MacOS)、Xbox Series X|S、Xbox One和Xbox Game Pass Ultimate。如果想要了解更多相关更新和开发技巧,请在Twitter上关注Andrew Shouldice (@Dicey)和@TunicGame,并观看下方的完整录播。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

2022年5月26日 类别 游戏 | 14 分 阅读

Is this article helpful for you?

Thank you for your feedback!