UE4中的游戏开发、着色器和动画
介绍
我们是Afterburner Studios,总部位于旧金山(和安大略)。我们是三个开发人员和一个作曲家。
Paul Svoboda负责处理所有环境和角色。他之前曾在Epic、Crystal和Outpost担任环境艺术家,可以在这里找到他非常古老和过时的作品集。罗伯特泰勒处理所有工程。他最近领导多人社交生存游戏 SOS 的工程工作,之前曾在Zynga从事休闲游戏工作,包括FarmVille 2。
Ian Cofino负责设计、动画、VFX 和 UI。他是一名设计师,尽管他的大部分经验都在视觉艺术领域。他开始从事图形和动作设计以及电影工作,然后转入游戏领域,在NBA2K和 Outpost Games 的Visual Concepts 工作。
我们也很早就把Dale North带进来了,因为我们喜欢他的作品。戴尔,如果你不熟悉他,他有无数奇妙的项目在他工作过,但他最出名的可能是他作为传奇巫师原声带作曲家的出色工作。
在我们离开之前在 Outpost Games 认识的工作后,Rob 提出了制作我们自己的头衔的想法。我们最初计划的游戏范围要小得多,但在共同合作 3 个月创建初始原型后,我们看到了尝试真正尝试制作成熟、高质量的独立游戏的潜力。然后我们三个人创立了 Afterburner Studios。
追梦人
Dreamscaper是一款具有情感核心的动作 RPG Roguelite。
我们讲述了卡西迪的故事,她是一个清醒的梦想家,她每天的挣扎都体现在她的梦想中。作为一名玩家,当您探索她生活中的不同时刻时,您会遇到她的噩梦。
每一个睡眠都是一个不同的“地牢”,每一个梦想都是对卡西迪潜意识的更深层次的探索。
由于这是我们的第一个独立游戏,我们面临的许多最大挑战都来自于学习开办工作室:组建我们的公司,学习推广我们的工作,承担一百万种不同的任务,这些任务不在我们的驾驶范围内,但对整个过程至关重要.
一开始我们就想到了小说。我们知道我们想讲述一个真正个人的故事,并使用做梦作为一种分层潜台词的方式,避免传统动作片中的许多叙事不和谐。
我们从我们同时代的许多人身上寻找灵感,比如《战神》、《死亡细胞》、《以撒的结合》 ——这个名单不胜枚举,因为那里有很多令人惊叹的游戏。
游戏原型
除了梦幻小说,我们也知道我们想制作一个流氓头衔。我们喜欢该类型中内置的挑战和进步,因此我们想对它进行自己的处理。
我们从核心机制开始,它越来越多地进入 ARPG 领域。开始是探索我们认为适合游戏环境的事物类型以及我们对哪些类型的机制感到兴奋的过程。我们在前三个月专注于构建游戏玩法的“垂直切片”,因此我们会很好地理解这是否值得进一步研究。我们专注于战斗、掠夺和探索等核心机制,并在当时尽我们所能充实游戏的感觉和美感,以创建一个“完整”的关卡。
在我们完成了这个早期的演示之后,我们将它发送给了一些亲密的朋友和同事,并利用他们的反馈推动了一些设计决策。我们非常密切地遵循这个模型,并与我们的社区进行定期测试,这是改进游戏的关键部分。
Dreamscaper 是在虚幻引擎 4 中构建的。我们之前都在 UE4 工作过(Paul 甚至在 Epic 工作过一段时间),所以过渡非常顺利。拥有一个稳固的框架来将游戏置于最上面是非常有帮助的。
世界大厦
我们的关卡混合了静态/烘焙元素和动态/程序元素。我们通常首先为每个阶段制作一个“故事”关卡。这些都是手工制作的,重点是通过视觉叙事创造一个有趣的构图。由于我们的游戏分为两半,后半部分发生在超现实的噩梦中,因此我们希望让开头更加贴近现实。标志和小的人类元素(垃圾桶、邮箱等)有助于销售这些空间,营造出规模感和生活感。创建故事空间后,我们可以重用道具来创建我们的程序战斗空间。
- 艺术风格/外观开发/流程
在项目的早期,当我们制作外观原型时,我们确定了一种整体风格——简化的现实主义。这将使我们能够创造出感觉扎实的空间,同时又缺乏完全具有代表性的元素的复杂性——这对于能够尽早对空间进行原型设计至关重要。
我们想传达梦想的“感觉”——柔软、朦胧、半被遗忘。“半完成”的概念艺术和印象派绘画,艺术家的手仍然可见,部分未完成,世界在雾和光中消退,实现了这一点。
虽然我们的语气截然不同,但我们也看了 Beksinski 的作品。我们受到许多使他的画如此有趣的元素的启发——柔和的灯光、带有轻微纹理变化的颜色渐变、后退成雾的形状。我们使用这些图案作为指导来建立我们的整体外观。
我们首先构建了一个主着色器,它将用于角色/可交互之外的所有内容。为了实现柔和的淡入淡出,我们使用蒙版不透明度并依赖 UE4 的 DitheredTemporalAA。有了这个,我们可以伪造柔和的不透明度,同时保持准确的照明并保持着色器优化。我们对“软”玩家遮挡使用相同的技术:
- 用单一纹理创建一个世界
我们知道我们将使用烘焙照明来实现我们世界中的柔和阴影,并希望有一种方法来消除 UV 和纹理所花费的时间,以便我们可以专注于建模、照明和布局。
UE4 允许您在材质中访问生成的环境光遮蔽遮罩。我们决定用它来定义颜色区域。为了实现“绘画般”的未完成外观,我们创建了一个笔触纹理,该纹理投射到世界空间中,然后从 PrecomputedLightmassAO 中减去,为我们提供了一个“绘画般”的蒙版来定义每个模型的颜色区域。我们重用相同的纹理来添加颜色变化并通过着色器应用其他效果,包括水波纹/运动,为世界的柔和淡入淡出添加一些纹理变化等。这是世界中唯一存在的纹理(除了粒子特效和草)。这也让我们的着色器得到优化,让我们有一些自由来做其他更复杂的过渡和效果
- 瀑布
瀑布是一个简化版本,灵感来自Simon Schriebt在这个伟大的 VFX 演讲中所做的工作。
我们重用相同的笔触纹理,沿着一个简单的网格垂直平移,并从垂直渐变中减去它。UE4 的抖动不透明度完成了剩下的工作。
网格
创建没有典型漫反射/粗糙度/法线贴图的网格是一个学习过程。所有细节都必须建模,我们依靠操纵顶点法线来定义硬边/形状。我们尝试将对象简化为具有轮廓效果的大型形状和中等细节。一般经验法则:如果它可以投射可见阴影,请将其构建到模型中。Polycounts 可能会有所不同,但通常小道具是 Modo。
褪色的现实效果
我们很早就知道我们想要创造一种效果,让世界消失,梦想在你周围“绘画”。
我们也知道在创建 Rogue 风格的游戏时,玩家会死很多,这意味着加载很多。我们想尽可能地隐藏这一点,同时虚构并创造一个视觉上引人入胜的序列,让玩家一遍又一遍地玩。
伊恩在 Cinema 4D 中做了一些很早(非常粗略)的预可视化,只是为了让这个想法浮出水面。我们最终非常喜欢这个想法,以至于它成为了运动和关卡过渡主题样式的核心部分。
在我们的主着色器中,Paul 创建了一个 Soft Edge 效果来淡出边缘的世界。这是通过从球体蒙版中减去笔触纹理来完成的。
通过在半径的两个值之间添加一个 lerp,保罗创建了一种淡入/淡出级别的方法。
然后可以使用全局参数来设置门户过渡的球面遮罩的位置。
我们非常依赖 UE4 的音序器来为我们提供创建这种无缝加载所需的灵活性。转换由三个序列组成:
- 介绍 – 掉进床上。
- 循环——穿过黑色的梦想空间,我们需要可变长度来适应较慢机器上的加载时间。
- Outro – 在新的梦想中着陆,因为它在角色周围实现。
为了在视觉上做到这一点,我们首先需要使用动画全局材质参数擦除世界。这些材质参数与世界蒙版相关联,因此更改一个值将消除或消除场景中的所有材质。
在后台,Rob 做了很多繁重的工作来构建系统,这些系统将利用 Unreal 的关卡流技术来支持我们的程序生成。在这里,您可以看到在关卡生成期间 Dreamfall 序列播放时在后台发生的加载。
目标是让游戏和渲染线程可用于运行所需的序列和效果,让我们创建您在此处看到的内容。
这是我们工作中最具技术挑战性和协作性的作品之一。为了达到我们想要的效果,我们所有人都需要交付大量零件。
视觉特效
通常,VFX 是临时完成的。一开始,我们花了一些时间尝试不同的风格,直到我们找到了更重粒子、空灵的氛围。VFX 样式的大部分来源是通过 Paul 建立的世界。
拥有强大的视觉试金石有助于为游戏的其他视觉元素提供信息,例如 VFX 和 UI。
但最终我们并没有花太多时间在一开始就让 VFX 造型完美。作为一个试图尽快工作的小团队,我们没有太多时间来预先加载 VFX 的可视化过程。相反,我们反复研究它,并随着游戏的发展不断更新和调整样式。
话虽如此,可以说,有一些核心支柱可以帮助我们指导整个过程的方向。例如,我们知道我们希望 VFX 流行,因为让游戏感觉真正令人满意很重要,而 VFX 是其中的重要组成部分。我们也知道我们希望它符合世界的梦幻、更飘逸的风格,所以需要在那里做一些平衡。
我们大量使用 UV 失真、透明度和更小、更柔软的粒子来帮助定义一种感觉超凡脱俗的风格。
灯光
照明是一个相对简单的过程,但对我们的程序级别有一些警告。
我们希望我们的阴影是柔和的和环境的,并且物体在世界中感觉扎根。UE4 使这变得非常容易。使用带有区域阴影的定向光为我们提供了柔和的漫反射阴影。
由于我们对每个关卡的所有“背景”元素使用烘焙照明,然后将动态对象放置在顶部,因此我们需要一种方法来使烘焙和未烘焙元素在视觉上保持相似——每个对象都需要投射环境阴影并影响底层材料的颜色。
我们创建了一个 64×64 的 RenderTarget 纹理,在进入关卡时进行更新。此纹理是通道打包的,每个通道都以独特的方式影响材质。我们使用具有由渲染目标捕获的自发光颜色 (R/G/B) 的原始形状。当它们被放置在世界中并添加到主材质中的环境光遮蔽和预计算AOMask时,它们会与我们的动态网格配对。这是在动态和静态对象之间保持视觉一致性的一种廉价方式。
由于我们有 2 个其他颜色通道可供使用,我们可以使用它来构建各种其他效果:
角色动画
Ian:我最近写了一篇关于我的动画制作过程的帖子,你可以在这里找到。
简而言之:我们从移动的设计开始。意图是什么?它有什么游戏意义?这如何转化为动画?这个特定的角色会如何行动?
在充实之后,我为更复杂的动画捕获了自己的参考,然后在Maya中将该参考视频处理为关键帧。然后引入并调整动画,使其适合移动/武器/交互等的设计。
由于我们是一个三人操作,分布相当稀薄,因此需要在质量和时间之间进行权衡。我试图现实地创造一些让玩家感觉良好并且不需要太长时间执行的东西。
在引擎中,我们使用 UE4 的蒙太奇系统和一些自定义蒙太奇来确定大部分游戏玩法,例如主动命中窗口或玩家攻击后可以恢复的时间。
如您所见,我们有一些不同的通知和窗口:
- 枢。确定玩家何时可以旋转角色。
- 组合机会。确定将在其中注册另一个按钮按下以触发下一个组合移动的窗口。
- 组合触发器。如果在 ComboOpportunity 窗口中按下按钮,则下一次组合移动开始的最早时间。
- 奖金机会。当 0.15 秒的离散窗口开始时,玩家必须再次按下攻击按钮才能触发令人满意的 VFX 并在下一次组合攻击时获得额外伤害。
- 特攻。我们还构建了一个系统,让我能够利用 UE4 真正强大的音序器工具。
如果需要,我会创建序列,在其中分层 VFX、音频、hitboxes 甚至相机移动。这些序列从表中提取并在我通过动画蒙太奇通知指定的时间生成(在本例中为“SpecialAttack”)
.
因为这些序列是从攻击本身中抽象出来的,所以它们可以混合、匹配并以不同的方式使用,以创建强大、灵活、附加的 VFX/游戏效果。
一个示例序列 – 在这里您可以看到世界中的级联粒子效果、骨架网格物体和碰撞箱。这是在音序器本身中构建的,与攻击无关。
由于 UE4 动画蒙太奇中的 animnotify,它会在适当的时刻被触发。
在灵感方面,我脑子里有电影、游戏和动画的 rolodex。许多武器和动画的设计都是齐头并进的。我一直在思考如何以令人信服的方式传达运动和速度。动漫和手绘动画之类的东西是一个很棒的灵感,因为关键姿势的流动性和重点创造了我尝试在 3D 中模仿的精美风格的动画。
最后一个注意事项 – 由于我们的相机被拉得很远,所以放大和过度夸大运动以真正出售运动和影响是有帮助的。
挑战
我们最初面临的最大挑战之一就是学习正确的合作流程。我们都远程工作,所以我们很早就陷入了只使用Slack的模式。这造成了紧张,而且通常只是互相发信息会忽略太多背景,尤其是在讨论重要问题时。我们改为每天打电话讨论进展,只是聊了一会儿,我们发现我们能够更顺利地工作。
除此之外,我们每个学科都有很多个人层面的学习。我们必须真正扩展自己以涵盖我们所有的基础,因此开发标题并同时学习一些新技能成为一项挑战。