Hololens开发笔记

官网的开发配置:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/install-the-tools?tabs=unity

https://www.pianshen.com/article/5565687323/

开发环境设置:

一、Mac 虚拟机(ParallelsDesktop 13)配置HoloLens开发环境: https://blog.csdn.net/w530248323/article/details/79033297

  设置启用开发人员模式

  VS 的安装与设置:勾选安装Universal Windows Platformdevelopment组件

                              选择Game Development with Unity 组件,并取消选择Unity Editor的安装

 Unity 端的设置: 务必选择Windows Store .NET Scripting Backend

 HoloLens Emulator的设置:  系统需开启Hyper-V,     控制面板→程序→启用或关闭Windows功能,勾选 Hyper-V 的两个选项

       下载并安装HoloLens Emulator and Holographic Templates (build 10.0.14393.1358),最好挂VPN

 MixedRealityToolkit-Unity

https://github.com/Microsoft/MixedRealityToolkit-Unity

 

Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10):https://www.pianshen.com/article/5565687323/

 一、启动盘重启的Windows虚拟化是 打开的状态,在任务管理器下可看到虚拟化是否已打开

   二、软件安装:Visual Studio 安装  ,Hololens模拟器安装Unity 5.5 安装

  三、HoloLens模拟器网络连接:

          在任务栏搜索框输入H,打开hyper-管理器,然后选择交换机管理器,选择外部网络,并选择自己的网卡

 

Hololens官方教程精简版 - 04. Gesture(手势):https://blog.csdn.net/yurichou/article/details/54286638

 

Hololens For Unity性能优化:https://docs.microsoft.com/zh-cn/windows/mixed-reality/develop/unity/performance-recommendations-for-unity#reduce-poly-count

