模拟环境
模拟环境是充当现实世界快照的预制件。在 Simulation View 中,可以预览您的内容对应用程序检测到的表面和其他世界数据的反应情况。Unity MARS 会生成环境列表,将这个列表用于从项目中带有“Environment”资源标签的预制件进行模拟。要查看所有这些环境,请在 Project 视图中搜索 l:Environment
。
创建模拟环境
要创建新的模拟环境,请在 Project 视图中右键单击,然后选择 Create > MARS > Simulated Environment Prefab。
此预制件的根将包含 MARSEnvironmentSettings
、PlaneExtractionSettings
组件以及 Clipping Region 游戏对象内的 XRayRegion
组件。前两个组件可以设置模拟的默认摄像机视图,设置 Device View 的起始位置,从环境生成人工合成平面,以及操纵环境的内部。
另外,也可以从头开始设置环境预制件。请遵循以下步骤:
- 根据需要布置预制件。
- 在该预制件的根上添加
MARSEnvironmentSettings
组件。 - 将“Environment”资源标签分配给该预制件。
要在 Simulation View 中查看您的环境,请从 Unity 的主菜单中选择 Window > MARS > Developer > Update Simulation Environments。
动画环境元素
在任何 Unity MARS Simulation View 中使用时,模拟环境包含的任何 PlayableDirectors
都会自动启动。这是向环境中添加动画元素的推荐方法。最好是使用父级为动画元素设置一个初始偏移量。
会话录制内容
创建环境时,还可以录制环境的演练,以便稍后在 Unity MARS 应用程序上进行测试。 有关更多信息,请参阅会话录制内容的文档
环境设置
MARSEnvironmentSettings 组件保存与在模拟视图中查看模拟环境有关的所有数据。在其中,可以控制默认摄像机姿态,定义模拟的开始位置,以及配置以下设置:
环境信息
这些属性控制 Simulation View 的起始摄像机位置和 MARSCamera 的起始位置。
单击 Save Environment View 按钮,可将当前的 Simulation View 摄像机姿态用作环境的默认 Simulation View 摄像机姿态。这通常是 2.5D 的视图,可让您查看整个环境。
单击 Save Simulation Starting Pose 按钮,可将当前的 Simulation View 摄像机姿态用作 Device View 摄像机的起始姿态。因为 Device View 模拟在环境中移动的用户,所以此起始姿态通常是在启动 AR 会话时用户头部在房间里的位置。
渲染设置
使用 Unity MARS 中的复合渲染 (Composite Rendering) 来渲染人工合成环境时,渲染设置将覆盖场景的光源设置 (Light Settings)。这些设置仅限于实时光照选项,因为任何烘焙的设置都与场景相关联。
生成人工合成平面
从模拟中保存平面
(这是为环境创建创作平面的推荐方法)
在预制件模式下检查激活的模拟环境时,可以使用 Save Planes From Simulation 按钮将环境中生成的平面替换为模拟中的当前平面。如果希望环境包含您在 Simulated Device View 中动态发现的平面,而不是通过整个环境中随机射线投射创建的平面(如下所述),这会很有用。
要录制模拟中的平面,请按照以下步骤操作:
- 从空白场景开始。
- 添加平面可视化工具。
- 在 Simulation View 中打开您的环境。
在 MARS Panel 中的 Environment Hierarchy 下拉选单下,单击环境右侧的箭头。此时会将您的 Scene 视图设置为查看单独的环境。
启动 Device View。从 Unity 的主菜单中选择 Window > MARS > Device View,然后在 Device View 中单击 Play 按钮以开始模拟。
- 探索场景,并从自然角度观察所有表面。平面可视化工具在 Unity MARS 发现平面时显示平面的几何形状。
- 在单独预制件的层级视图中(不是在 MARS Panel 的 Environment Hierarchy 中)选择环境根。
- 在
MARS Environment Settings
组件中,单击 Save Planes From Simulation 按钮。 - (可选)检查、清理和调整平面。平面是 GeneratedPlanes 根下的 SynthesizedObject。
- 保存您的预制件。
平面提取设置
PlaneExtractionSettings
组件可让您从环境中的网格渲染器生成人工合成平面。
当前,只有网格渲染器可以促成平面提取。Unity MARS 不支持从其他类型的渲染器(如带蒙皮的网格渲染器和精灵渲染器)生成平面。
单击 Extract Planes 按钮以运行此过程。
注意:如果场景中存在以前生成的平面(以 Generated Planes 游戏对象为父级),Unity MARS 会将这些平面销毁。如果要保留其中的任何平面,可以在提取平面之前将要保留的平面移出父级的层级视图。
体素生成参数
平面提取的第一步包括从环境网格生成点云以及将每个点添加到 6 个体素网格之一(3D 中每个基本方向对应一个)。为了创建点云,Unity MARS 从场景边界内的随机位置进行射线投射。针对射线的产生方式、体素大小以及将点添加到体素的方式,有一些相关参数可以设置。请将 Raycast Count
设置为环境的面积 * 50,000 以便在平面提取期间获得良好覆盖率。如需了解这些参数的更多信息,请将鼠标光标悬停在每个设置上以查看其简短说明。
平面查找参数
下一步,在每个体素网格中,根据具有足够点数的体素来找到平面。此步骤的参数包括点密度阈值、最小平面大小、平面合并距离以及允许平面占用的空白区域。设置介于 0.2 和 0.4 之间的 In Layer Merge Distance
通常会为您提供纯净的创作平面。如需了解这些参数的更多信息,请将鼠标光标悬停在每个设置上以查看其简短说明。
XRay 区域组件
创建模拟环境预制件时,XRay 区域组件位于 Clipping Region 游戏对象内。XRay 区域设置了可以透过外墙和其他障碍物看到的环境区域。XRay 分为三个区域:天花板、内部和地板。Unity MARS 根据以下条件来剔除一个区域:
- 如果摄像机在天花板上方,天花板将被完全剔除;否则,天花板完全可见。
- 如果摄像机在地板下方,地板将被完全剔除;否则,地板完全可见。
- 摄像机面向公告牌且该公告牌位于
XRayRegion
组件位置的中央时,内部将被剔除。
以下示例根据 XRay 区域组件的 Clip Offset 参数将公告牌推向摄像机。View Bounds 指定剔除区域的一般大小,应覆盖整个房间。
任何受 XRay 系统影响的渲染器均应使用 MARS/Room X-Ray
着色器。使用此着色器的现有标准材质位于 Content/Common/Materials
中,这些材质包括地板、墙壁、天花板、地毯和装饰物。
XRay 碰撞体组件
XRay 区域还应该禁用外部碰撞体,以便用户可以将内容拖放到环境中。要启用此功能,任何外部碰撞体都应附加 XRay 碰撞体组件。