Table of Contents

Creación y configuración de la sesión AR

Para usar AR en Unity, primero necesitas crear y configurar una sesión AR en la escena. Este artículo presenta varios métodos principales para crear y configurar una sesión AR. Generalmente, después de crear una sesión exitosamente, puedes ver la siguiente estructura en la vista Hierarchy:

alt text

Antes de comenzar

Crear una sesión con configuración predeterminada

En la vista Hierarchy, haz clic derecho en un espacio vacío, luego selecciona EasyAR Sense > [ Función AR ] > AR Session ([ Función ] Preset) para crear una sesión preconfigurada. La sesión viene con componentes frame source y frame filter preconfigurados para esa función.

En scripts, puedes usar ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) para crear una sesión.

Por ejemplo, selecciona EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) para crear una sesión para seguimiento de imágenes.

alt text

El código de script correspondiente es:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Nota: al usar ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder y ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, también debes pasar parámetros de recursos. Por ejemplo, este código crea una sesión para construcción de mapas espaciales dispersos 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 recursos predeterminados del editor:

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

El menú EasyAR Sense > AR Session (Preset) > ** lista todas las sesiones predefinidas disponibles.

alt text

[!NOTA] Múltiples sesiones ejecutándose simultáneamente en la misma escena entrarán en conflicto, por lo que solo debe haber una sesión habilitada (GameObject.activeInHierarchy == true) en la escena.

Agregar componentes

Puedes agregar o eliminar componentes frame source y frame filter después de crear la sesión según sea necesario.

En la vista Hierarchy, selecciona AR Session (EasyAR), haz clic derecho y elige EasyAR Sense > [ Función AR ] > ** para agregar componentes frame source y frame filter adecuados para esa función.

En scripts, usa ARSessionFactory.AddFrameSource<Source>(GameObject, bool) para agregar un frame source, o ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) para agregar un frame filter.

Por ejemplo, selecciona EasyAR Sense > Image Tracking > Frame Filter : Image Tracker para agregar un nuevo rastreador de imágenes a la sesión actual.

alt text

El código correspondiente es:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);

[!PRECAUCIÓN] Los componentes deben agregarse antes del ensamblado. Después de que la sesión comience o complete el ensamblado, cualquier adición o eliminación de componentes hará que la sesión entre en estado Broken y deje de funcionar.

Nota: al agregar SparseSpatialMapBuilderFrameFilter o DenseSpatialMapBuilderFrameFilter, debes pasar parámetros de recursos. Por ejemplo:

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

Para solo editor, usa recursos predeterminados:

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

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

Ejemplo para configurar un rastreador de imágenes con parámetros de ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion:

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

Al usar el menú, configura los parámetros manualmente después de crear el componente.

Eliminar componentes

Para eliminar un componente de la sesión, selecciónalo en Hierarchy y presiona Delete, o destrúyelo (Destroy) en un script.

[!NOTA] Deshabilitar (SetActive(false)) el GameObject del componente tiene el mismo efecto que eliminarlo.

Ejemplo: selecciona Image Tracker y presiona Delete para eliminarlo.

alt text

[!PRECAUCIÓN] Los componentes deben eliminarse antes del ensamblado. Después de que la sesión comience o complete el ensamblado, cualquier adición o eliminación de componentes hará que la sesión entre en estado Broken y deje de funcionar.

Impacto del orden de los componentes

El orden de los nodos hijos frame filter no afecta la ejecución de la sesión.

El orden de los nodos hijos frame source afecta la selección durante el ensamblado. Solo el primer frame source disponible en el orden de transform se seleccionará como frame source real de la sesión.

[!NOTA] El orden de los nodos frame source solo es efectivo si se modifica antes del ensamblado. Después del ensamblado, cambiar el orden no afecta el resultado.

[Opcional] Creación libre de sesión

Si las configuraciones predeterminadas no satisfacen tus necesidades, puedes crear y configurar sesiones libremente.

Usa EasyAR Sense > AR Session (Preset) > AR Session (Empty) para crear una sesión vacía sin componentes frame source o frame filter.

En scripts, usa ARSessionFactory.CreateSession():

ARSessionFactory.CreateSession();

Luego agrega los componentes frame source y frame filter según sea necesario.

Ejemplo para una sesión con funciones de construcción de mapas espaciales dispersos y densos:

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 sesión como:

alt text

Próximos pasos

Control de ejecución

Acceso a componentes y resultados

Referencia de componentes