0

    如何站在微软的肩上玩AR?史上最详细的帖子,手把手教你,看不看?

    2023.05.13 | admin | 207次围观

    第一,我会对Holographic平台做一个大致的介绍;

    第二,我会介绍一下如何利用Holographic平台做一些应用的开发。

    这里又分为两个层次:

    1. 如何从零开始一步一步去做Holographic的应用开发;

    2. 如何利用开源工具Holotoolkit-unity

    第三个,我也会具体聊一聊Holographic的性能优化问题。

    先从第一部分开始。

    1

    什么是Holographic平台?

    在此之前,大家应该已经听说过一个概念——Universal Windows Platform(价值菌注: 通用Windows平台,以下所提到的UWP就是这个的简称啦,注意要跟上哦)。

    其实,这已经不是一个全新的概念了。

    自去年Win10发布以来,我们在很多场合都介绍过UWP。

    UWP的一个重要功能是——简化程序员的工作。

    也就是说,程序员只要写一套相同的代码,其生成的应用,便可以部署在微软所有的硬件平台上。

    (价值菌配图:一张图搞清楚所有的UWP)

    这样做,有什么意义呢?

    有两点:

    1. 比如,你之前已经做了一个Win10的应用,如今,只要符合硬件的要求,就可以将应用直接部署到Holographic的平台上,而不用自己再去受累转变了;

    2. 再比如,你做了一个发布在Holographic设备上的UWP应用,那么如今,这个应用也可以运行在其他UWP平台上了。

    来看一下Win10的开发架构,同样,Holographic的应用也符合Win10的开发架构。

    你可以看到最底下有一部分叫Universal App Platform API。(价值菌注: 通用应用平台API)。

    具体什么意思呢?

    就是说,程序员在UWP所有硬件平台进行最后编程的时候,都是用相同的API(价值菌注:Application Programming Interface,应用程序编程接口), 然后全部运行在所有相同的Windows Cure(Windows内核)上。

    通过这个架构和内核的保证,就可以实现UWP。

    2

    借助哪些工具开发Holographic平台?

    紧接着,第二个问题,如何利用Holographic 平台做具体的开发呢?

    具体的开发资料,包括开源代码等,其实都可以在微软官网上找到。

    我这边给大家列了两个网址:

    在这个网址所链接的开发者中心,可以找到有关于Holographic应用的专项。

    打开这个网址,你可以看到两部分内容:

    1.全套的Documentation(文档),通过这个Documentation就可以了解到Holographic平台的一些具体开发技能。

    2.你可以看到这里有个Community(社区)。开发Holographic应用时遇到任何问题,都可以第一时间加入到这个社区里,进行提问。来自微软总部,以及世界各地的技术专家会根据所提的问题,做一些技术支持。

    而在这个网页上,你是可以找到微软和Holographic相关的开发工具的。

    此外,一些很有用的代码,也都已经开源在Github上。

    Github/Microsoft,这个是微软所有开源项的总网址,在搜索里面输入Holo就可以找到相关项目,包括我之后会讲的Holotoolkit——所有的关于HoloLens的开发课件的源代码,都已经全部开源在Github里面了。

    OK,介绍完这两个网站之后,我来介绍一下开发要求。

    在前面已经和大家介绍过,整个Holographic是和Win10的UWP这套架构打通的,所以,在开发的过程中,需要注意三个方面:

    第一、必须是支持Win10的设备,所有对它的开发,需要基本符合Win10的开发要求。

    符合Win10的开发要求其实也比较简单,只要用Visual Studio 2015,至少要装Update1,建议升级到update3以上(包括update3),然后装Win10的SDK就可以了。

    第二、除了符合Win10的开发要求,开发HoloLens因为设备的关系,推荐开发者使用HoloLens的模拟器。

    第三、开发工具。

    HoloLens的开发可以通过三种方式来实现,不过推荐大家直接使用Unity开发就可以了。

    不过在版本上需要注意,Unity的最新的是5.4f3这个版本,如果用HoloLens去开发的话,你需要装一个HoloLens Technical Preview的版本(简称为HTP)才行。这样一个版本才可以完成HoloLens的开发。

    下图是对模拟器的一个详细介绍。

    如果你有Window phone的开发经验,你会发现,微软的硬件模拟器,基本都长得都差不多:

    左边是它的运行结果,右面是一排工具按钮。

    如果你了解HoloLens的话,应该知道HoloLens的操作方式,跟PC以及平板的的操作方式是不同的。

    HoloLens有三个操作方式,分别是Gaze/Gesture/Voice,即凝视、手势和语音。

    对于这三种方式,Emulator(模拟器)是全部支持的。

    你可以通过按键去模拟人的凝视、手势等,而不需要在电脑面前去做这样的手势。

    按下这里的按钮,你基本上就能启动我刚才说的 “通过按键来模拟人体交互” 。

    在刚才模拟器的介绍图片中,大家可以看到右面有一排按钮,其中一个按钮是Open Device Portal。

    HoloLens有一个Device Portal的门户,它的中文叫做设备门户。

    在一个局域网里面,你只要输入HoloLens的IP地址,PC就能打开这个设备门户。

    这个设备门户有以下几个功能:

    比如,你可以对HoloLens的温度、功耗状态进行监测;

    比如,你可以对它的混合现实数据,进行直接提取。

    我们希望大家在开发过程中,一定要注意这个功耗的问题,稍后我也会讲。

    有一点要注意: HoloLens毕竟是一副眼镜,不会带主动散热器件,基本都是被动散热,因此,对于应用的功耗来说,要求会高一些。

    所以,一定要使用设备门户的按键——Performance(性能),对所开发的应用在HoloLens上的功耗状态进行监控。

    接下来,你的应用如何发布呢?

    如果你有UWP应用的发布经验,你就会发现,其实Holographic平台设备的发布,跟UWP的平台发布是一样的。

    发布的流程基本上还是按之前的六步来做,唯一的区别就是——如果你是针对Holographic平台的话,一定要在Manifest文件里把你的硬件改为Holographic。

    其次,在商店里面设置的左边,有一个小按钮叫Holographic,发布的时候记得要把这个按钮点上,因为它的默认状态是不点的。

    总的来说,整个发布过程还是很简单的。

    刚才为大家介绍了一些开发工具,接下来介绍一下3D技术。

    3

    如何用Unity开发Holographic平台?

    Unity是我们比较推荐的一个开发工具,这里,我分四个部分给大家介绍一下具体如何使用。

    第一部分,怎样用Unity去建一个Holographic

    第二部分,介绍一下Holotoolkit

    先来说说如何用Unity来建Holographic。

    怎样用Unity去建一个Holographic

    ➤1. 创建一个新的工程

    注意:这个新的工程在创建的时候用的工具是5.4f3版的HTP版本微软中国官方网站界面下如何用代码操作,而不是普通的版本。

    创建新工程的时候,你需要选好3D选项,然后它会启动一个普通的3D工程。

    在这里,记得要做一些对于Main Camera的设置,最主要是把它的Clear Flags(清除标志)功能从天空盒状态切换成纯色,黑色作为它的底色。

    为什么要这么设置呢?

    大家知道HoloLens是一个MR产品,如果虚拟的数据你不进行显示的话,它就会默认显示眼睛后面的真实场景。所以我们要把它设置成黑色,这样就不会有投影显示了。

    如果你设置天空盒的话,你看到的是一个类似叠加的场景,而不是一个MR的场景。

    ➤2. 调整近裁面

    因为HoloLens在一些设备硬件方面受到限制,所以它的近裁面要比普通的设备稍远一些。

    我们推荐大家把近裁面,从之前默认的0.3改成0.85。

    根据HoloLens的性能表现,来调整项目的配置。比较推荐使用最快的配置,追求速度而不是追求效果。

    ➤3. 构建一些设置

    构建的设置其实跟Win10的构建设置是一样的。你只需要在Unity里面把它切换到商店的应用。

    从Win8开始,Unity把所有商店的应用全部归在Windows Store(Windows应用商店)这个选项里面,所以你需要在大项选择Windows Store,然后把里面的SDK改成Universal 10,这个就代表一个Win10的UWP应用了。

    ➤4. Build Type(构建类型)

    里面包含两种,一种是XAML,一种是D3D。

    一般来说,Holographic的应用不会去整合Win10的UI设计,所以在这里,还是建议大家使用D3D,有利于效率的提高。

    ➤5. 确认Project Settings(项目设置)

    这里要确认Project Settings(项目设置)里的VR SDK是不是Windows holograhic。

    虽然HoloLens是一个MR类,但Unity全部归为VR产品,所以你还是要到VR里去找。

    ➤6. 输出成为Visual Studio的window10 的解决方案

    ➤7. 部署到模拟器

    使用这个Visual Studio把Win10的工程打开,就可以编译成一个Holographic的应用包,然后输出到模拟器上。

    接下来,我介绍一下HoloToolKit-Unity。

    何为HoloToolKit-Unity?

    这是我们为了方便用Unity开发HoloLens而做的一个开源的项目。

    整个项目分为两个版本,一个是后面带Unity的,一个是后面不带Unity的。

    如果你是从Unity开发的话,你需要获得HoloToolKit-Unity这个项目,它基本上是有一整套组件和脚本的。

    为什么要给大家去介绍这个东西呢?

    首先,我理了一张表格,大家可以看出它提供了各种各样的功能,这些功能都是非常适合于Hololgraphic这个平台的开发的。

    它会有很多的内容,根据类型分出不同的目录,从这个目录可以看到有脚本、有Prefabs(预制)、有材质等等,这样的类型其实你直接就可以拿到自己的Holographic的项目中去用。

    其次,它的整个模块有六个。

    ➤第一个就是Input(输入)

    Input模块是针对三种不同的交互手段,功能就是方便进行交互的开发。

    ➤第二个就是Sharing(分享)

    Sharing(分享)这个模块也很重要,它分担了一些网络交互的功能。

    ➤第三个就是空间映射(Spatial Mapping)

    空间映射是指在HoloLens启动的时候,用于周围环境采集的一个步骤。

    ➤第四个是空间声音(Spatial Sound)

    这里面装了很多关于空间声音的数据,包括对音源的处理和对声音屏障的处理。

    ➤第五个是实用程序(Utilities)

    除了前面四个跟Holographic相关的功能以外,Utilities的这个模块属于普通的实用功能。

    举几个例子:

    比如说FPS的显示。

    比如,我们做一个Billboard(广告牌)。

    比如,Main Camera。

    你可以看到里面有一个叫Main Camera(主摄像头)的内容,我刚才的介绍中你会发现有一个步骤是对Main Camera进行设置的。在使用了utilities之后,就非常简单了,只需两步:

    第一步把你的Unity提供的默认的Camera去掉,第二步直接将utilities提供的Main Camera(主摄像头)放到场景中来使用。

    ➤第六个是构建(Build)

    开发完以后,我们一定要做一个工作就是用build的功能,部署成一个Win10的工程微软中国官方网站界面下如何用代码操作,然后在Visual Studio里面跟踪调试。

    但这样其实会给开发过程带来麻烦。

    针对这个情况,Build模块给开发者提供了一套比较好用的流程——也就是说,在Unity里面就能做这个事情,而不需要把它部署成一个Win10的Studio去完成。

    那么到底应该怎么去用Holotoolkit呢?

    其实很方便,因为它是一个开源项目,所以第一步你要把这个开源项目克隆下来,在Unity里面打开,然后选中里边的Asset这三个功能,把它输出为一个Package。

    Holotoolkit可以帮助完成一些项目和一些环境的搭配。

    比如说,直接用Main Camera Project(主摄像头工程)来替换Unity Camera(统一摄像头)。

    它进来以后你会发现Unity多了一个叫Holotoolkit的菜单,在这个菜单里面你可以选Configure,把三个Apply都选上,分别对环境、对工程、对HoloLens capability进行一次性设置,就不用一一设置了。

    所以只要做这样几步,整个工程从零开始就的搭建也就做完了。

    最后可以用一下Build Windows,这就是我刚才说的Build模块,它体现在Unity里面有一个菜单——Build Windows。

    你把它打开以后,会展示BW的一个界面,在这里面你可以直接生成一个XAP的包、以及一个solution(解决方案),然后可以直接部署在HoloLens上。

    4

    性能优化建议

    大家通过我刚才的介绍也知道了HoloLens对性能方面还是有一定要求的,所以我们给大家提供三个相当于纲领性的建议。

    第一, Holographic的应用只要求刷新率达到60帧。这其实要比VR类的产品要求低,VR产品现在要求都是90帧。

    第二,内存建议大家占用量不要超过900兆;

    第三,功耗

    当你应用搭建起来后,一定要到设备门户里面去看两个数据,以此保证系统的功耗和SOC的功耗,这两个数据一定要保证它的瞬时曲线,和一分钟的平均曲线,全都要在橘红色区域之下。

    如果这两条曲线在橘红色区域的话,会直接进入一个过载保护状态,这个设备就会关机(状态),这点一定要注意。

    下面针对于Unity这块,我稍微深入介绍一下。

    Unity这个版本现在已经适用于很多的VR平台,所以大家在官网上会发现很多对于VR优化的建议,而这样一些建议同样是适合于Holographic平台的开发。

    举两个例子

    右边的属于遮挡剔除,除了能像左边那样进行视锥剔除外,它还可以保证把那些被遮挡的小物件不被渲染出来,这样的话,就能大大的降低DC(DRAW CALL),所以建议做的时候把这个功能打开。

    再一个就是在Unity里面记得要把DC的Batching功能选上。

    Unity基本上有两种,一种是静态的,一种是动态的。

    静态的话基本上就相当于使用内存消耗来提高渲染效力;动态其实就是消耗CPU的资源来提高渲染程度。

    我们建议大家可以把这两种都选上。

    下面给大家介绍两个功能,这两个是比较新的Unity5.4所提供的功能。

    第一个功能我们称为SPSR单通道立体渲染。

    大家知道我们是一个双眼的渲染设备,基本上常规的话会先做左眼渲染再做右眼渲染,但从Unity5.4开始,Unity提供了一个从SPSR的功能,它的作用就是分配一个比较大的render target,然后就可以使用一套绘图指令来完成左眼和右眼同时渲染的功能,以此提高效率。

    第二个功能叫Graphics Jobs(图形工作)。

    我个人感觉这个功能对于多线程渲染效果比较好。

    我们把这个功能打开以后,Unity就会自动地把那些在主线程上做的工作,分配一部分给到渲染线程,以此来大幅度减轻主线程占用CPU的时间。

    目前为止我了解到,在Holographic的开发上,这两个功能是默认关闭的,特别是Graphics Jobs,它还是一个试验的阶段,那么为什么给大家提出来呢?

    第一,我认为虽然Graphic Jobs目前是一个试验功能,还在完善中,但最终会成为正式功能,所以有必要早点提出来让大家知道。

    第二,Holographic的设备,不仅仅是HoloLens, 还包括关于Holographic的VR一类产品,这些都需要Win10的PC来支持。Win10本身是支持DX12的,而DX12在多线程渲染方面,大大优于DX11, 所以我还是建议大家多关注一下Graphics Jobs这个功能。

    这两个功能应该说还是比较简单,在Player Setting里面设置就可以。

    最后我想从Unity的角度来谈谈其未来将对Holographic开发的支持。

    从Unity5.5开始,会内嵌一个Holographic Emulation(模拟器),如果你没有用Holotoolkit/Unity,你也可以在Unity里面去使用holographic的模拟器。

    那么你可以看到它的整个数据输出方式也是分两种,一种是直接输出到editor里面,那么你就可以直接从Unity编辑器直接看到HoloLens运行出来的一个情况;

    另一种,你也可以直接输出到HoloLens设备上,这样就不需要去把它发布成一个Visual Studio的工程,这样的话对开发的周期和效率都会有非常好的提升。

    当然我也观察到一个细节(并非来自官方的消息),在介绍Holographic Emulation的时候,有博客的消息说,Unity5.5支持,但并没有说是5.5的HoloLens Technical Preview的这个版本去支持。

    从这点可以看出,可能从5.5开始,HoloLens的开发会包含在其他VR类的开发之中。

    所以,大家在使用Unity5.5的版本去开发时,就不用再下载一个特别的Holographic的Unity版本。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论