Table of Contents

Crear y configurar AR session

Para usar AR en Unity, primero hay que crear y configurar una AR session en la escena. Este artículo presenta varias formas principales de crear y configurar una AR session. Por lo general, después de crearla correctamente, en la vista Hierarchy se puede ver la siguiente estructura:

alt text

Antes de empezar

Crear una session con configuración predeterminada

En la vista Hierarchy, haz clic derecho en un área vacía y usa el menú EasyAR Sense > [ AR función ] > AR Session ([ función ] Preset) para crear una session preconfigurada. La session ya incluye los componentes frame source y frame filter adecuados para esa función.

En el código, puedes usar ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) para crear una session.

Por ejemplo, mediante EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) puedes crear una session para image tracking.

alt text

El código correspondiente es el siguiente:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Ten en cuenta que, al usar los presets ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder y ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, también debes pasar los parámetros de recursos. Por ejemplo, el siguiente código crea una session para sparse spatial mapping y especifica el material de la nube de puntos:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });

Si el script solo se ejecuta en el editor, también puedes usar los recursos predeterminados del editor:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());

El menú EasyAR Sense > AR Session (Preset) > ** enumera todos los presets de session disponibles y se puede usar como referencia.

alt text

Nota

Varias sessions ejecutándose al mismo tiempo en la misma escena entrarán en conflicto entre sí, así que en la escena solo puede quedar una session habilitada (GameObject.activeInHierarchy == true) como máximo.

Añadir componentes

Los componentes frame source y frame filter de la session se pueden añadir o eliminar según sea necesario después de crearla.

En la vista Hierarchy, selecciona AR Session (EasyAR) y haz clic derecho; después, mediante el menú EasyAR Sense > [ AR función ] > ** puedes añadir los componentes frame source y frame filter adecuados para esa función.

En el código, puedes usar ARSessionFactory.AddFrameSource<Source>(GameObject, bool) para añadir un componente frame source, o usar ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) para añadir un componente frame filter.

Por ejemplo, mediante EasyAR Sense > Image Tracking > Frame Filter : Image Tracker puedes añadir un nuevo image tracker a la session seleccionada.

alt text

El código correspondiente es el siguiente:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Precaución

La adición de componentes debe completarse antes de assemble. Una vez que la session empieza a ejecutar assemble y después de completarlo, cualquier adición o eliminación de componentes hará que la session entre en estado Broken y deje de funcionar.

Ten en cuenta que al añadir SparseSpatialMapBuilderFrameFilter y DenseSpatialMapBuilderFrameFilter, también debes pasar parámetros de recursos. Por ejemplo, el siguiente código crea un SparseSpatialMapBuilderFrameFilter para sparse spatial mapping y especifica el material de la nube de puntos:

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })

Si el script solo se ejecuta en el editor, también puedes usar los recursos predeterminados del editor:

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());

Después de crear un frame filter, puedes usar ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) para ajustar los parámetros del frame filter según el preset.

Por ejemplo, el siguiente código añade un nuevo image tracker a la session y lo configura con los parámetros del preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.

var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);

Al crear desde el menú no se pueden ajustar los parámetros según el preset, así que después de crear el componente hay que configurarlo según las instrucciones específicas de cada componente.

Eliminar componentes

Para eliminar un componente de la session, puedes seleccionar el componente correspondiente en la vista Hierarchy y pulsar Delete, o destruir (Destroy) el objeto correspondiente desde el script.

Nota

Deshabilitar el GameObject de un componente con SetActive(false) tiene el mismo efecto que eliminarlo.

Por ejemplo, para eliminar el image tracker de la session, puedes seleccionar Image Tracker y pulsar Delete.

alt text

Precaución

La eliminación de componentes debe completarse antes de assemble. Una vez que la session empieza a ejecutar assemble y después de completarlo, cualquier adición o eliminación de componentes hará que la session entre en estado Broken y deje de funcionar.

Efecto del orden de los componentes

El orden de los nodos hijo de frame filter de la session no tiene ningún efecto sobre la ejecución de la session.

El orden de los nodos hijo de frame source sí afecta al orden de selección de frame source durante el proceso de assemble. Solo se seleccionará como frame source real de la session el primer frame source disponible según el orden de transform.

Nota

El orden de los nodos frame source solo es válido si se modifica antes de assemble. Después de assemble, cambiar el orden no afecta al resultado de ejecución.

[Opcional] Crear session libremente

Si la session con configuración predeterminada no cubre tus necesidades, también puedes crear y configurar libremente una session según lo que necesites.

Puedes usar el menú EasyAR Sense > AR Session (Preset) > AR Session (Empty) para crear una session vacía sin componentes frame source ni frame filter.

En el código, puedes usar ARSessionFactory.CreateSession() para hacerlo.

ARSessionFactory.CreateSession();

Después añade los componentes frame source y frame filter adecuados según tus necesidades reales.

Por ejemplo, si quieres crear una session que incluya sparse spatial mapping y dense spatial mapping, puedes usar el siguiente código:

var session = ARSessionFactory.CreateSession();

var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);

ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);

List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));

ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);

Esto creará una estructura de session como la siguiente:

alt text

Siguientes pasos

Control de ejecución

Acceso a componentes y resultados

Referencia de componentes