空间理解受小范围限制

时间:2019-01-20 17:38:50

标签: c# unity3d spatial hololens

我正在与Unity中的Hololens合作,并尝试绘制大面积(15x15x25)米的地图。我可以使用SpatialMapping预制来绘制整个区域,但是我想对该网格进行一些空间处理以平滑地板和墙壁。我一直在尝试使用SpatialUnderstanding,但是似乎很难对此进行扫描,hololens forums thread对此进行了详细说明。

当前,我不了解从SpatialMappingSpatialUnderstanding的数据管道如何工作。为什么不能简单地使用SpatialMapping中的SpatialUnderstanding生成的网格?有没有更好的创建光滑表面的方法?

2 个答案:

答案 0 :(得分:1)

此解决方案最适合预生成的房间。换句话说,鉴于当前的局限性,不可能有一种最终用户可以使用的通用解决方案。

  • 我将从最后一个问题开始:“是否有一些更好的方法来创建光滑表面?”

    • 是的,在轮子上使用三脚架来生成初始扫描。鉴于硬件中加速度计和罗盘的分辨率有限,减小了一个线性轴,一个高度和一个旋转轴的变化,滚动(滚动在扫描过程中完全不应该改变)将导致更加精确的扫描。

    • 创建平滑表面的另一种方法是将网格导出到3D编辑程序,然后手动展平表面,然后将网格重新导入Unity3D。

  • “为什么不能在SpatialUnderstanding中简单地使用从SpatialMapping生成的网格?”

SpacialUnderstanding进一步将生成的网格划分为(8cm,8cm,8cm)体素,然后基于每个体素计算冲浪。为了控制性能和内存利用率,硬限制约为(10m,10m,10m)。可以实现为(128,128,128)体素。

任何尝试使用SpacialUnderstanding超出其定义的限制,都会由于底层数据结构的溢出而产生虚假结果。

答案 1 :(得分:-1)

您是否尝试过将SpatialMappingObserver.cs中的ScanSearchDistance更改为15.0f?

        public const float ScanSearchDistance = 15.0f;