Version: 2019.2
空间映射碰撞体 (Spatial Mapping Collider)
空间映射低级 API

空间映射渲染器 (Spatial Mapping Renderer)

__空间映射渲染器__组件提供空间映射表面的可视化表示。这对于通过可视化方式调试表面并向环境添加视觉效果非常有用。

系统定期向__空间映射渲染器__组件发送有关物理空间变化的数据。每次由空间映射系统向该组件通知这些变化时,该组件都会将返回的表面数据烘焙到包含网格过滤器 (Mesh Filter)网格渲染器 (Mesh Renderer) 组件的游戏对象中。空间映射渲染器组件会管理这些表面游戏对象的生命周期。也就是说,该组件负责在场景中创建、更新和销毁表面游戏对象网格渲染器。

Unity Editor 中显示的空间映射渲染器 (Spatial Mapping Renderer) 组件
Unity Editor 中显示的空间映射渲染器 (Spatial Mapping Renderer) 组件

Render Settings

下表列出了__空间映射渲染器__组件可用的所有唯一渲染设置 (Render Settings)。

设置 描述
Render State All Surface GameObjects take their material from the Render State setting. When you change the Render State setting (for example, by script during run time), all Surface GameObjects’ render Materials change to those of the chosen Render State setting. This reduces the number of draw calls, which in turn improves the rendering performance. Using a shared material also reduces the amount of memory used by the application during rendering. Select one of the three options to render Surfaces.

See Using the Spatial Mapping Renderer, below, for more information.
Occlusion Apply the Material defined in Occlusion Material. This is a transparent Material which hides GameObjects behind real world Surfaces. See Using the Spatial Mapping Renderer, below, for more information.

Note: This enables all of a Surface’s Mesh Renderers, overriding any other setting.
Visualisation Apply the Material defined in Visualization Material for visualizing the Spatial Mapping Surfaces (usually a wireframe Material) in your environment. See Using the Spatial Mapping Renderer, below, for more information.

Note: This enables all of a Surface’s Mesh Renderers, overriding any other setting.
None 选择此选项可禁用分配给空间映射表面的所有网格渲染器。
Occlusion Material 此处选择的材质是空间映射渲染器的 Render State 设置为 Occlusion 时应用的材质。默认设置为内置的 SpatialMappingOcclusion 材质。
Visual Material 此处选择的材质是空间映射渲染器的 Render State 设置为 Visualization 时应用的可视材质 (Visual Material)。默认设置为内置的 SpatialMappingWireframe 材质。

General Settings

See SpatialMapping General Settings.

使用空间映射渲染器

此组件提供了一种动态更改所有生成的表面上的材质的简便方法。Unity 提供了两种预先构建的材质类型供您使用:

Occlusion Material

此材质使游戏对象看起来透明,但通过游戏对象看不到全息图。例如,如果需要一个真实的桌子来隐藏位于其下方的游戏内全息对象,这可能会很有用。

Visual Material

这是 Unity 应用于空间映射渲染器组件中所有表面的线框材质。使用默认的线框着色器时,线框的颜色代表真实世界的距离。这通常是进行调试时最有用的选项,但也可以将其用于呈现视觉效果。该着色器使用颜色映射来指示距离;下表显示了这种颜色映射:

与 HoloLens 的距离 Color
0 到 1 米 黑色
1 到 2 米 红色
2 到 3 米 绿色
3 到 4 米 蓝色
4 到 5 米 黄色
5 到 6 米 青色
6 到 7 米 洋红色
7 到 8 米 栗色
8 到 9 米 蓝绿色
9 到 10 米 橙色
10 米或以上 白色
默认线框着色器用作__空间映射渲染器__组件中的 Visualization Material(线框中的颜色表示距离)
默认线框着色器用作__空间映射渲染器__组件中的 Visualization Material(线框中的颜色表示距离)

将新材质指定给 Visual MaterialOcclusion Material 时,表面游戏对象的材质不会自动更改。要将新材质应用于所有表面,必须将 Render State 设置为已更改的材质(__Visual Material__ 或 __Occlusion Material__)。

如果仅从 Unity Editor 中(直接在场景中的游戏对象上)分配 Render State 中的 Occlusion MaterialVisual Material 属性,则空间映射会与__空间映射渲染器__组件同时销毁它们。但是,空间映射不会销毁通过脚本随组件分配或更改的任何 Occlusion Material 或 __Visual Material__,因此需要手动销毁它们。

下面的代码片段会更改空间映射在运行时动态应用于所有表面游戏对象的材质。


SpatialMappingRenderer renderer = spatialMappingGameObject.AddComponent<SpatialMappingRenderer>();
renderer.visualMaterial = new Material(Shader.Find("VR/SpatialMapping/Wireframe"));
renderer.renderState = SpatialMappingRenderer.RenderState.Visualization;

表面游戏对象

__空间映射渲染器__组件会在运行时创建自己独立的一组表面游戏对象。这些游戏对象出现在场景中作为一个表面父游戏对象的子项:

示例表面父游戏对象和表面游戏对象子项
示例表面父游戏对象和表面游戏对象子项

__空间映射渲染器__生成的表面游戏对象包含以下组件

__空间映射渲染器__生成的表面游戏对象的 Inspector 视图
__空间映射渲染器__生成的表面游戏对象的 Inspector 视图

如果将多个__空间映射渲染器__组件添加到场景,则每个组件都会生成自己的一组表面游戏对象。例如,如果有两个游戏对象包含__空间映射渲染器__组件,则场景将包含两组表面游戏对象:每个组件在运行时生成一组。为了优化目的,请务必牢记这一点。


  • 2018–05–01 页面已发布

  • 在 2017.3 版中更新了 Hololens 空间映射文档

空间映射碰撞体 (Spatial Mapping Collider)
空间映射低级 API