搜索 Unity

Unity AI 2021实习生项目:改善游戏体验

2021年9月22日 类别 技术 | 11 分 阅读
picture of a mobile image
picture of a mobile image
涵盖的主题
分享

AI@Unity正致力于研究和开发机器人、计算机视觉及机器学习的相关产品,我们的暑期AI实习生都从事着AI相关的项目,并对Unity的产品有着实质性影响。

开发质量和平衡性俱佳的游戏是一件比较困难的事,尤其是当游戏中存在有角色属性、关卡和难度等多种变量时。在Unity的众多产品中,Automated Quality Assurance(自动化QA)是解决此类问题的最佳方案之一,它可以自动在游戏模拟中找到游戏平衡的最优优化选项。自动化QA可缩短开发反馈流程,提高团队生产力。

在今年夏天,Unity迎来了几位兢兢业业的实习生,他们为Unity的机器人研究做出了宝贵的贡献。本文将介绍这些实习生所参与的项目和总结的经验。

可视化模拟

Matthew Yang,理学学士(BSc.)计算机科学,西蒙菲莎大学

Visual Simulations软件包的目的是在Unity中生成易于理解和分析的可视化图像。用户可以制定需记录的事件,由Visual Simulations包根据记录生成一张可视化数据图像。该软件包可生成两种可视化图像:记号图和热力图。

在记号图中,每当某个事件在游戏中发生且被记录时,系统便会在场景的对应位置上放置一个标记,标记将按发生的顺序一一放置。在下例中,由玩家扮演的坦克需要射击和摧毁敌人。这里我们能可视化两种事件:一种是以黄色标记标出的移动,一种是以紫色标记标出的开火。玩家的移动路径和开火位置通过标记被记录在了图像中。

热力图通常不会使用单个的标记来记录单次事件,而是会将事件发生的位置以颜色标记出来。Visual Simulations的热力图包含了多种自定义选项,包括图像的精细度、不同发生频率的颜色和阈值。这里,我使用了ML-Agents躲避球环境的淘汰模式来演示热力图的效果:系统会记录每一次智能代理被击中的事件,然后在地图上的以亮色来表示活动密集的位置。

上方演示也是Visual Simulations与ML-Agents结合使用的好例子。训练后的智能代理可以自行生成事件数据用于生成可视化图像,而可视化图像又能帮助洞悉代理在不同情形下的表现。模拟是一种强大的工具,它能在多次运行之间进行比较,显示出不同参数下的表现差异。Visual Simulations可用于游戏测试与平衡性调整,也可用于评估机器人导航系统的性能及其他应用。

灵活测试规划程序

Oscar Lin,计算机科学系,多伦多大学

当今的质量测试(QA)规划通常只包括单条测试路线。QA计划经常包含了多个重复性步骤,如测试准备和善后。如果采用单线测试,重复步骤会使测试计划的描述变得冗长复杂。为了解决这个问题,我开发了一款能可视化测试路线的测试生成器,

a test generator with a feature that allowed for the compression of visualizations in a test path

再利用Automated QA package for Unity的Automator功能,为生成的测试计划添加了一定的编辑功能。然而单次测试的编辑确实更容易了,但每次测试仍旧需要手动设置,测试步骤仍旧会变得过于庞杂。 

为了解决这个问题,我使用了另一种可简化测试总图的生成程序Staged Run。将两者结合起来,用户就可以用最少的代码安排更好的测试,重复流程也会被简化。

Automator测试生成器和Staged Run工具可在Automated QA packagefor Unity中下载。

Sprawl Metrics

Karen Chen,计算机科学,多伦多大学

Sprawl是Unity内部用于测量本机或云端分布式机器学习效果的框架。类似于其他机器学习系统,Unity的工程师也希望更深入地了解Sprawl进程的运行及实验表现,然而Sprawl框架本身没有任何指标。我这次暑期实习的主要目标是为Sprawl用户们制定测量指标,帮助其更好地了解自己的机器学习模型。

out-of-the-box metrics in an intuitive form for Sprawl

我首先研究了不同的设计方案,并在导师的帮助下创建了一份设计文件。我在多次修改后最终敲定了多处细节,并举办了一次会议,从其它团队成员处了解他们对项目整体设计和架构的看法。在审查之后,我很快就进入了实施阶段,专注于开发解决问题的方案。Sprawl指标功能由两个主要部分组成:Prometheus分析器和Grafana面板。Prometheus分析器会从Sprawl进程中搜索并记录指标数据,并将结果显示在配套的Grafana面板上。Sprawl用户可以在Grafana上实时查看本地或云端模型的表现。我们还根据用户的需求添加了几种不同的分析层次。

制定Game Simulation的计算图

Stephanie Wang,计算机科学,卡尔顿大学

我在实习期间借用了Unity开发中的分布式计算的框架和调度系统。我们的目标是使用该系统来平衡某游戏的参数,这是大部分Game Simulation用户的主要目的,藉此来了解Unity的开发体验和各系统的功效。

调度程序则用作在本地和云端创建大批量的模拟。它允许用户设计计算图并辅助节点间的信息交换,使计算和数据处理更加灵活。项目目的之一是测试调度程序,并检查计算图的执行流程及最终的使用体验。

在实习期间,我用该框架建立并执行了一次GameSim模拟。这次模拟最终拓展成50次并行模拟,如果算力允许,这个规模还可以进一步扩大。每次模拟的计算图由3种同时运行的节点组成;加载节点、模拟节点和上传节点。加载节点负责读取并解析包含游戏参数的配置文件。模拟节点则会调取参数进行模拟,并统计关键的模拟数据。上传节点负责汇总并上传统计数据到云端。

the simulation nodes pull each parameter and perform the simulations while accumulating important statistics

计算图支持在一个容器中轻松扩展出45个模拟节点,也能在一个池中创建10个以上的容器。随着并行节点数量的继续增加,我们发现运行总时间出现了大幅下跌。此外,用户只需修改一条命令行标签就可以将模拟轻松从本地切换到云端。 

这一次,我利用了Unity引擎来改进模拟所运行的游戏,并重新修改了GameSim的部分功能,譬如指标数据的记录和搜集方法。所有数据皆以流处理的方式进行统计,即总数据会在新数据生成时刷新。我还试着使用了Kubernetes和Docker,希望将项目部署到谷歌Kubernetes引擎(GKE)。在熟悉Kubernetes的各个指令后,计算图的测试和调试也变得更为方便。

该项目最让我受益匪浅的部分是证明调度程序在Game Simulation里的使用效果。此框架在计算机视觉、机器人技术等其他用例中也有很大的潜力,还能提高模拟的扩展性、方便将其移植到云端。

加入我们

如果你也希望在Unity挑战前沿的AI项目、积累相关经验,请留意我们的AI招聘页面,在校生可在学校招聘页面查看空缺职位。你也可以在家里熟悉我们的自动化QA工具,并开发自己的体验。

2021年9月22日 类别 技术 | 11 分 阅读
涵盖的主题