混合现实应用(尤其是针对Unity)的性能优化:
  1. Unity Quality settings,set to Very Low :
         Edit > Project Settings > Quality, select Very Low-quality.
    2.Lighting settings对性能影响也很大,关掉Realtime Global Illumination:
        Window > Rendering > Lighting Settings > Realtime Global Illumination,
        改为使用Baked Global Illumination,但不适合Hololens,因为烘焙全局光,只适合静态GameObject,
        而Hololens中是未知的环境和改变的环境。如果是VR就合适。
        Realtime Global Illumination is set per-scene,所以每个场景都要保存。
    3.Single pass instancing rendering path, 因为MR应用中,场景被渲染两次,一个眼睛各一次;
       Edit > Project Settings > Player > XR Settings)
     选择Single Pass Instanced 在the Stereo Rendering Method下拉列表(Virtual Reality Supported checkbox must be checked)

   4.建议使用IL2CP(尤其对于UWP应用);但IL2CPP build时时间长一些,下面有一些方法可减少编译时间:
      4.1.每次build到同一个目录下,这样重用了pre-build file.
     4.2.让anti-malware software不扫描你的项目目录和build folders:
               Windows安全中心,病毒和威胁保护,添加或删除排除项下,添加上面两个目录
        4.3.使用SSD
       //对于大型项目,多人共享的,可考虑使用Cache Server
       
    6.设置Holographic的Tracking Loss Image :
       Edit > Project Settings > Player,Windows Store tab and open the Splash Image
      也可以设置自定义跟失的处理事件:https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/tracking-loss-in-unity
    7.支持的功能Capabilities配置:
     Edit > Project Settings > Player,
     Windows Store -> open the Publishing Settings 
    
 CPU方面的性能优化:特别是Unity和C#代码:    
   1.在缓存引用(在Start或Awake中),不要在重复回调(如Update)中调用GetComponent()
     2.最好使用Type类型来GetComponent(Type type),而使用string传参,性能开销更大
     3.最好不要使用LinQ,因为它需要更多的计算和内存开销,而自己手动写算法
     4.Unity自带的一些API,性能开销大,可通过缓存引用或创建组件管理者来管理:
        GameObject.SendMessage()
        GameObject.BroadcastMessage()
        UnityEngine.Object.Find()
        UnityEngine.Object.FindWithTag()
        UnityEngine.Object.FindObjectOfType()
        UnityEngine.Object.FindObjectsOfType()
        UnityEngine.Object.FindGameObjectsWithTag()
        UnityEngine.Object.FindGameObjectsWithTag()
     5.注意装箱:值类型 ->  引用类型, it's wrapped in System.Object,储存在托管堆上,需要分配和GC回收。在某些情况下可避免的,使用具体类型,而不是object
     6.Unity的自带的空回调函数,要去掉,会带来开销的,因为Unity底层是托管与非托管代码的调用。
     7.专用的单一实例类或服务来处理投影到场景中的视线:
        UnityEngine.Physics.Raycast()
        UnityEngine.Physics.RaycastAll()
     8.在初始化时实例化所有对象,并使用对象池在应用程序的整个运行时中回收并重复使用 GameObje
     9.一般情况下,不建议将字段和函数标记为虚拟,除非明确要求覆盖此成员(因为虚成员会带来开销)
     10.避免按值传递:结构是按值传递的,会复制增加了CPU 开销以及堆栈上的附加内存,对于大的结构或每个帧重复调用的函数,考虑按引用传递
     11.限制物理特性上花费的时间或一秒钟内迭代的次数,以减少模拟的精度, 通过调用TimeManager的时间频率
     12.Collider的性能排序:Sphere < Capsule < Box <<< Mesh (Convex) < Mesh (non-Convex)
     13.动画: 通过禁用动画程序组件来禁用空闲动画(禁用游戏对象不会产生相同的效果)
     14.复杂算法:如果应用程序使用复杂算法,例如逆向运动、路径查找等,自己找到简单的方法来提高性能
     
 从CPU到GPU的性能建议:
   1.重新构建应用程序的绘制调用来限制状态更改(例如 不同的材料等)可以大幅提高性能,如drawcall batching
     2.Single pass instanced rendering(单通道实例化渲染),Edit > Project Settings > Player > XR Settings,....
     3.静态批处理: 共享相同的材料;2)全部标记为 Static。 标记为 Static 的 GameObject 无法在应用程序的整个运行时中移动。 因此,在Hololens上很难用到静态批处理;而VR头显中可以使用,从而改善性能。
     4.动态批处理:对GO的条件:) 共享相同的材料;b) 符合其他很多条件(联的网格数据不能超过 300 个顶点)
       在运行时修改 Renderer.material 属性会创建材料的副本,因此可能会中断批处理。 使用 Renderer.sharedMaterial 可以修改各个 GameObject 的共享材料属性。
       Unity 中的每个渲染器具有自身关联的绘制调用,而不是通过一个渲染器提交合并的网格
       
  GPU的性能建议:
    1.勾选Enable depth buffer sharing,建议选择16-bit depth(尤其是Hololens)
     当使用Mixed Reality Toolkit Standard shader, to render depth for transparent objects:
     透明材质使用MRTK Standard shader, Fix Now(sharing warning),Render Mode选择Transparent,且把Depth Write set to On.
      2.为防止Z-fighting,把Camera的远近裁剪面距离设少一些,如100m
      //注:当使用16位深度时,Unity不会创建stencil buffer; 然而ugui的一些UI effects及other stencil-required effects需要24位深度格式(因为创建8bit stencil buffer).
      3.避免全屏效果(如后处理的anti-aliasing,bloom等
      4.优化光照设置:窗口” > “渲染” > “照明设置”> 取消选中“实时全局照明”,为每个 Unity 场景文件禁用“实时全局照明” 。
        建议禁用所有阴影投射,因为这也会将高开销的 GPU 通道添加到 Unity 场景中。 可以按光源禁用阴影,但也可以通过“质量”设置对其进行整体控制。
        转到“编辑” > “项目设置”,然后选择“质量”类别 > 为“UWP 平台”选择“低质量”。 还可以直接将“阴影”属性设置为“禁用阴影”。
     5.减少多边形计数,方法如下:1).场景中删除物体;2).抽离资产;3).LOD的使用
 了解Unity中的Shader:
     1.查看:shader中右上角的齿轮 -> Compile and show code
     2.Fragment Shader中调用的次数多很多,所以重点优化Fragment(Pixel)Shader:
        2.1.不要使用内置的PBR着色器,而使用混合现实工具包提供针对混合现实项目进行优化的 MRTK 标准着色器供针对混合现实项目进行优化的 MRTK 标准着色器
        2.2.着色器预加载
        2.3.限制过度绘制(在Scene view mode中选择OverDraw),使用Occlusion Culling来避免
 内存建议:过多的内存分配和解除分配操作可能对全息应用程序产生负面影响,导致性能不稳定、帧冻结和其他不利行为
   垃圾回收(GC):不能频繁的分配和解除分配,优化GC回收的方法:
     在Start或Awake中缓存组件或引用;
     使用StringBuilder生成复杂字符串
     删除不再需要的 Debug.Log() 调用,或通过宏判断来开关是否编译调用
     如果全息应用通常需要大量的内存,请考虑在加载阶段(例如,在演示加载或过渡屏幕时)调用 System.GC.Collect()
 对象池的使用:非对象池常适合应用中生存期可变的可重用组件
 启动性能:AsyncOperation.allowSceneActivation先设为false,待加载完成后再设为true。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值