如何在不崩溃的情况下向Oculus发行VR游戏

我们将继续分享我们开发VR游戏Astro Collapse的初次经验。在之前的文章中,我们讨论了游戏游戏设计的主要思想



这次我们将告诉您如何避免我们的错误并更快地发布游戏。我们仅在第三次尝试中得到它,因为我们在技术检查上陷于困境。仅使用Oculus网站的建议,我们无法提高游戏的性能。因此,我们一直在寻找解决方案。仔细阅读文章,以免将游戏发布到Oculus。也许您可以第一次做。



VR游戏技术准则和关键绩效指标



完成构建后,注册Oculus并将游戏上传到您的帐户。几天后,您将通过电子邮件收到通知。这要么是对测试成功通过的祝贺,要么是对纠正错误的要求。



第一次我们没有考虑到Oculus网站上的所有建议,因此得到了以下结果:

图片

第一次Oculus检查后的详细报告



我们未通过性能测试,我们需要返回Oculus Home菜单时遇到问题,并且该游戏未安装在较旧的Android版本上。



要通过性能测试,您需要遵循以下准则:



  • 游戏中的FPS必须至少为60;
  • 每帧从50到100个调用以进行绘制(Call Draw);
  • 1-3毫秒执行脚本;
  • 每帧50,000至100,000个多边形。


首先让我们弄清楚这些概念,然后向您展示我们如何解决性能问题。



FPS或每秒帧数



高性能的关键指标是高FPS。它显示每秒的帧频:游戏具有一个循环,该循环绘制游戏世界并在脚本中执行数学运算。这些帧之间的延迟越高,度量和性能就越低。

借助FPS,您可以了解游戏是否一切正常。




抽签指示



绘制调用-游戏引擎发送到GPU绘制世界的纹理调用数量。为了减少调用次数,引擎需要将纹理组合为一种材质。此技术称为批处理。

抽奖电话指示器越高,绘制游戏世界所需的时间就越长。


脚本及其执行速度



脚本负责游戏中的任何动作和操作。您需要处理程序来执行它们。例如,更新。它必须处理每个帧。如果游戏中有很多物体并且动作复杂,则此处理程序没有时间完成框架。因此,性能低下并且游戏冻结。

Update中许多耗时的操作使其很难对对象执行操作。


每帧多边形



多边形是组成3D游戏模型的三角形。它们由顶点和平面组成。每帧多边形是游戏世界中所有对象的数量与这些三角形的乘积。

此数字越高,游戏引擎处理一帧的时间就越长。


我们如何解决性能问题



我们遇到了4个导致游戏性能低于建议值的主要问题。我们制作了过于详细的3D对象,遇到了较高的“绘图调用”率,脚本运行缓慢,并且设备内存超载。我们花费了大量时间来寻找解决这些缺点的方法。现在,一切按顺序进行。



简化3D对象并降低每帧的多边形



我们的游戏中有许多小行星和飞船在不断移动并使游戏超载。在战斗中,玩家没有时间去考虑它们并关注细节,因为他热衷于这一过程。如果减少小行星的数量,那么游戏将变得无聊且无趣。因此,我们决定简化小行星和航天飞机的三维模型:我们减少了游戏场景中多边形的总数。



图片

Astro Collapse游戏中的航天飞机多边形



确定在您的游戏中什么是重要的:详细描述小物体或大型游戏世界。您将了解不需要详细介绍哪些对象模型,这将有助于提高性能。


我们将纹理组合成地图集,并实现了推荐的“绘制调用”指示器



在《太空崩溃》中,游戏世界是由小行星,航天飞机,军舰,地球和太阳创建的。游戏中有很多对象-“抽奖电话”指示器很高,因此引擎降低了图形的渲染速度。为了减少它,您需要将不同纹理的对象组合成一个图集。

图片

Astro Collapse游戏中的小行星地图集



我们制作了4个大型纹理地图集:用于小行星,驾驶舱和大炮,瞄准界面和游戏菜单。这些对象由许多相似的材料组成。Atlases简化了引擎的工作,因为它不再需要将不同的纹理收集到一个对象中-我们为此做了。

将物体的材料收集到一个地图集中-一种大纹理。


减少脚本执行时间



游戏中的任何动作都是使用脚本进行的。 Astro Collapse有很多游戏对象以及对它们的复杂操作,因此某些脚本执行时间很长-Update处理程序延迟了框架的完成。这减慢了游戏过程。



因此,我们必须从逐帧更新中删除复杂的操作。我们使用了一个协同例程,可以对框架外部的对象执行此类操作。



