VR和AR是近年来很火的技术。我做了两年多的VR/AR开发。踩了很多坑。本文是我的踩坑总结。包括设备选型、性能优化、交互设计、晕动症、网络同步、测试等各个方面的坑。以及对应的解决方法。这些都是我亲身经历过的问题。希望能帮到正在做VR/AR开发的你。让你少走弯路。
一、写在前面
先说说我和VR/AR的故事。
我最开始是做普通游戏开发的。用Unity做手机游戏。2019年的时候公司决定转型做VR/AR。我就被调去做VR/AR开发了。
最开始我觉得VR/AR开发和普通游戏开发差不多。都是用Unity。都是做3D场景。应该没什么难的。但是真正做了之后才发现。VR/AR开发有很多独特的坑。这些坑在普通游戏开发中是遇不到的。
这两年多我踩了很多坑。有些坑还造成了项目延期。这篇文章就是我踩坑的总结。希望能帮到大家。
二、设备选型的坑
坑1:只看参数不看实际体验
最开始选设备的时候。我们只看参数。比如分辨率、刷新率、视场角等。觉得参数越高越好。结果买了一台参数很高的设备。实际用起来体验很差。佩戴不舒服。追踪不准。软件生态也不好。
后来才明白。VR/AR设备不能只看参数。实际体验更重要。佩戴舒适度、追踪精度、软件生态、开发者支持等。这些比纸面参数重要得多。
解决方法是:买之前一定要实际体验。最好能借一台或者租一台用几天。实际用了之后才知道好不好用。不要只看评测和参数就下单。
坑2:忽略目标用户的设备
我们最开始做VR应用的时候。是按照高端设备的性能来做的。场景很复杂。特效很多。结果在高端设备上跑得很流畅。但是在主流设备上卡得不行。
后来才明白。做VR/AR开发要先确定目标用户用的是什么设备。然后针对目标设备来优化。如果你的用户大部分用的是中端设备。就不要按照高端设备的性能来做。
解决方法是:做之前先做市场调研。确定目标用户的主流设备。然后用最低配置的设备作为开发测试机。保证在最低配置上也能流畅运行。
坑3:AR设备选型不考虑使用环境
做AR开发的时候。我们最开始选了一款光学透视的AR眼镜。觉得很先进。结果实际用的时候发现。在室外强光下几乎看不见显示的内容。在室内也有反光问题。
后来才明白。AR设备的选型要考虑使用环境。如果是在室外用。就要选亮度高的设备。如果是在室内用。就要考虑反光和遮挡问题。
解决方法是:先确定使用场景。是室内还是室外。是工业场景还是消费场景。然后根据场景选合适的设备。不要盲目追求新技术。
三、性能优化的坑
坑4:帧率不达标导致晕动症
VR应用最关键的性能指标是帧率。VR需要保持90fps以上的帧率。如果帧率不够。用户就会感到头晕恶心。也就是晕动症。
我们最开始做的时候。觉得帧率差一点没关系。60fps也能接受。结果用户用了之后都说头晕。有的甚至用了几分钟就受不了了。
后来才明白。VR对帧率的要求比普通游戏高得多。普通游戏30fps就能玩。但是VR必须90fps以上。否则就会晕。
解决方法是:把帧率作为最高优先级的性能指标。从项目一开始就盯着帧率。一旦帧率下降就立刻优化。不要等到最后再优化。那时候就晚了。
坑5:Draw Call太高
VR场景为了追求沉浸感。往往场景比较复杂。模型比较多。结果Draw Call很高。帧率上不去。
我们最开始做的一个场景。Draw Call有两千多。在VR设备上只有40多fps。用户一用就晕。
后来做了很多优化。把Draw Call降到了三百以下。帧率才稳定在90fps。
优化方法包括:合并模型、使用GPU Instancing、使用LOD、剔除不可见物体、减少透明物体等。
坑6:过度使用后处理效果
后处理效果比如 Bloom、景深、运动模糊等。能让画面更好看。但是在VR里这些效果非常消耗性能。而且有些效果会加重晕动症。
我们最开始给场景加了很多后处理效果。觉得画面好看。结果帧率掉得厉害。用户也更容易晕。
后来我们把大部分后处理效果都去掉了。只保留了最基本的抗锯齿。帧率立刻就上去了。用户也不那么晕了。
解决方法是:VR里尽量少用后处理效果。特别是运动模糊和景深。这些效果在VR里不仅耗性能。还会加重晕动症。
坑7:纹理太大浪费显存
VR设备的分辨率虽然在提高。但是相比显示器还是低很多。我们最开始用了很多4K甚至8K的纹理。觉得越清晰越好。结果显存不够。加载很慢。帧率也上不去。
后来才明白。VR里纹理不需要那么大。因为VR屏幕的分辨率有限。纹理太大了也看不出区别。只是浪费显存和性能。
解决方法是:根据实际需要选择纹理大小。大部分2K纹理就够了。远处的物体用1K甚至512的纹理。使用纹理压缩。减少显存占用。
四、交互设计的坑
坑8:直接套用普通游戏的交互方式
我们最开始做VR交互的时候。直接套用了普通游戏的交互方式。比如用射线点击按钮。用摇杆移动。结果用户用起来很别扭。经常误操作。
后来才明白。VR交互和普通游戏交互完全不一样。VR是3D空间中的交互。用户的手就是控制器。需要更自然更直观的交互方式。
解决方法是:研究VR交互的最佳实践。多用抓取、投掷、按压等自然的交互方式。不要直接套用普通游戏的交互。多做用户测试。看用户能不能自然地学会操作。
坑9:UI设计不合理
VR里的UI设计和普通游戏完全不同。我们最开始把UI做成了平面的。挂在用户面前。结果用户需要抬头或者低头才能看到。而且距离不好控制。太近了看着累。太远了看不清。
后来我们改成了世界空间UI。把UI放在场景中。用户可以走近看。也可以用手直接操作。体验好了很多。
解决方法是:VR里尽量用世界空间UI。不要用屏幕空间UI。UI的大小和距离要合适。一般放在离用户1到3米的位置。按钮要足够大。方便用户点击。
坑10:没有考虑用户的活动空间
VR需要用户在一定的空间内活动。我们最开始做的时候没有考虑这个。场景里的交互物体放得很散。用户需要走来走去才能操作。结果在小空间里用户根本走不开。
后来才明白。大部分用户的VR活动空间都不大。可能只有2米乘2米。设计交互的时候要考虑这个。
解决方法是:尽量把交互物体集中在用户面前的一定范围内。不要让用户走太远。提供传送功能。让用户可以在大场景中移动。支持坐姿和站姿两种模式。
五、晕动症的坑
坑11:用摇杆平滑移动
这是VR开发中最经典的坑。我们最开始用摇杆控制用户平滑移动。就像普通游戏一样。结果用户用了之后大部分都晕了。有的甚至吐了。
后来才明白。平滑移动是VR晕动症的主要原因之一。因为用户的眼睛看到自己在移动。但是身体没有动。感官冲突就会导致晕动症。
解决方法是:尽量不用平滑移动。用传送(Teleport)代替。如果一定要用平滑移动。要给用户选择。让容易晕的用户用传送。同时可以加上 vignette( vignette效果就是移动的时候视野边缘变暗)。减少晕动症。
坑12:快速旋转视角
除了移动。快速旋转视角也会导致晕动症。我们最开始用摇杆控制视角旋转。一转就是几十度。用户很容易晕。
后来我们改成了 snap rotation(固定角度旋转)。每次转15度或者30度。不是平滑旋转。晕动症就减轻了很多。
解决方法是:视角旋转用 snap rotation。不要用平滑旋转。旋转角度可以让用户自己选。15度、30度、45度都可以。
坑13:加速度和减速度太突然
VR里如果有加速度和减速度。比如坐过山车、开车等。也会导致晕动症。因为身体感受不到加速度。眼睛却看到了。
我们做过一个过山车的VR体验。用户坐了之后大部分都晕了。后来我们加了很多减轻晕动症的措施。情况才好一些。
解决方法是:尽量避免有加速度的场景。如果一定要做。要加上减轻晕动症的措施。比如固定的参考点、 vignette效果、限制加速度等。同时要给用户明确的警告。让容易晕的用户不要玩。
六、网络同步的坑
坑14:多人VR同步延迟高
我们做过一个多人VR协作的项目。多个用户在同一个VR场景中协作。最开始用的是普通的网络同步方案。结果延迟很高。用户A做了一个动作。用户B要过一秒多才看到。协作体验很差。
后来才明白。VR对网络同步的要求比普通游戏高得多。因为VR里用户的动作很精细。延迟高了就会感觉不真实。
解决方法是:用状态预测和插值来减少延迟感。优化网络数据传输。只同步必要的数据。减少同步频率。对于不重要的动作可以降低同步频率。使用本地预测。让用户的操作立即响应。然后再用服务器的数据修正。
坑15:同步数据量太大
VR里需要同步的数据很多。头部位置、手部位置、手指动作、表情等。数据量比普通游戏大很多。我们最开始把所有数据都同步了。结果网络带宽不够。卡顿严重。
后来我们做了优化。只同步必要的数据。比如手指动作不需要每一帧都同步。可以降低频率。表情可以用简化的参数同步。不需要同步每一块肌肉的运动。
解决方法是:分析哪些数据需要高频率同步。哪些可以低频率同步。哪些可以不用同步。合理分配网络带宽。
七、测试的坑
坑16:只在开发机上测试
我们最开始测试的时候。只在开发用的高性能电脑上测试。觉得在开发机上流畅就可以了。结果发布到用户设备上之后。很多用户反馈卡顿。
后来才明白。VR应用的性能和设备关系很大。开发机的性能往往比用户的设备高很多。在开发机上流畅不代表在用户设备上流畅。
解决方法是:用目标用户的最低配置设备作为主要测试机。每天都在上面测试。一旦发现性能问题立刻解决。不要等到发布前才测试。
坑17:不做用户测试
VR的交互设计和普通游戏不一样。开发者自己觉得好用的交互。用户可能觉得很难用。我们最开始就犯了这个错误。自己觉得交互很自然。结果用户测试的时候。很多人不知道怎么操作。
后来我们增加了用户测试的环节。定期找真实用户来试用。观察他们的操作。收集他们的反馈。然后根据反馈改进交互。
解决方法是:从项目早期就开始做用户测试。不要等到做完了才测试。找不同背景的用户来测试。包括有VR经验的和没有VR经验的。观察用户的操作。不要只听用户说什么。要看他们实际怎么做。
坑18:忽略长时间使用的测试
VR设备戴久了会有很多问题。比如佩戴不舒服、脸部压痛、电池发热、晕动症累积等。我们最开始只测试了短时间使用的情况。觉得没问题。结果用户用了一个小时之后。反馈了很多问题。
解决方法是:做长时间使用测试。让测试人员连续用一两个小时。观察长时间使用会出现什么问题。包括佩戴舒适度、电池续航、设备发热、晕动症累积等。
八、其他坑
坑19:不考虑视力问题
很多VR用户戴眼镜。我们最开始设计的时候没有考虑这个。结果戴眼镜的用户用起来很不舒服。眼镜会压脸。视野也会受影响。
解决方法是:设计的时候要考虑戴眼镜的用户。设备要有足够的眼镜空间。或者提供视力调节功能。UI和文字要足够大。让视力不好的用户也能看清。
坑20:忽略卫生问题
VR设备是戴在脸上的。会接触皮肤和汗水。如果是多人共用的设备。卫生问题很重要。我们做过一个VR体验店的项目。最开始没有考虑卫生。结果用户反馈设备有异味。不愿意用。
解决方法是:设计的时候考虑清洁和卫生。使用可更换的面部衬垫。提供一次性的面部罩。提醒用户定期清洁设备。
九、给新手的建议
如果你是VR/AR开发新手。我有几个建议。
1. 先买一台设备实际体验
不要只看书看教程。先买一台设备实际用一用。体验一下好的VR应用是什么样的。感受一下晕动症是什么感觉。这样你做开发的时候才知道什么是好的体验。
2. 从简单的项目开始
不要一开始就做很复杂的项目。先做一个简单的小应用。比如一个简单的交互场景。熟悉VR开发的流程和特点。然后再慢慢做复杂的项目。
3. 性能优先
VR开发中性能是最重要的。从项目一开始就要关注性能。保持帧率稳定。不要等到最后再优化。那时候就晚了。
4. 多做用户测试
VR的交互设计需要大量的用户测试。不要自己觉得好用就觉得用户也会觉得好用。多找真实用户来测试。根据反馈改进。
5. 关注晕动症
晕动症是VR开发中最特殊也是最重要的问题。要从设计阶段就考虑如何避免晕动症。不要等用户反馈了才想起来。
十、写在最后
VR和AR是很有前景的技术。但是开发起来确实有很多坑。这些坑只有实际做过才能体会到。
这篇文章总结了我两年多踩过的20个坑。每个坑都是亲身经历。希望能帮到正在做VR/AR开发的你。让你少走弯路。
当然VR/AR技术还在快速发展。很多坑在新的设备和新的技术中已经被解决了。这篇文章基于的是2021年的技术现状。如果你用的是更新的设备和技术。有些坑可能已经不存在了。具体情况还要看你用的设备和技术栈。
最后用一句话结束本文:"VR/AR开发不只是把普通游戏搬到3D空间。它是一种全新的交互范式。需要全新的思维方式。"希望每一个VR/AR开发者都能做出好的应用。推动这个行业的发展。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录