Vuforia和unity 官方案例Penguin Smart Terrain Sample

来源:互联网 发布:complete java 编辑:程序博客网 时间:2024/06/05 00:20

原文地址:官方链接
如有错误,烦请指正


企鹅例子项目提供了一个基于unity的完整开发的智能地形项目。该项目演示了用于定制智能地形应用程序逻辑的开发实践和技术,以及如何集成数字资产和将渲染技术应用于智能地形跟踪器返回的工件。

企鹅项目由三个统一场景组成:一个闪屏场景,一个加载指示器场景,以及企鹅智能地形场景。与智能地形相关的prefabs和assets都在企鹅场景中。
图片1
ARCamera实例代表场景中的设备摄像头,负责配置场景的世界中心定位,并在加载和激活该场景中使用的target dataset时渲染质量。

企鹅项目使用一个圆筒目标(Cylinder target)来初始化SmartTerrain实例(可以用Image Target 来替换成用图片来作为识别物)。这个初始化目标为场景提供了一个尺度参考,并建立了场景的主平面(Primary Surface)的位置和方向。
图片2
UIStateManager对象负责管理智能地形跟踪器的生命周期,并根据应用程序状态的变化呈现GUI元素。
SmartTerrain实例通过Target的智能地形组件在unity的inspector中启用并与初始化目标相关联。
图片3
默认情况下,每一个智能地形实例包含Primary Surface和一个Prop Template作为子对象。当需要跟踪地形时,任何应该被渲染的内容,都要添加为这个SmartTerrain实例的子对象。这就是为什么企鹅模型是这个SmartTerrain实例的子对象,而不是初始化的圆筒目标的子对象。

启用智能地形 Smart Terrain

在Inpector中,通过选择目标柱体上的目标行为组件的智能地形选项,为圆筒目标实例启用了智能地形。这导致将一个智能地形实例添加到配置为使用圆筒目标作为初始化目标的场景中。智能地形实例的遮挡范围也将被定义以匹配圆筒目标的尺寸。

通过勾选Cylinder Target的Cylinder Target Behaviour组件的Smart Terrain来启用智能地形。这回倒置一个将圆筒(Cylinder Target)作为识别目标的Smart Terrain实例被添加到场景中。Smart Terrain实例的遮挡范围也将被定义以匹配圆筒目标的尺寸。

penguin项目Prefabs配置解释
本文将介绍如何配置prefabs,并解释原因。

ARCamera

ARCamera预置件的数据集加载行为被配置为加载和激活sodacan dataset在Streaming Assets / QCAR文件夹中

World Center Mode选择SPECIFIC_TARGET
World Center选择Smart Terrain (我这里选择的是Primary Surface)
这些设置将地形网格的起源确定为场景的世界原点。这一点将对应于Primary Surface的中心。
图片4

Cylinder Target

Cylinder Target预制件已被配置为提供精确的规模测量现实世界的目标。这个项目提供的可打印的目标是包装在标准的12盎司汽水罐上,它的直径是66毫米。由于在Target Manager中定义了一个直径为0.66的Cylinder Target,因此定义了一个比例因子来将这个维度转换为目标的真尺度。mm字段的缩放比例定义为100(0.66 x 100 = 66 mm)。

Cylinder Target将初始化Smart Terrain实例区域中识别的Smart Target预制件实例。当Smart Terrain选项检查目标时,将添加一个Smart Target实例到预配置的场景中,以使用该目标进行初始化。
图片5

Smart Terrain

一旦在Smart Terrain组件上被检测到勾选Automatic Start,Smart Terrain预制实例就会自动启动网格更新。
图片6

在Unity inspector中使用预制组件的Smart Terrain实例定制

智能地形实例使用两个自定义事件处理程序:

  • 智能地形跟踪事件处理器(Smart Terrain Trackable Event Handler),实现了ITrackableEventHandler,启用和禁用初级表面网格和它的子对象响应跟踪事件。
  • 智能地形事件处理程序(Smart Terrain Event Handler), 实现ISmartTerrainEventHandler,负责将道具实例与PropBehaviours,和管理支持实例的生命周期。

