科技魔方

Magic Leap分享虚拟助手Create Robot的创作挑战与解决方案

AR/VR

2019年11月21日

  (映维网 2019年11月21日)Create 1.3版本增加了一个名为Robot的新角色。它将会引导玩家熟悉这款工具的各种功能。日前,Magic Leap Studios团队的设计师,动画师,视效美术,工程师和音频设计师日前分享了新角色的幕后故事,以及开发过程中所遇到的挑战与解决方案。下面是映维网的具体整理:

  当我们在去年发行Create的时候,我们希望用户能够体验一个数字和物理彼此作用的世界,展现空间计算那令人愉悦和惊奇的能力。顾名思义,利用Magic Leap One和Create(创造),你可以自由创建体验并改变周遭的世界。从墙壁的贴纸到漂浮于空中的水母和海龟,我们可以通过Create瞥见现在不可能实现的未来。

  Magic Leap Studios的使命是开发出探索空间计算潜能的应用程序。这需要我们在设计和开发过程中不断进行迭代和进化。发行Create并不意味着任务已经完成。

  第三个版本新增了一个角色:Robot。它将会引导玩家熟悉Create少为人知的功能。噢,我们同时增加了蝴蝶。优秀的软件看起来是不费吹灰之力的开发结果,但Robot的开发经历了一次深思熟虑的过程。我们对结果感到满意,希望你也会这样。

  1. 创意内容副总监Jeremy Vanhoozer

  为了解决我们注意到的问题,我们开发了Robot。为了引导玩家探索Create世界中的可能性,我们过去会在玩家执行忒定操作时提供的情景提示。例如,在初始发行版本中,当玩家首次使用美术笔刷时,视图中会出现一个2D文本框。但我们在玩家测试中发现,有玩家没有注意到提示或无法理解其含义。我们希望提供一种简单易懂的方式来引导用户理解更为微妙的可能性,而有趣的角色是实现这一目标的最佳方案的。我们需要一种更具交互性的方法。

  事实证明,Create的动画角色是体验中最吸引人的元素之一。用户会与它们建立情感联系,抒写出我们从未想象过的故事和交互。在为玩家提供指导时,一位友好的动画角色是自然而然的选择。

  我们最终得到的是一个新角色:Robot。对于这个鲜明友善的角色,其主要目标是帮助玩家发现Create中的酷炫之事。事情总非一帆风顺,但这并不能阻止我们进行尝试。Robot能够与玩家互动,并突出说明相关的功能,从而帮助后者充分利用Create。Robot会向玩家展示如何将对象整合在一起,如何打开小工具,如何为霸王龙喂食等等。大多数角色都是与其他角色交互,而Robot则是与你交互。

  2. Jonathan Mangagil (动画)

  由于时间紧迫且团队规模较小,我们需要非常迅速地理解这个新角色及其目标。我们决定对Robot进行人格评估并讨论我们的发现。这使得我们能够充实它的个性,确定它的需要,目标和恐惧。这成为了AI行为的基础。

  Robot的四个特征是:富有创意,热情,充满活力和喜欢玩乐。另外,我们认为Robot倾向于:

  容易忽略细节

  很少考虑后果

  寻找创造性的做事方式

  具有创新性和自发性

  明确其性格特征后,我们就可以更快速地着手制作动画。

  在充实这个角色的同时,我们开始讨论Robot是飞行派还是行路派。两者都有各自优点和缺点。行路型机器人需要更多的动画资源,但随着角色的移动,动画师有更多机会展示其个性。飞行型角色的动画较少,但要编程从A点到B点的智能路径需要花费更多时间。但无论是哪一者,我们都必须栩栩如生实现的角色转向,加速,减速,环顾四周,以及与其他角色交互。

  为了快速且清晰地展示角色个性,最好的方法是选择行路派,而且我们选择了轮滑式。

  下一个问题是如何将我们的角色投放到玩家的世界中呢?阴影表示与用户空间的地平面接触,但它们需要感知相关区域的照明。我们决定采用音频和FX。当Robot在地面滑动时,FX能够留下一条光亮的轨迹,并显示出接触的状态。音频则增加了质感,表明Robot正在滑动。

  空间计算改变了我们制作动画的方式。传统的游戏以戏剧化的方式来描绘角色,并且结合清晰,宽泛的姿势,从而允许从多个角度以不同的尺寸读取,与玩家的屏幕及其距离无关。空间计算尽管依然是采用戏剧化的描绘方式,但它重新定义了我们建模的剧场类型。

  与传统的剧场不同,我们想到的是沉浸式和互动式的新兴剧场形式。互动式剧场打破了将表演者与观众分隔开的第四道墙。沉浸式剧院将舞台移开,并围绕着表演者展开。根据体验的类型,空间计算可以既具交互性又具沉浸性。Create本身就是沉浸式体验,而Robot在帮助玩家时会添加一种交互元素。

  我们希望玩家在完成任务后会得到赞赏,鼓励他们更深入地体验游戏。Robot允许我们做到这一点。如果玩家从菜单中抽出一个对象,Robot则会紧随其后并看看玩家将如何处理这个对象。如果你在场景中放置一个积木,Robot会提供另一个对象,并展示如何将它们整合在一起。当玩家成功完成相关的操作时,Robot会上蹦下跳地庆祝。我们引导玩家采取进一步的操作,然后以Robot的响应来予以鼓励。

  两个角色迅速建立情感联系的方式之一是,令两者置于一种需要依靠彼此的情景。即便双方来自不同的背景或口述不同的语言,只要大家有一个共同的目标,两人就可以建立一种关系。我们赋予了Robot恐惧症,而它每当走到陡峭的壁架时都会寻求玩家的帮助。我们的希望是,当玩家看到这一点时,他们会产生足够的同情心并停下手上的工作,然后为Robot提供帮助。

  3. Kris Whitney (设计)

  一个设计挑战是,在一个场景中处理多个Robot。玩家可以根据需要添加任意数量的Robot,而每一个都可以同时请求玩家执行操作。起初看到一群Robot伙伴恳求你的注意十分有趣,但显然明显,我们需要限制Robot的请求。所以,我们编写了一个“机器人管理器”脚本来跟踪Robot请求。在Robot尝试与玩家互动之前,它会检查是否允许交互。如果不是,它将执行下一个优先级最高的AI任务。

  另一个挑战是处理Robot产生新对象的能力,如召唤一块奶酪。我们必须确认目标区域是空白,以避免产生其他角色或对象。这种情况可能会经常发生,所以必须妥善处理。对于Robot,我们执行两次检查并以不同方式处理故障案例。

  当Robot到达可能产生对象的兴趣区域时,系统会执行第一次检查。如果所述区域存在放置生成对象的空间,则放置所述对象。如果区域存在遮挡情况,则机器人将执行“检查”动画。被阻止生成对象的尝试将成为Robot学习的材料。

  当发射物化子弹时,系统将执行第二次检查。如果某物因移动到射线之内而被击中,则Robot必须作出响应。Robot无需等待玩家执行其请求的动作,而是播放“失望”动画,然后其余任务将会取消。

  开发XR体验的一个问题是,你无法控制玩家的视线。确保玩家不会错过特殊事件变成了一项严峻的挑战。以Robot为例,我们意识到它通常不在玩家的视场之内。为了令玩家注意到Robot的“请求”,我们需要音频提示来吸引玩家的注意力。发出提示音后,Robot会一直等待,直到玩家执行请求。

  我们学习到的一件事情是,在创建要求玩家执行特定操作的角色时,重复是大忌。对于Robot,我们必须确保它不会多次发起相同的请求。在我们的案例中,“请求” 任务有一个限制触发频率的冷却范围,即20-40秒。每个“请求”任务同样有自己的冷却时间。所以,如果Robot在30秒前要求玩家将积木整合在一起,这时下一个请求将有所不同,因为“将积木整合在一起”的请求依然处于冷却状态,而其他请求则没有。

  4. Andrew Moran (技术)

  Create 1.3带来了编程方面的挑战。对于移动机制和物理,我们知道Robot需要对导航网格生成的图形进行寻路。作为基于物理的代理,Robot会使用自定义参数,以实现所需的平稳运动。当接近目标时,可以合并所需的停止距离以减慢速度。

  我们的AI包括优先列出的目标,这人它们决定了当对象靠近或玩家执行特定动作时的响应。我们扩展了行为树中的子任务,纳入了玩家的响应,所以要直到玩家完成“建议”后,Robot的任务才算完成。这使得Robot既具有代理的作用,又具有指导的作用,能够扩展玩家对体验的理解。

  通过动画/视觉效果,我们建立了能够对Robot进行微管理的子系统。这在Robot的全息图,物化和关节重写中非常具有代表性。全息图属于数据驱动型,类似于传统的清单系统,要求在ScriptableObjects中使用存储纹理。对象实现会生成一个临时对象供玩家交互。通过创建伸缩系统,我们可以为现有对象创建零重力的“临时”状态,并且对其他状态下的对象的影响降至最小。最后,必须使用对象驱动型动画重写来重定向Robot的关节,从而令其面向目标方向,如注视玩家或玩家握持的对象。

  5. Minal Kalkute (视效美术)

  视觉效果赋予游戏以生命感和自发性,为对象增添了个性并提供了焦点。操纵不透明度是视效美术的常见技巧,但在空间计算中,我们必须合理地进行平衡。将发光效果渲染为透明非常具有挑战性,由于透明的效果会消失。黑色同样不适用于空间计算。作为补偿,我们模仿具有明亮纹理的黑色或应用阴影。在设计用于空间计算的FX时,我们考虑了不透明度的效果,其必须具有的亮度,以及在对象周围建立效果将会如何影响测试时间,审阅和改动。

  Unity的Animator工具对于FX美术而言至关重要。当你使用粒子系统或脚本控制定时和顺序时,“Animator”和“Timeline”可允许你对效果进行计时,并控制何时触发效果。当效果具有多个依赖项时,使用关键帧设置时间和持续时间会更加爱容易。尽管程序员可以对大多数视觉效果进行计时,但Animator可以简化程序员和美术的任务。另外,当更改参数时,Animator不会妨碍审阅反馈周期,从而能够优化工作流程。在制作过程中,构建调试版本和关卡可加快时间并简化反馈。

  效果并非总是对Magic Leap One可见,或者设备所看可能与编辑器所看不同。启用实例化后,着色器将在内部创建参数的实例,并在每个对象使用相同的纹理。当你不希望过多绘制时,这将有助于优化在空间计算中绘制着色器所需的计算能力。诸通过Force Enable Instancing参数和Amplify Shader Editor之类的着色器图可以缓解这个问题。当着色器在运行时发生改动时,实例化将必不可少。我们一般是在运行时使用脚本或着色器本身来确定参数的值。实例化可实现更平滑的过渡。

  优化每个粒子效果有助于提高性能。我们绝不希望FPS出现下降,尤其是对诸如Create这样的应用程序。多个Robot不应妨碍FPS。 FPS出现问题的原因通常与糟糕的角色效果管理有关。粒子系统的网格渲染器可以减轻引擎的负担,并减少绘制调用。对于Maya等工具中与世界位置或对象位置相关的着色器,我们将轴心放置在网格的中心而非原点。在Unity中将网格渲染器用于粒子效果时,我们将Renderer Mode更改为本地。在使用着色器时,将网格添加到粒子效果会有所帮助。

  当使用脚本缩放效果时,我们确保母预制件已经标准化。确保缩放参数为1,并且其他Transform参数清零。这样可确保没有一种效果会出现奇怪的缩放情况。在粒子系统内部,将Scaling模式参数更改为Hierarchy,从而缩放依赖的游戏对象。对于只播放一次的效果,将Stop Action设置为Destroy会清除场景中的效果,从而防止未使用的效果占用内存。着色效果通常比粒子更有效。

  FX管道中最重要的部分是其他美术和美术总监的反馈。尽早并经常获得评论和反馈。这样可以留出时间进行更改。获得反馈非常困难,等待会令人感到沮丧,所以请与团队进行沟通交流。将作品以gif格式发布在论坛或Slack等聊天应用。

  6. Danielle Price (音频)

  我们希望Robot的个性感觉更加人性化。我们想赋予它一种类人的声音品质,但我们不希望它能够说话。我们使用了类似语音的合成声音效果来唤起玩家的注意力,并用以叙述故事。我们记录了老式Macintosh Plus计算机,键盘和鼠标的原始声音。

  这种有机的机械声音给人以更逼真的感觉,并有助于将角色塑造成有一位看过世面的小家伙。每个动画均由多个声音层组成,其具有不同的频率以适应不同的动作。我们将Wwise混合容器中的所有声音层隔离开来,从而增加了混音的多样性和灵活性。

  在处理动画和FX时,务必保持同步。我们是直到完成视觉效果之前才完全着色。在最终发行之前,项目变更都可能会招致风险。为了避免在最后一刻给音频设计带来麻烦,我们为Robot的不同运动层构建了一个声音库。这样,在完成视觉效果之后我们就可以快速确定动画的声音定时。

  Robot的英雄动画和注意力请求语音要比待机和转身效果醒目。设备的最终混音能够支持一系列的交互场景。例如,当Create激活多个角色的时候,我们根据用户关注的地方来调整音频级别。我们会调低用户没有注意的对象的音量。这可以帮助我们避免过于嘈杂的混音效果。

  7. 总结

  Create的第三版本使得我们能够进一步打磨和优化体验,并强调突出我们最喜欢的效果和可能性。Robot这个新角色会积极地寻求与玩家进行互动,而这使得我们有机会构建交互式体验,并引导玩家发现新的功能。开发团队的成员希望这篇博文能够进一步向大家介绍Robot的开发过程,并为你的探索拓荒提供一定的借鉴参考。

+1

来源:映维网

推荐文章