我正在与Unity中的Hololens合作,并尝试绘制大面积(15x15x25)米的地图。我可以使用SpatialMapping
预制来绘制整个区域,但是我想对该网格进行一些空间处理以平滑地板和墙壁。我一直在尝试使用SpatialUnderstanding
,但是似乎很难对此进行扫描,hololens forums thread对此进行了详细说明。
当前,我不了解从SpatialMapping
到SpatialUnderstanding
的数据管道如何工作。为什么不能简单地使用SpatialMapping
中的SpatialUnderstanding
生成的网格?有没有更好的创建光滑表面的方法?
答案 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;