How An Animated Model was Added to the Penguin Sample

该sample在Penguin Asset文件夹中提供了一个纹理贴图过的企鹅模型。PenguinAssets/ Prefabs 中可以找到企鹅的一个预制件,它包含一个动画和特征控制器。在场景中,企鹅预制件被添加为Smart Terrain预制件实例的子对象。这使得企鹅预制件和它的组件可以通过响应跟踪事件被Smart Terrain Trackable Event Handler程序化的启用和禁用。
图片7

Configuring

Penguin预制件配置了一组默认的物理和特征控制器(Character Controller)属性。您可以调整它们以修改企鹅模型的运动特性,以响应在设备屏幕上的触摸。这些触摸被光线投射到the Primary Surface上,以使 pengiun 移动到场景中正确的对应点。

Penguin.cs 脚本处理这些触摸,并调用Character Controller的 Move方法,移动向量将企鹅引导到指定位置。企鹅运动的速度是由public Movement Speed属性定义的,你可以在Inspector中设置。

How To Deploy the Penguin Sample

按照以下步骤构建和部署企鹅样本项目。企鹅样本是智能地形的最佳实践样本,演示了如何为智能地形应用程序设计有效的用户体验。

Building the app

  1. 选择File > Build Settings,再选择IOS或者Android平台
  2. 按照以下顺序将场景添加到构建场景中。
    图片8

企鹅应用程序在场景中的场景顺序
3. 填写一个 Bundle ID 在Player Settings > Other Settings.
4. 填名字
5. 选择Build生成一个.exe文件,或者选择Build & Run生成一个.exe文件并且在一个连接的设备上运行

Setting the stage

选择一个具有明显边框的可视区域,如桌面。舞台区域应该光线充足,灯光条件在整个游戏过程中应该保持一致。室内设置建议。

将圆筒目标放置在舞台上,远离舞台边界。

使用有详细模式的道具。智能地形跟踪器寻找与其他可跟踪类型相同的基于对比度的特征。

参见:Smart Terrain Workflow in unity中提供了更多信息和建议,提供了一个智能地形场景。

扫描阶段

推荐的扫描阶段的做法是,从接近初始化目标的设备摄像头开始,这样它几乎填充了摄像机的图像。一旦目标被识别,慢慢地将设备拉回,直到整个舞台都在相机的视野范围内。然后你可以移动到一边来产生框网格。在扫描阶段避免不稳定的相机运动,因为这将对跟踪器的能力产生负面影响,从而产生准确的舞台重建。当你正在扫描舞台区域时,最好是在平滑的连续轨迹中移动设备。

How To Play the Penguin App

企鹅样例实现了阶段扫描和游戏,作为应用程序执行的不同阶段。这些阶段是通过GUI元素来确认的,这些元素指示用户并提供按钮来完成扫描阶段和刷新场景。当应用程序首次启动时,用户会看到一个可以用容器和指令将设备指向目标的视觉引导。将引导引导到容器将会使Cylinder Target进入视图,使其能够被识别。这将使Smart Terrain初始化。
图片9
一旦初始化的目标被识别,用户将被提示缓慢地向后拉,这样的行为将使他们能够最有效地扫描舞台表面。他们在扫描舞台和重建他们放置的道具的过程中,将会在道具上用一个不断增加的冰表面和白色盒子来表示。这些盒子表明,这些道具已经被发现,它们的体积正在被重建。

用户可以通过单击Done按钮来指示完成扫描的时间。这将激活企鹅出现的游戏阶段,重建的道具将被渲染成冰山。

用户可以点击icey舞台表面来引导企鹅穿过舞台和冰山周围。这个动作演示了在重建的舞台和道具上使用一个特征控制器和unity的物理。
图片10

over!