这就是我们能够优化复杂小行星运行的方式。在“太空折叠”中有许多这样的物体:需要检查每个小行星的活动,跟踪其在太空中的位置并将其添加到列表中。列表本身需要更新,以便将新的小行星带入游戏,计算它们与玩家,航天飞机和邻近军舰的距离。结果是Update处理程序无法处理的帧长时间运行。在协程的帮助下,引擎消除了这一复杂的操作,逐帧更新并提高了性能。

协同例程处理程序在逐帧更新之外执行复杂的操作,从而简化了游戏引擎的工作。


保护设备内存免受垃圾破坏,并创建一个小行星池



Astro Collapse有很多小行星。它们不断出现,需要被摧毁。脚本“实例化”和“销毁”中的标准构造函数通过执行这些操作而失败。它们在设备的内存中产生垃圾,导致游戏死机。所以我们做了不同的事情。



击落的小行星没有被摧毁,而是藏在游戏空间中。当需要一个新对象时,脚本会从隐藏对象中调用它。此方法称为池化。



在加载游戏世界之前,脚本会创建数十个小行星。如果它们都同时在太空飞行并且不在内存中,那么他会产生一个新的小行星并将其添加到列表中。这为我们提供了一个灵活的小行星控制模型并改善了游戏性能。

对经常创建和销毁的相同类型的对象使用合并方法,但是在游戏本身中,同时存在的对象并不多。


技术检查后的小错误



游戏中模型的后处理:禁用抗锯齿



抗锯齿-通过平滑锯齿状边缘对图像进行后期处理。在Astro Collapse中默认设置了抗锯齿。游戏超负荷运行,并且游戏中仍然没有明显的抗锯齿效果-Gear VR头盔的分辨率很低。因此,我们将其关闭。在测试过程中,玩家没有注意到任何变化,但是性能变得更高。

在Gear VR上,抗锯齿不会以低分辨率产生抗锯齿图像。


精灵的壮观爆炸



为了进行明亮的爆炸,我们使用了精灵。这是一张爆炸图,其大小,透明度和颜色从橘红色变为黑色。这样,我们无需使用包含许多单个粒子和动画的复杂系统,就能够保持爆炸的动态并改善游戏性能。



在太空崩溃中被摧毁的小行星



可以用精灵来完成壮观的爆炸。


无需阴影



我们关闭阴影是因为游戏始终处于运动状态-您看不到它们。此外,我们没有在上面投射阴影的大型物体。

禁用对玩家来说微不足道的辅助游戏对象的阴影。


需要返回Oculus主页菜单的问题



头盔上的后退按钮应使玩家返回Oculus Home,而不是像Astro Collapse那样返回游戏菜单。为了解决这个问题,我采用了现成的Oculus插件脚本并将其应用于游戏中。

使用OVRPlatformMenu.cs脚本可使菜单后退按钮正常工作。


消除在较旧版本的Android上安装游戏的错误





安装中的缺陷很容易解决。您需要在项目设置中指定受支持的Android旧版本。

不要忘记在游戏设置中指定最低要求的Android 4.1 API级别。


游戏发布后的结果



我们已修复了缺陷,并第三次将游戏发送给审查。答案是肯定的-游戏于一周后发布:

图片

来自Oculus技术支持的Maria祝贺该游戏的发布日期,在发布



两周后,Astro Collapse下载了7000次。对于Gear VR平台上的VR游戏而言,这是一个出色的结果:它进入了前50名免费游戏中,并排在第24位。



向Oculus发布游戏的提示



在将游戏发布到Oculus商店时,有一些规则可以避免我们遇到的问题:

  • 在上传游戏之前,请查看Oculus官方网站上的建议和最常见问题。
  • 考虑从开发的一开始就提高性能,以免在最后阶段重做整个游戏。
  • 不要通过详述所有对象,大量纹理或阴影来使游戏中的图形复杂化。它可以在手机上运行,​​并且规格有限。考虑可以删除哪些内容而不损失游戏质量。
  • 请与Oculus技术支持联系。他们会迅速回答并提供帮助。
  • 请记住,提高每个游戏的性能都需要采用单独的开发人员方法。您将找不到解决该问题的通用解决方案。




查看我们的提示,以帮助您更快地在Oculus上进行验证。



Astro Collapse游戏,欣赏图形。为此,您将需要Samsung Gear VR眼镜。它们可与智能手机配合使用:Samsung Galaxy Note 4、5、7,S6 / S6 Edge / S6 Edge +,S7 / S7 Edge,S8 / S8 +。



成功的发展!



All Articles