HoloLens 开发方面的一些小建议

今天的下篇,我们一起聊聊开发方面的一些小建议。

上篇:HoloLens 2开发中遇到的问题以及解决办法

HoloLens的老开发者应该都有体会,HoloLens绝不是一个为了展示渲染效果而存在的设备。丰富的传感器、强大的空间计算能力以及多元化的交互方式才是它的核心。

一个传统的项目是先有需求根据需求制定具体功能,但HoloLens作为最先进的全息设备出现在大家面前,很多接触时间不长的用户其实并不了解它的真实能力。

有的企业HoloLens项目有明确的需求,能制定出切实可行的方案。但也有一些项目是在摸索企业与设备之间的切合点,甚至有的项目是因为HoloLens这个高科技设备在反推需求。这就导致了一些项目的崩盘。

最常见的崩盘项目设计是想要呈现高度真实或数量庞大的仿真内容,例如想要让影视级的写实恐龙出现在游客面前。重现宏大的古代建筑群并置身其中。直接使用工业中的曲面模型进入HoloLens项目且不接受细节损失。

这些可以作为一种设想但绝不能作为设计方案,设计者自身需要了解设备性能,如果一厢情愿的去制定方案,方案的整体基调都会跟随错误的思维跑偏,包括程序架构,模型的标准、UI美术的标准、特效、交互方式等等,最终导致项目烂尾。

这种情况需要在设计项目前尽量详细的了解HoloLens设备的特性,利用HoloLens丰富的传感器、强大的空间计算能力以及多元化的交互方式满足提高沟通效率,数据可视化等企业需求,而避免过于追求渲染方面展示写实模型的要求。

简单聊一下笔者感觉容易出现的坑。最容易被坑到的就是美术部分,因为HoloLens开发团队往往都是程序员为主,不是每个团队都拥有美术人员,更不用说稀缺的技美。前期不制定好标准,后期就是在给程序挖坑。其次就是交互设计,交互设计应该预先出交互类的Demo进行测试,否则后期发现交互设计不合理就会产生大量的返工。

下面是一些建议:

(1) 场景中能不要光源就不要光源,材质尽量使用非实时光shader。在必须使用光源的情况则要避免使用动态阴影以及复杂的光照计算(比如金属或光滑漆面对于环境光的反射)。也尽量不要出现半透明的效果,如需要则尽量优化shader及减少半透明部分网格的数量。

  • 使用实时光,掉帧严重
  • 半透明效果,掉帧严重 
  • 实时高质量环境光反射,掉帧严重

(2) 场景中同时出现的模型总面数控最佳是在30万面以内,最好不要超过50万面。这里说的面数是模型在建模软件中全部的三角面统计,一般用简写Tri来表示。模型进入Unity后由于各种因素的影响模型统计往往会有偏差。

该模型整体面数为15.8万面

不同领域的建模师在建模由于专业经验的不同,存在很深的固有思维,尽量不要因为贪图便宜而让跨专业领域的建模师制作HoloLens的模型,影视、建筑、静帧这类渲染向的建模师都不是HoloLens建模的正确选择。渲染向行业模型只是中间产品,只关心最终的视频、图片效果好就可以,其制作流程中会忽略很多模型数据本身的标准,导致开发时出现面数过高,重面,破面或莫名的数据错误。即便在游戏向建模中,不同级别的建模师制作同样效果的模型由于布线技巧等经验存在差异面数等方面也会有所差异,预算允许情况下建议尽量寻求游戏向的次世代建模师。HoloLens可承受的最大面数,经笔者检测在达到1000万面左右时程序尚不会崩溃,但超过100万面后所产生的卡顿,笔者的最终用户反馈是不可接受的,此处仅供大家参考,具体性能还要根据项目中不同光照条件及相关功能的实测为准。

(3) 能通过shader实现的就不要通过贴图去实现。理想状态是模型使用无光无贴图的情况下就能满足要求。

(4) 把场景中所使用的贴图内容用尽量少的贴图表现,比如64张256的贴图尽量用一张2048的贴图来表现,当然这需要对UV的排布等做相应的调整。UI图片同样适用,尽量把UI图片元素整合在一张图片中,然后在引擎中进行切割分成单独的Sprite。5

(5) 能在资源制作阶段解决的问题请不要遗留到引擎阶段,例如模型的中心轴位置,模型的合并等,这些问题虽然可以在引擎中通过添加父节点,渲染时的合批来解决,但不必要的麻烦会让项目逐渐累积负担。

例如考虑到动画需求该部分弹簧模型的轴心位置在建模软件中就调整到弹簧的下部。

(6) 如果是制作工业项目,一定要预估模型的费用,不能盲目的相信自动减面软件,自动减面软件有它的局限性,对于高度复杂的机械而言,面数降低到一定等级后自动减面所带来的破面以及随机合并是不可接受的。而且自动减面软件无法判断工业模型中的双层结构,也不能智能去除非必要的螺纹、文字等建模结构。很大程度上还是需要人工减面或者人工拓扑。

左边是自动减面无损情况的最大程度53万面左右,右边是人工减面至15万面时的样子,外观上基本无区别。

交互方面笔者建议可以考虑使用“眼动追踪+语音”的形式,但在具体设计交互时也要讲究技巧和用法,以眼动捕捉时的范围为例:1.建议碰撞器范围要比模型网格略大,这样用户体验会舒适很多。2.在遇到极度不规则模型尤其是有镂空结构或环状结构的模型时,建议手动拓扑一份低面数模型在外包裹,并以拓扑模型作为网格碰撞器,这样既避免直接在原始模型上添加网格碰撞器导致的物理计算过多,也避免因使用默认简易几何碰撞器造成镂空部分无法穿透,影响后方可操作模型。再以应用场景为例,笔者手头的项目中,眼动功能被需求最多是操作手册翻页和工具架的工具选择等简易交互,不要小看这些功能,这些往往是企业在经历了VR等设备试水后总结出的真正需求,如果大家有开发类似内容的话可以作为参考,多听取一线使用者的意见,坚持功能服务需求,避免做出大而无用的内容。HoloLens 2中最让笔者感到惊艳的就是眼动追踪系统,它让交互的舒适感提高了很大的一个层次,而且HoloLens 2中的中文语音识别也非常的准确,两种方式配合效果更佳。手势操作有其必不可少的功用,但多种交互可达成目的的情况笔者建议尽量采取非手势交互或低手势交互(例如腕部UI),尤其应减少超过胸部位置的按钮等手势内容,因为实际使用中大量手势容易产生疲惫,且由于摄像头范围的原因可能会捕捉不到手部的动作。

(文章转载自公众号:微软HoloLens;作者:李晔)