(映维网 2020年11月18日)近日,映维网邀请HoloLens技术开发专家境腾科技联合举办了一场“HoloLens开发Q&A问答”活动,于11月16日周一晚上20点在含有近500名AR/VR开发者的映维网开发者微信交流群内进行。本次活动收集了100多个问题,最终在问答活动时间内,来自境腾科技技术专家谢宾、陈深皆和翟浩凡三人为其中50多个技术开发问题提供了专业解答。
境腾科技三位技术嘉宾:
谢宾:原微软亚太区Windows专家级工程师,并曾被加入微软技术领导人培养计划4%,全栈型CTO, 对混合现实,跨平台,云+端应用,都有深厚的技术能力。
陈深皆:6年微软公司开发经验,工作岗位包括研发,项目经理,产品经理,两届微软技术大会优秀讲师,微软FY16GreatPeople, GreatPerformance。
翟浩凡:高级工程师,从HoloLens1开始到2的全程开发经验,多次参与微软总部HoloLens开发培训,并实现跨平台设备开发。
以下是本次“HoloLens开发Q&A问答”活动的总结(部分同类问题已合并),涉及参考资料超链接的请点击相应部分的蓝色文字内容。
01
问题1:目前HoloLens相关的安卓、iOS应用似乎仅有Dynamic 365是一个模型查看软件,请问HoloLens官方有没有更多的移动端开发项目?类似于手机端HoloLens操控,或者用手机作为控制器之类?
我们所了解到的是没有的。
02
问题2:如何做到戴上HoloLens之后,将处于不规则表面(比如曲面)的待处理的目标用高亮线把目标的轮廓标记出来
HoloLens的表面识别是有精度的,不能保证陶瓷这个大小的物体破损能够识别出来。MRTK缺省定义三种精度:粗糙、中等、精细,分别对应的精度为大平面、墙壁、物体遮挡。也可以自己设定每立方体单位三角面数。但是设定越精细则对性能的影响越大。以我们的经验来看,在茶杯级别的表面识别破损估计很难实现,而且对应能的冲击也很大。
如果识别的破碎范围比较大,则可以参考MRTK项目里的Spatial Understanding里的代码自己根据不规则表面的特性做算法判断来标注破损边缘。
参考资料:https://github.com/microsoft/MixedRealityToolkit/tree/master/SpatialUnderstanding
03
问题3:用MRTK开发安卓、苹果AR App有没有可行性,需要将Unity打包成Library嵌入到Flutter,有没有已经成功的案例,目前是否是成熟产品的可选技术方案
可以使用MRTK + Unity AR Foundation来开发Android / iOS AR App,这个我们有实现过。但是没有将Unity打包成Library嵌入Flutter的经验。理论上都是可以按照以下步骤实现:
把Unity项目打包成 Android / iOS native library。
使用Flutter的Platform Channel特性调用Native Library。
参考资料:https://medium.com/xrpractices/embedding-unity-app-inside-native-android-application-c7b82245f8af
参考资料:https://medium.com/fluttervn/platform-channels-solution-for-using-a-native-library-in-flutter-3ccfabb97f30
04
问题4:关于HoloLens第三方视角开发,如何导出第三人称视角视频
第三方视角可以借用Vuforia来实现这样的功能,HoloLens和iPad都扫描一个图片,所有场景中的模型的位置全都相对于这个扫描图进行固定,这样两边设备中的模型都相对于这个扫描图的位置是固定的。这样即可实现第三方视角,也可以在iPad上用录屏的方式来录制第三方视角的视频。
05
问题 5:如何将HoloLens开放接口给第三方软件数据处理软件,并将反馈结果在HoloLens中显示
HoloLens和第三方数据源的数据交换通常以HoloLens作为客户端,数据源作为服务器,使用HTTP Restful API / WebSocket / TCP 等协议来请求数据,再展示在HoloLens中。
06
问题6:如何优化场景才能更好适配HoloLens
请参考微软官方优化文档。
参考资料:https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Performance/PerfGettingStarted.html
07
问题7:怎么将微软远程专家系统集成进自己应用中,作为一个整体使用
微软Dynamics RA没有办法作为SDK / Library级别嵌入第三方应用,但是微软Dynamics RA可以在后台运行,所以打开Dynamics RA连接远端,然后再打开第三方应用,远端即可看到第三方应用的内容。
08
问题8:外接蓝牙键盘怎么使用输入法输入中文
HoloLens支持鼠标键盘,可以输入中文,但是没有中文字符的联想功能,所以可能会无法选择到自己想要的文字。
09
问题9:如何把自建三维模型导入HoloLens中
按常规HoloLens开发流程,在Unity中导入模型,打包发布到HoloLens中即可。打个广告,我们有现成的多人协同系统和工作流程系统,可以直接上传模型,并在HoloLens里面查看。
10
问题10:多台设备如何实现空间坐标同步
有多种实现方式:
多个HoloLens直接同步空间坐标,可以直接发送World Anchor信息进行同步,好处是可自动实现同步,无需客户操作。坏处是需要写比较复杂的同步代码,而且每个World Anchor的信息量比较大,可达30MB。
使用微软Azure Spatial Anchor Service,可实现HoloLens与iOS / Android AR程序同步,但是还没有在国内上线。
多个设备直接扫同一个Vuforia码,简单易行。
11
问题11:HoloLens数字沙盘如何开发
美术建模出数字沙盘,UI创作需要在沙盘显示的画面,程序把这些素材结合起来,实现程序逻辑。
12
问题12:HoloLens应用场景中的模型如何产生阴影效果
环境里的物理光照无法在HoloLens2场景里产生阴影。
在虚拟场景的灯光,可以通过设置来产生阴影,但是微软官方推荐的画质设定是非常低,这个设定下阴影效果是关闭的。如果要打开,会对性能造成影响。另外如果使用的是MRTK里的shader的话,是不支持阴影效果的,因为MRTK里的shader不接受光照。
13
问题13:如何提高叠加物体定位的精度和稳定性
在Hololens 2中提高物体稳定性通常需要考虑:
FPS:尽量保持60fps,同时避免FPS大幅变化,否则会出现抖动现象。
物理环境的可追踪性:避免大范围相似的图案,大幅变化的背景,和过强过亮的光线效果。
必要时可进行眼镜校准。
具体请参考微软官方文档。
参考资料:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/hologram-stability
14
问题14:最新版本MRTK关于HoloLens 1代的配置文件适配问题
没有用最新版本的MRTK在HoloLens 1中做过开发,在HoloLens 1中做开发,推荐使用HoloToolkit Unity 2017.4的版本来做。
15
问题15:HoloLens 1代与Unity连接调试的前置条件有哪些
HoloLens需要安装Holographic Remoting这个APP,在微软应用商店可以下载。
16
问题16:工业使用中OPC与产品接口相关参数
不建议HoloLens App直接访问OPC Server,原因是支持OPC的现有类库无法直接在 UWP / ARM64平台上使用。我们通常的做法是做一个中间服务来连接OPC Server获取数据,然后整理后再通过HTTP Restful API / WebSocket / TCP 等协议传给HoloLens App。
17
问题17:现在MRTK中的面板都是用的Quad Mesh面片,没有用UI,这样有什么好处
使用UI的时候会出现水波纹、缎纹的情况,使用Quad 可以避免这种情况出现。
18
问题18:HoloLens因为没有配备GPS,请问在户外使用设备时,如何让其更高效的引导用户?SLAM还能是该问题的最佳方案吗
可以外接GPS设备,但效果不佳。第三方方案比如Easy AR可以视线类似场景,但目前没有兼容UWP,需要自行定制开发。
19
问题19:Spatial Mapping 里的场景理解是其核心技术之一,请问可否具体讲解一下它的使用逻辑和方法?以及其算法可否再次优化以带来更友好的创建数字内容的体验
具体方法可以参考官方文档。
参考资料:https://github.com/microsoft/MixedRealityToolkit/tree/master/SpatialUnderstanding
20
问题20:怎么样实现远程标注
实现远程标注实际上是利用小孔成像的原理:标注APP可以认为是在成像平面上进行标注,通过系统API获取HoloLens小孔成像模型的内参,计算出在HoloLens单位平面上的对应坐标,然后利用HoloLens SLAM能力得到的相机外参,通过发射射线和HoloLens检测到的物理平面层进行碰撞,然后得到标注点所在真正在3D空间中的点坐标。下面视频是我们的实现演示:
21
问题21:多台HoloLens实时视频通话该如何实现,后续能否出Demo
可以使用微软官方Webrtc类库。
参考资料:https://github.com/microsoft/MixedReality-WebRTC
22
问题22:目前能否接入讯飞等中文语音识别,微软的好像无法识别中文
MRTK是可以识别中文,前提需要把HoloLens的系统语言设置为中文才可以。
23
问题23:如何用Unity实现在HoloLens2中显示视频
推荐使用AVPro Video这个插件。
24
问题24:怎样添加多个Anchor在人走动的过程中使3D模型更稳定?有没有用过World Locking,是怎么使用的
添加多个Anchor并不能使3D模型在走动时更加稳定,请参考问题13。World Locking 解决的问题是场景级别和物理世界的同步与锁定,因为刚出我们也没有使用过。
25
问题25:有没有PC Remote Rendering成功使用的经验,我们试过但是失败了,安装包安装到电脑上之后,连不到HoloLens View怎么办
PC Remote Rendering需要在Player Setting里勾选一个选项,叫WSA Holographic Remoting Supported。
26
问题26:HoloLens 2目前比较好的AR工具包是什么以及基本使用方法
可以用微软MRTK QRCode Tracking 或者Vuforia。
27
问题27:如何较好地实现远程语音或视频传输功能
可以使用微软官方Webrtc类库。
参考资料:https://github.com/microsoft/MixedReality-WebRTC
28
问题28:手机观看第三方视角能否进行直接交互
可以,用MRTK的话,对模型的移动、缩放、旋转是可以直接操作的,点击事件,需要自己写个脚本处理一下。
29
问题29:如何实现多设备共享场景展示与交互
同步多设备的空间坐标系,可参考问题10。
交互同步,可以使用一台独立电脑作为服务器,或者用原来的Unet方案。
30
问题30:有无API重置世界坐标原点
Unity没有提供此API。
31
问题31:HoloLens 2,Vuforia代码进行录像只能录几秒吗
Vuforia一直开着的话,HoloLens录像会和Vuforia抢摄像头,录像和扫码不可以一起跑,扫码结束后需关闭Vuforia组件。
32
问题32:多个佩戴HoloLens 1或2的体验者集中操作时,以上帝视角拍摄时最优的硬件方案及网络布局方案是什么
我们的经验是:
独立电脑作为服务器中转网络包,连接物理网线到独立路由器。
该电脑可作为第三方视角拍摄段,使用固定相机拍摄第三方视角。
HoloLens设备通过5G无线wifi连接路由器,避免网络干扰。
33
问题33:在图像识别不理想的情况下,HoloLens 2是否支持局部空间扫描?另外,真实物体与虚拟物体的前后的遮挡关系如何以最低开发难度的方式解决?
真实物体与虚拟物体的前后遮挡关系,开启HoloLens的空间扫描,把空间扫描出的网格的Shader设置黑色的Shader,就可以实现。
34
问题34:纯黑色材质在HoloLens中渲染不出效果,被视为透明穿透显示现实空间,有什么好的解决办法遮挡住现实物体凸显黑色材质模型吗
尽可能避免使用黑色,用深灰色,HoloLens无法渲染黑色材质。
35
问题35:如何实现环境扫描,让内容可以基于环境做交互,如何保存环境扫描数据,并上传网络,自己的服务器可以吗
可以实现,自己采集网格数据上传服务器,然后再实例化使用。
36
问题36:如何让HoloLens识别所在房间并在房间设备上叠加虚拟信息
预先设置World Anchor,保存World Anchor信息。
加载World Anchor并显示模型。
37
问题37:HoloLens的远程渲染,较大文件的HoloLens发布,是否可以放在云端,目前有什么比较好的的方法
用Azure Remote Rendering,或者自己写一个,请参考微软官方文档。
参考资料:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/holographic-remoting-create-host
38
问题38:如何在减少模型面数的情况下提高视觉效果
模型师多下些功夫。
39
问题39:Microsoft Mixed Reality Toolkit和Unity Package Manager是如何配合使用的
和普通的Unity开发没有区别。
40
问题40:HoloLens是否有远程渲染的解决方案,是否支持一台服务器同时渲染多个画面不同的HoloLens终端
自己写一个渲染服务器试试看,请参考微软官方文档。
参考资料:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/holographic-remoting-create-host
41
问题41:HoloLens的摄像机矩阵,官方的Try Get Camera To World Matrix方法 只能是调用拍照时返回,我现在用的是微软Github上的Webrtc框架做的视频通讯,请问怎么能在视频时,实时获取摄像机的Try Get Camera To World Matrix和Try Get Camera To World Matrix的数据呢
需要使用Windows Runtime Api,获取Media Frame Reference 或者IMF Sample,然后再通过相应的API 获取相机位姿。具体请参考微软官方文档。
参考资料:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/locatable-camera
原文地址:https://mp.weixin.qq.com/s/_3mABfcJ2rmR1uBZxMNObg