Quest 内容优化
为 VRChat Quest 创建内容是一项充满挑战的任务——您必须一方面创建有吸引力、引人入胜的内容,另一方面将内容尽可能保真,外加针对移动设备进行的优化工作。这些都是游戏开发者在为移动设备构建内容时必须应对的挑战。
在这里,我们将为您提供一些标准准则,为您解说在为 VRChat Quest 构建内容时需要牢记的事项。
除非另有说明,否则以下条例将同时适用于虚拟形象和世界搭建。
Unity 有一个针对于优化 VR/AR 体验的指南,其中有很多地方讲的都很好。
Lucas Rizzotto 还做出了一部关于优化 VR 内容的精彩视频!视频质量十分出色,涵盖了我们在这里介绍的许多内容。该视频并非由 VRChat 或专门为 VRChat 打造,外加一个小警告,视频中包含着一些生僻或难以理解的词汇。此视频涵盖了这篇文章中的许多项目。
最后,此列表中的所有项目都可能在未来发生变动。换句话说,我们还没有完全定下这些限制内容和相应的建议,请牢记于心。
执行限制
Oculus Quest 对虚拟形象上的内容有几个硬性 (和软性) 限制。您可以查看 Quest 内容限制以了解更多信息,以及我们的虚拟形象性能排名系统页面以了解有关限制系统运行原理的更多详细信息。
如果您上传的虚拟形象或虚拟形象世界上的虚拟形象大大超出了我们的推荐范围,则该世界或虚拟形象可能会被设为私有。
Unity Profiler
我们强烈建议您查看 Unity Profiler 的相关内容。使用性能分析器,您可以量化您的世界或虚拟形象的各种性能指标的精确值。特别值得关注的可能是场景中的绘制调用次数,或者组件使用的帧时间的比例。
当然,功能强大的 PC Profiler 不会代表 Profiler 在 Quest 上的表现,但您仍然可以看到某某组件相对于渲染或者其他东西消耗了大量的帧率。这都是相对的!
市面上有很多关于如何使用 Unity Profiler 的教程,其中有两篇来自 Unity:Profiler 新手总览和 Profiler 的中级索引。这些教程是针对旧版本 Unity 制作的,但仍然很好地涵盖了许多的基本概念。
文件大小
移动平台上的内存十分有限,这一点非常重要。构建内容后,您可以直接查看内容资产包的大小 (在 SDK 中按 “构建和发布”),并可以在编辑器日志中搜索 statistics (统计信息)。预压缩大小也许是您在寻找的内容。
依照经验,您需要避免使用大 (>1k) 的纹理。它们往往是高内存使用率的罪魁祸首。仅使用顶点颜色和平面颜色十分有助于减小纹理大小。
请注意,Crunch 压缩方法对内存占用没有任何帮助!Crunch 压缩方法仅有助于降低下载大小。您在上传和制作内容时应无视 Crunch 带来的文件大小改善效果。
世界
在经过 VRChat Quest 的运行时压缩后,您将无法上传或访问大小超过 100MB 的世界。
虚拟形象
此类型文件应该是最大 5-8 MB。在 VRChat Quest 的运行时压缩后,您会无法上传或使用/查看大小超过 10MB 的虚拟形象。
面数量
在移动平台上,保持较低的面数非常重要。尽管 Quest 在一众一体机中功能算是十分强大,但它的硬件确确实实有局限性。密切关注面数优化对于保持高性能非常重要。
这些建议通过我们的虚拟形象性能排名系统在技术上强制执行。
世界
在构建世界时,您应该尽量保持较低的多边形数量。您还需要为玩家的虚拟形象留出空间。我们建议您总共为您的世界预算大约 50,000 个三角形。
虚拟形象
适用于世界的规则同样普遍适用于虚拟形象。请记住,同一个房间中可能有 10 个或更多的玩家,因此您需要非常严格地预算三角面的使用情况。我们建议您的虚拟形象面数低于 10000 个三角形。
在不久的将来,我们可能会为 VRChat Quest 虚拟形象建立硬性面数限制。而这个限制不会比 5,000 个三角面高出多少,我们的建议如下。
对于喜欢通过各种来源导入玩家模型而不是选择自己创建一个的虚拟形象作者来说,这将是一个艰巨的挑战。低到这种程度的优化简化可能对模型具有破坏性,您可能需要研究重新拓扑等技术,以保持较低的面数。
面数
这同时适用于世界和虚拟形象。
无论您使用什么工具,您都应该限制内容中的面数。对于世界中的静态对象来说,这些限制并不是那么重要 (因遮挡剔除的需要),但对于虚拟形象来说,这非常重要。
您的虚拟形象上应该只有一个 Skinned Mesh Renderer (蒙皮网格渲染器)。虚拟形象的任何配件或添加都应在 Blender 等 3D 建模软件中完成,并且合并到原始网格中。任何动画或移动都应通过形态键或骨骼完成。
在不久的将来,我们将为 VRChat Quest 虚拟形象建立硬性面数限制。
对世界来说,您应该从世界中的 “对象” 角度来思考这些问题。地面上的一组花盆可以是一个对象,但您可能并不会希望将这组花盆合并到地面网格中。否则,您可能会遇到各种优化问题以及在未来编辑世界的困难。
材质
减少材质数量对虚拟形象和世界都很重要。额外的材质会创建额外的子网格,这会消耗绘制所调用的算力资源。减少渲染画面所需的绘制调用次数 (讲人话:提高帧数) 非常重要。
世界
您应该以使用尽可能少的材质数量为目标,为您的世界留出尽可能少的材质数量。话虽如此,在这方面您对世界优化的谨慎程度可以比虚拟形象优化宽松一点。我们建议您把您的世界想象成一个物体的集合,并相应地组合材质。
如果您有一个海滩场景,则成套的椅子/雨伞/毯子可能是单个纹理贴图集上的单个材质。离海滩稍远一点的一组岩石将是另一种材质和纹理。这样,您就可以分离出对象以进行遮挡剔除。
在场景中组合材质和贴图的行为如果过于激进可能会导致 Unity 在进行批处理和自己的运行时出现一些并非最优的的优化行为。
虚拟形象
您应该努努力,力求最终在虚拟形象上只使用 1 种材质,当然在您需要不同着色器变化的情况下也可以使用 2 种材质。纹理图集是必不可少的。
在不久的将来,我们将为 VRChat Quest 虚拟形象建立硬性材质限制。
虚拟形象和世界
您应该在所有材质上启用 GPU 实例化。尽管相关的实际用例只会更加复杂和专业,但您还是最好打开它。
纹理
对纹理大小的管控在虚拟形象和世界中都十分重要,但请记住,您应该减小虚拟形象纹理的大小,因为在单个房间中您将加载多个虚拟形象 (但您只会加载一个世界)。
保持较低的纹理尺寸十分重要。您的目标应该是最大使用 1k (1024x1024) 分辨率的纹理。您还应该创建高效打包图集,从而在相同尺寸下获得更高的纹理分辨率。
虚拟形象压缩后大小不能超过 10MB,世界压缩后不能超过 100MB。由于其中大部分通常是纹理数据,因此您应保持较轻量的纹理并对其进一步进行压缩。
您可以考虑使用 Crunch 压缩,但请记住,如果新的 Unity 版本使用了不兼容的 Crunch 版本,这在以后有可能会破坏您的虚拟形象。
灯光
此部分仅适用于世界。
为您的世界提供烘焙照明至关重要。完全禁用实时灯光并非没有道理,因为它们非常烧性能。您需要广泛使用烘焙照明和光照探针,保持较低的光照贴图分辨率。即使光照贴图分辨率较低,照明效果也非常好。
遮挡剔除
此部分仅适用于世界。
烘焙遮挡剔除非常重要。这样做将允许硬件仅渲染它需要的内容,而忽略您看不到的内容。设置遮挡剔除根本不需要很长时间。
这也是您不应在世界中合并网格体时过于激进的原因之一——如果您做出了一些物体,比如在某个地面上设置的建筑物,您可能不想将建筑物网格体合并到地面网格体中,这样您就可以合规剔除建筑物。
骨骼数量
保持较低的骨骼数量对于降低换肤呼叫的成本非常重要。如果骨骼未通过动画或绑定进行动画处理,则应将其权重合并到其父骨骼中,并删除原始骨骼。例如 Blender 的 Cat 插件这样的工具可以使这变得更加容易。
由于 VRChat Quest 禁用了动态骨骼,这也意味着动态位不需要额外的骨骼。您需要将这些骨骼的权重合并到它们的父骨中。
在不久的将来,将为 VRChat Quest 虚拟形象建立硬性骨骼限制。
配对绑定
确保绑定的基本骨骼布局和层次结构是相同的,包括比例、旋转和位置。这尤其适用于您的根部 (通常是髋部) 骨骼。在跨平台查看内容时,此些内容不匹配可能会致使奇怪的行为发生。
着色
虚拟形象
着色器仅限于 VRChat Quest 中的虚拟形象,您只能使用 VRChat SDK 中包含的 VRChat Mobile 着色器。
您可以在我们的 Quest 内容限制页面上阅读有关这些着色器的信息。
如果您的虚拟形象没有法线贴图,请不要使用 Bumped 着色器。它不会为您做任何事情,并且会产生些许性能成本。对高光也是一个道理。
世界
着色器不受 VRChat Quest 世界的限制。但是,在编写和使用自定义着色器时应格外小心。性能高于一切。如果您正在寻找经过高度优化了的基本世界着色器,请使用 Mobile/VRChat/Lightmapped
并烘焙您的光照。
您应该完全避免透明度的使用需求。Alpha 填充率是衡量移动设备 GPU 的一个重要性能指标,因此在设计场景时请尽可能不要有透明度。
其他组件
布料
布料组件在 VRChat Quest 中被完全禁用。
相机
在 VRChat Quest 中的虚拟形象上相机组件是被禁用的。
它们在世界中是被允许的,但您也应该注意不要过度使用它们。
灯光
VRChat Quest 中虚拟形象上的灯光会被完全禁用。
后处理 (v1 和 v2)
后处理系统在 VRChat Quest 中完全禁用。
音频源
在 VRChat Quest 中的虚拟形象上音频源是被完全禁用的。
音频源在 VRChat Quest 的世界中也有着限制。
刚体、碰撞体和关节
在 VRChat Quest 中,刚体、碰撞体和关节在虚拟形象上会被完全禁用。
它们在世界中是被允许的,但您也应该注意不去过度使用它们。
粒子
在 VRChat Quest 中,粒子对虚拟形象有很大限制。
限制数量待定中。