相关资料
HoloLens SDK地址: https://github.com/Microsoft/MixedRealityToolkit-Unity
XR:https://docs.unity3d.com/Manual/VROverview.html
技术
HoloLens 的使用场景主要受限于现在还不成熟的CV技术,所以 HoloLens 只能在小型室内、中等光照、较简洁的空间里使用。HoloLens 的slam技术,官方叫 spatial mapping 。每秒钟会『拍』5帧画面,然后对周围的空间进行『学习』和『理解』。
功能
HoloLens的基本功能
凝视,语音,手势,空间定位
(a) 摄像头看到的图像,即当前场景的 color buffer。
(b) 当前场景的深度图,depth map 或 z buffer。
(c) SLAM 合成后的三维场景,这个场景所在的空间下文我们暂且称为 Holo Space,它可能是以乐高方块的形式表示,也可能是用三角形来表示。
(d) HoloLens 设备在 Holo Space 中的坐标 (x, y, z)、朝向 (tx, ty, tz)。
(e) 手势识别的结果,类似 HRESULT OnGestureDetected(DWORD dwHandId, DWORD dwEventId, LPVOID lpUserInfo) 的样子。
(f) 语音识别的结果,类似 HRESULT OnVoiceRecognized(std::string& strSentence, FLOAT confidence) 的样子。
HoloLens设置
打开硬件接口
- Settings;
- Update&Security;
- ForDevelopers中打开Deverlorper mode;
- 打开Device Portal;
安装安全证书
- 在网页上输入HoloLens的IP地址;
- Home页面右上角SECURITY;
- 选择Download this device’s certificate下载安全证书;
- 有些可以双击安装;
- 或者Microsoft Edge进入网页,使用IE打开;
- Internet选项;
- 选择内容 — 证书 — 受信任的根证书;
8.点击“导入…”按钮,弹出证书导入向导,点击下一步; - 选择证书路径,打开,下一步,下一步,导入完成;
HoloLens与电脑的连接方式
- 通过wifi连接;
- 通过USB线连接,地址:127.0.0.1:10080;
注:使用USB2.0的口;
开发环境的配置
- 系统要求Windows10;
- 安装VS2015及以上;
注:Windows个人版是不能使用HoloLens模拟器的;
电脑设置
- 打开Windows设置;
- 打开更新和安全;
- 找到针对开发人员;
- 打开开发人员模式;
安装VS的注意事项
- 使用自定义项目安装;
- 将“通用Windows应用开发工具”全部勾选;
- 然后再找到“通用工具”;
4.然后勾选“Visual Studio扩展工具Update 3”;
安装Unity的注意事项
- 必须安装“Windows Store .NET Scripting Backe”和“Windows Store IL2CPP Scripting Backe”
Unity中的设置
Microsoft Holographic平台的Unity项目与其他平台的Unity项目并没有太大的不同,除了一些明显的例外:
确保您打算跟踪HoloLens设备位置的相机在巡视窗口中被标记为主相机。场景中的默认相机应已被正确标记。
将主相机的背景属性设置为纯色,而不是默认的天空盒。将背景颜色设置为(0,0,0,0)。
在编辑 > 项目设置 > 质量中使用最快的质量设置。这最大限度地提高了性能并降低了功耗。尤其是软阴影和阴影级联在HoloLens上使用太昂贵,应该避免使用。
根据应用程序使用的子系统启用适当的发布标志。
资源需求
- 图片:建议PNG格式。
- 模型:FBX格式。
- 贴图:建议Tga格式。
- 音频:建议MP3格式。
- 视频:建议MP4格式。
图片
- Hololens应用的图标,固定大小465*465。
- Hololens启动面板的图片,固定大小930*450像素。
- Hololens应用启动画面,图片尺寸不固定(但是画面显示时会自动缩放为正方正形)。
- 程序中的UI。
- UI:进度条背景与进度条。
- 功能面板及凝视时的提示图片。
模型注意事项
1. 需要低面数模型
a. 实时光照同场景控制在10W面以内。
b. 不同实时光照同场景控制在20W面以内。
c. 面数是指三角面“Tris”。
2. 在建模阶段把缩放等内容处理好。
a. 建模阶段的单位尺寸和Unity保持一致使用米为单位。
b. 调整好模型的大小。
c. 坐标轴放在模型下方。
3. 贴图
a. Hololens中要使用光照贴图。
b. 贴图种类尽量少一些。
c. Shader最好使用微软Hololens官方实例中提供的Shader。
ProjectSetting
Company Name
ProductName:app的显示的名称
Icon
Tile—Short name:将应用添加到主菜单的时候的名称;
应用图标 (旧版本,适用于Windows version 17134.111.x86fre.rs4_release_svc_prod1.180605-2350)
Icon:是在Square 310*310
1. Scale 100% 310*310
2. Scale 125% 388*388
3. Scale 150% 465*465
4. Scale 125% 620*620 **
启动画面
Splash Image
Vitual Reality Splash Image:启用画面
启动面板
在Windows
Scale 150%(930*450pix)
性能
指标 | 目标 |
---|---|
帧速率 | 60fps |
功耗 | 一分钟内平均功耗处于HoloLens Device Portal性能工具图标中的橙色和绿色区域。如图9中Power部分 |
内存 | 总提交内存小于900M |
为HoloLen开发应用与开发传统桌面应用是完全不同的,因为用户会在物理世界中移动,所以为了使得全息图像能有逼真的体验,必须快速的刷新用户视图。用户每只眼睛看到的视图是不同的,所以我们必须在能模拟物理法则的情况下,以最低的延迟来刷新用户视野,避免全息图形相对真实世界发生漂移。全息场景的渲染管道和第一人称视角的3D游戏的渲染管道是相似的,60fps对HoloLens也是理想的指标,当应用的帧速率接近或达到60fps时,实时低延迟的渲染会让全息场景会达到最佳的视觉体验,看起来会更接近很真实物体。
在应用开发周期中,60fps的目标是我们应该最先努力达成,只有在满足帧速率后,才应当去考虑功耗的优化。而且当画面的帧速率远低于60fps时,此时测出的功耗会有较大的误差。
性能优化建议
全息应用和其他图形应用一样,视图的复杂度会严重影响渲染性能,因此为了尽可能达到60fps,我们首先关注的应该是对视图复杂度的优化。对于HoloLens而言,视图复杂度的优化应当关注以下方面:
模型面数
场景中的3D模型的面数越多,虽然在视觉效果上会越精细越动人,但也意味着会消耗更多的计算和存储资源,对设备的负担越大。当场景中模型的面数过多时,会导致帧速率大幅降低,用户会明显感到画面出现延迟、卡顿,这对于全息场景而言是致命的。在这种情况下,在保证观看效果的情况下,模型的面数越少越好。从我个人的实践经验来看,整个场景中,总渲染面数应当控制在10-20万以内。
着色器Shader
Shader对于图形渲染是至关重要的组件,在HoloLens上也是我们优化的重点。一般来讲,工具生成的通用shader一般太过复杂,很多内容对HoloLens无用,因此我们可以使用高阶着色器语言(HLSL)来自己编写shader,提高视图的渲染效率。Unity3D自带的shader不被推荐使用,取而代之的是推荐使用HoloToolkit-Unity项目中的经过精简优化的shader。
此外,切换shader渲染不同的全息图像对性能的代价非常大,推荐应当对Draw Call进行排序,使得能顺序渲染具有同一着色器的对象,减少切换shader的次数,提高渲染效率。
手势
IFocusable
for focus enter and exit. The focus can be triggered by the user’s gaze or any other gaze source.
凝视聚焦事件,当视线进入或离开物体的触发IHoldHandle
for the Windows hold gesture.
处理Hold手势事件IInputHandler
for source up and down. The source can be a hand that tapped, a clicker that was pressed, etc.
处理点击过程中的按下和松开事件IInputClickHandler
for source clicked.
The source can be a hand that tapped, a clicker that was pressed, etc.
处理点击事件IManipulationHandler
for the Windows manipulation gesture.
处理手势操纵事件,事件返回手势偏移量INavigationHandler
for the Windows navigation gesture.
处理手势导航事件,事件返回手势偏移量,值域[-1, 1]ISourceStateHandler
for the source detected and source lost events.
处理事件源的状态监测,比如:手势离开检测区域ISpeechHandler
for voice commands.
处理语音命令(5.5.1f1新增)IDictationHandler
for speech to text dictation.
IGamePadHandler
for generic gamepad events.
IXboxControllerHandler
for Xbox One Controller events.
语音输入
语音是HoloLens三种主要输入形式之一。它可以让你直接命令一个全息图,而不必使用手势。你只是注视全息图并说出你的命令。语音输入可以是一种自然的方式来传达你的意图。语音特别擅长遍历复杂的接口,因为它可以让用户用一个命令切换嵌套菜单。
语音输入由支持所有其他通用Windows应用程序中的语音的相同引擎驱动。
What can I say?
Go home | Go to Start - instead of bloom to get to Start Menu
Launch
Move here
Take a picture
Start recording
Stop recording
Increase the brightness
Decrease the brightness
Increase the volume
Decrease the volume
Mute | Unmute
Shut down the device
Restart the device
Go to sleep
What time is it?
How much battery do I have left?
Call (requires HoloSkype)
————————————————开发过程中查阅的资料和自己的一些总结;————————————————