Guía de desarrollo de espacios Snapdragon (12)


6 motor irreal

6.1 Configuración

6.1.1 Guía de configuración de Unreal Engine

Esta guía explicará en detalle cómo comenzar con el SDK de Snapdragon Spaces en Unreal Engine.

6.1.1.1 Requisitos previos

Tenga en cuenta que el SDK de Snapdragon Spaces actualmente admite las versiones 4.27 y 5.0 de Unreal Engine Editor. Además, debido a las limitaciones del complemento OpenXR, solo se admite Windows como plataforma de desarrollo. Desafortunadamente, el complemento no es compatible con Unreal Engine 5.1 y superior, y solo es compatible con OpenXR en Unreal Editor Win64.

Se debe agregar compatibilidad con la compilación de Android cuando se instala Unreal Engine para poder exportar archivos .apk. Siga las instrucciones de Unreal (se abre en una ventana nueva) para configurar el SDK y el NDK de Android.

6.1.1.2 Paso 1: Crear un proyecto

Para crear un nuevo proyecto de Unreal Engine, siga los pasos de este artículo en la documentación de Unreal (se abre en una ventana nueva) para proyectos AR . La sección y 设置空白项目se puede ignorar si no se requiere el ejemplo de importación .添加 Pawn 和游戏模式创建 AR 会话

6.1.1.3 Paso 2: Importar complemento

Para importar el complemento Snapdragon Spaces al motor, simplemente extraiga SnapdragonSpacesla carpeta del archivo a la carpeta SnapdragonSpaces_Pluginen la ruta de instalación del motor .Engine/Plugins/Marketplace

inserte la descripción de la imagen aquí

Advertencia Si la carpeta
no se crea en su motor , puede crearla en la carpeta y luego copiarla . Tenga en cuenta que Unreal solo detectará complementos si siguen la ruta sugerida.MarketplacePluginsSnapdragonSpaces

6.1.1.4 Paso 3: Importar muestras

Para importar las muestras de Snapdragon Spaces a su proyecto, abra el archivo zip SnapdragonSpaces_Samples y Configcopie la carpeta al directorio raíz del proyecto y sobrescriba el archivo existente, luego copie el complemento ubicado en la carpeta Complementos de la carpeta del proyecto SnapdragonSpacesSamplesen la carpeta Complementos (si La carpeta de complementos en su proyecto no existe, continúe y créela). Tenga en cuenta que SnapdragonSpacesSamplesel complemento requiere el complemento Snapdragon Spaces. Antes de agregar los complementos de ejemplo, asegúrese de que el complemento Snapdragon Spaces esté agregado a su proyecto. Las subcarpetas de contenido incluyen la carpeta de muestras y la carpeta pública. La carpeta pública contiene planos básicos para el uso adecuado de los dispositivos AR.

Hacer visible la carpeta del complemento en el proyecto.
Para acceder al contenido de muestra de Snapdragon Spaces, active la visibilidad del complemento del proyecto en el editor.inserte la descripción de la imagen aquí

6.1.1.5 Paso 4: cambiar la configuración del proyecto

Para habilitar el complemento Snapdragon Spaces OpenXR, navegue hasta Configuración del proyecto en Editar > Complementos > Realidad mixta y habilite el complemento Snapdragon Spaces .

inserte la descripción de la imagen aquí
En Editar > Complementos > Realidad virtual, verifique que el complemento OpenXR también esté habilitado.

inserte la descripción de la imagen aquí

Advertencia
Asegúrese de que el complemento OpenXRHandTracking esté deshabilitado. Puede causar un conflicto con la funcionalidad de Snapdragon Spaces.

Se requieren ciertas configuraciones para crear paquetes. Verifique que su proyecto esté configurado correctamente en Configuración del proyecto > Espacios Snapdragon.

inserte la descripción de la imagen aquí
Aquí hay una explicación de los puntos en las capturas de pantalla:

  1. Actualizar la verificación de la configuración. Haga esto después de aplicar los cambios en esta pestaña.
  2. Muestra un mensaje de error cuando hay un problema con una función habilitada.
  3. Muestra las funciones que se pueden habilitar.
  4. Muestra mensajes de error y advertencia con la configuración del proyecto.
  5. Mostrar configuraciones obligatorias. Todas estas opciones deben estar habilitadas para continuar con la compilación.
  6. Muestra la configuración recomendada para un mejor rendimiento.

6.1.1.6 Opcional: personalizar la configuración del controlador

El complemento Snapdragon Spaces Unreal Engine puede generar controladores cuando se inicia la aplicación en el dispositivo host. Esta función está habilitada de forma predeterminada en la configuración del complemento, ubicada en Editar > Configuración del proyecto > Complementos > Snapdragon Spaces (haciendo clic en el engranaje).

Si necesita una implementación personalizada con una apariencia diferente y una funcionalidad ligeramente diferente, puede crear un archivo de controlador alternativo siguiendo los pasos descritos en la sección Controladores personalizados .

Los archivos generados mediante estos pasos se pueden vincular a la configuración del proyecto. El interruptor Usar controlador personalizado debe estar habilitado (y la opción Iniciar controlador en host también debe estar habilitada) para que se pueda seleccionar la ruta al archivo del controlador alternativo.

6.1.1.7 Opcional: Agregar un nuevo perfil de interacción

Para utilizar y crear nuevos perfiles de interacción distintos de los incluidos en el complemento Snapdragon Spaces, puede crear una nueva clase. La clase puede heredar IModuleInterfaceuna IOpenXRExtensionPlugininterfaz e implementar funciones StartupModule, ShutdownModuley . En se deben crear las claves necesarias y en el perfil de interacción esperado se debe configurar, puedes ver cómo se hace en la clase. Asegúrese de que este nuevo módulo esté cargado durante la fase de carga. Finalmente, puede usar las claves que creó en la clase anterior para crear las acciones y asignaciones de ejes que necesita y usar las entradas en su proyecto.GetDisplayNameGetInteractionProfileStartupModuleGetInteractionProfileFSpacesInputExtensionPostConfigInit

6.1.2 Configuración de escena

ADVERTENCIA
Esta guía asume conocimientos previos sobre el desarrollo de XR en Unreal Engine. Para obtener una descripción más detallada, visite la página de documentación introductoria (se abre en una ventana nueva).

Las muestras de Snapdragon Spaces contienen planos listos para usar para casos de uso comunes de AR.

6.1.2.1 Plano básico

Estos planos están listos para funcionar en el entorno AR y son la base para el proyecto de ejemplo.

BP_GameMode(ubicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Núcleo) define las reglas para la experiencia. Actualmente solo establece la clase de peón predeterminada en personalizada BP_Pawn. Para evitar tener que personalizarlo para cada mapa, vaya a Configuración del proyecto > Mapas y modos y anule el modo de juego predeterminado .

inserte la descripción de la imagen aquí
En Unreal Engine, un peón es la representación física del usuario y define cómo el usuario interactúa con el mundo. Personalizado BP_Pawn(que se encuentra en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Núcleo) se puede usar con controladores gaze o 3DoF para interactuar. Además, incluye implementaciones de estos controladores de interacción para probarlos en el editor.

inserte la descripción de la imagen aquí
D_ARSessionConfig(en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Núcleo) define las capacidades utilizadas en las sesiones de AR. Consulte la documentación de Unreal (se abre en una ventana nueva) para obtener información básica sobre este activo. Actualmente, BP_Pawn define la configuración de sesión utilizada en los ejemplos.

6.1.2.2 Thru (solo para dispositivos MR)

Passthrough (se abre en una ventana nueva) se refiere a la posibilidad de transferir el entorno físico como una imagen al dispositivo de realidad virtual. Se puede habilitar o deshabilitar a través de un nuevo widget con una casilla de verificación adjunta al menú principal. Este widget solo funcionará para el usuario si el dispositivo es compatible con PassThrough. La verificación se realiza BP_MainMenuWidgeten el plano BeginPlaycon una nueva función que recuperará un bool si se admite el paso a través .IsPassthroughSupported()SpacesEngineSubsystem

WBP_PassthroughLa casilla de verificación llama a una función en SpacesEngineSubsystem SetPassthroughEnabled(bool), que establecerá bPassthroughEnabledun nuevo valor para, que permitirá al usuario ver u ocultar la imagen del entorno físico. SetPassthroughEnabled(bool)Otra forma de llamar es utilizar entradas vinculadas a XRController(L) Xy .XRController(R) ASwitchPassthrough

bPassthroughEnabledSe puede GetPassthroughEnabled()acceder al valor de en cualquier momento mediante , o OnChangePassthroughvincularlo cuando se cambia mediante delegado .

inserte la descripción de la imagen aquí

6.2 Interacción

6.2.1 Componentes interactivos

6.2.1.1 Plano del controlador

La implementación de los diferentes controladores se realiza en componentes para su fácil ampliación o sustitución en actores.

La clase de componente principal BP_ControllerComponent(ubicada en SnapdragonSpacesSamples Content > SnapdragonSpaces > Common > Core > Components) tiene acceso a los controladores de mirada y puntero. El plano también establece la base para gestionar las interacciones e incluye algunas opciones para que los desarrolladores las personalicen en todos los controladores derivados.

  • Activación automática : indica si el controlador está habilitado de forma predeterminada.
  • Inicio retrasado : la cantidad de tiempo que debe transcurrir antes de que se habilite la interacción cuando la aplicación inicia o carga un nuevo mapa.
  • Componente de etiqueta : el nombre de la etiqueta (de la función de peón) en el componente principal al que se hará referencia más adelante desde la implementación del componente del controlador.

Para interactuar con los componentes del controlador o crear componentes de subcontrolador personalizados, algunas funciones a considerar son:

  • Inicio : este evento solo debe llamarse cuando el controlador se inicializa por primera vez; no se admite la anulación. Lo mejor es llamar desde el principio jugando nodo.
  • Start_Implementation : esta función contiene una inicialización específica para cada componente secundario.
  • Establecer controlador predeterminado : configura si el componente debe activarse después de la inicialización. Por lo tanto, sólo es útil si la llamada se realiza antes de la función Iniciar.
  • Habilitar : habilita el componente.
  • Desactivar : Desactiva el componente.
  • Is Enable : Devuelve si el componente está habilitado.
  • Pulsar/soltar botón : utilice el componente de interacción del widget para gestionar las interacciones de los botones.
  • Is Over Interactable Widget : devuelve si el componente interactivo del widget apunta a un widget.


El elemento clave del controlador de proyecto XR es小部件交互组件 . Todos los componentes o derivados sólo deben establecer reglas de interacción basadas en el tipo de controlador. Para obtener información básica sobre este componente, consulte la documentación de Unreal (se abre en una ventana nueva).

6.2.1.2 Controlador de mirada

El controlador de mirada BP_GazeControllerComponent(ubicado en SnapdragonSpacesSamples Content > SnapdragonSpaces > Common > Core > Components) administra la transmisión de rayos y la interacción con los actores de widgets en la escena, así como la funcionalidad de interacción retrasada y la funcionalidad de "clic" del puntero.

Limitaciones del puntero de mirada
Actualmente, el puntero de mirada solo puede interactuar con actores de widgets en la escena, mientras que el controlador de puntero puede interactuar con widgets y actores 3D.

Algunas opciones se pueden personalizar para los desarrolladores:

  • Mover retícula para golpear : si este booleano está habilitado y el usuario está mirando el personaje interactivo, la retícula se moverá a la posición interactiva del personaje.
  • Duración del temporizador : la cantidad de segundos que el usuario debe mirar un elemento para seleccionarlo.
  • Distancia predeterminada : cuando bMoveReticleToHit está activo, esto establece la distancia a la que se dibujan los controladores de mirada.
  • Sesgo vertical : la posición vertical de la retícula, 0 es el centro de la pantalla, 1 es la parte superior de la pantalla, -1 es la parte inferior de la pantalla.
  • Anillo exterior de la retícula : el material de marca del anillo exterior. Si es NULL, se supone que el anillo exterior está deshabilitado. En desuso en la versión 0.15.0 del SDK.
    inserte la descripción de la imagen aquí
    Finalmente, la retícula que utiliza la muestra para señalar el mundo consta de un componente de widget oculto y un componente de capa de volumen. Todos los componentes relacionados con la mirada siempre se distinguen mediante la etiqueta del componente (mirada), y los componentes del controlador asumen que el componente de interacción de control de la mirada es siempre padre de otros componentes necesarios.
  • Capa estéreo : para evitar la fluctuación del puntero, se recomienda renderizar texturas en una capa estéreo. Para funcionar correctamente, se debe habilitar Live Texturing y la forma de capa estéreo debe establecerse en cuatro capas . Tenga en cuenta que Unreal interpreta los valores de transformación de este componente como relativos a la cámara, no relativos al componente principal o al actor al que está adjunto, como es común en otros componentes. función Update Reticle Position(en el plano del componente) para mover el widget a la posición de interacción y calcular la posición relativa a la cámara para usar en la capa estéreo. Sin embargo, el tamaño debe definirse utilizando la variable Tamaño cuádruple en lugar de una proporción. Además, la textura no se inicializa porque el componente del controlador copia en ella la representación del componente del widget .

inserte la descripción de la imagen aquí

  • Componente de widget : este componente está oculto porque la capa estereoscópica es responsable de volver a representar los punteros. La textura original se puede modificar desde WBP_GazePointerActivos (ubicados en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > UI). Utiliza un material estático para el aro interior ( MI_Reticle_Inner) y un material dinámico para el aro exterior ( MI_Reticle_Outer). Este material dinámico define un parámetro ( 百分比) para completar el efecto visual de la interacción en forma de cruz.

6.2.1.3 Controlador de puntero

El comportamiento principal del controlador de puntero BP_PointerControllerComponentse implementa en (ubicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Núcleo > Componentes). Funciona igual que los otros controladores, pero la inicialización también determina si se usa en un dispositivo que admita 3DoF o 6DoF. Los controladores que utilicen el perfil de interacción de Microsoft se habilitarán automáticamente como controladores 3DoF, y los controladores que utilicen el perfil de interacción de Oculus se 运动控制器组件habilitarán automáticamente como 6DoF en formato .

inserte la descripción de la imagen aquí
Tenga en cuenta que al utilizar 3DoF, la mano seleccionada debe ser la mano izquierda. Para 6DoF, la mano seleccionada puede ser izquierda o derecha, dependiendo de para qué mano esté diseñado el controlador. Además, los desarrolladores pueden elegir qué controlador maneja la interacción.

La función Spawn Controller genera hijos de la clase actor establecida en la variable de clase del controlador de movimiento .BP_PointerController

BP_PointerControllerLos actores (ubicados en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Colocable) están listos para administrar cada controlador individual.

运动控制器组件Agregado como un subcomponente del componente raíz para administrar cada controlador. Parte de este componente 可视化permite renderizar modelos 3D en el mundo virtual después de que el controlador se mueve en el mundo real, simplemente habilitando la opción "Mostrar modelo de dispositivo". Además, si el desarrollador está interesado en mostrar la malla predeterminada por dispositivo según el archivo de configuración, debe seleccionar OpenXR en la opción "Mostrar fuente del modelo". De lo contrario, los desarrolladores pueden elegir "Personalizado" para personalizar y agregar una malla en "Malla de visualización personalizada". Finalmente, en 运动控制器la sección, el desarrollador deberá asignar el tipo de entrada.

inserte la descripción de la imagen aquí
运动控制器组件Debe conectarse solo cuando la interactividad está habilitada : 小部件交互组件para rastrear adecuadamente el movimiento del controlador en el mundo real y 静态网格体组件(llamado cuadrícula de puntero láser en el ejemplo) para visualizar el puntero. Independientemente de las interacciones, si se utiliza un dispositivo 6DoF, el componente principal debe conectarse BP_XRControllerRepresentationmediante (ubicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Colocable) 子 Actor 组件para mostrar el controlador y sus animaciones.

6.2.1.4 Controlador de seguimiento manual

El controlador de seguimiento manual BP_HandTrackingControllerComponent(ubicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Común > Núcleo > Componentes) es responsable de generar y habilitar los actores necesarios para las interacciones remotas mediante el seguimiento manual. Estos actores manejarán la interacción automáticamente. Este controlador solo estará activo si la función de seguimiento manual ubicada en Configuración del proyecto > complemento Snapdragon Spaces está activa. El controlador permitirá la interacción entre los actores del widget en la escena y los actores que pueden interactuar con el seguimiento manual. Obtenga más información sobre cómo funcionan las interacciones de seguimiento manual en el ejemplo de seguimiento manual .

Limitaciones del controlador de seguimiento manual
Actualmente, las interacciones de seguimiento manual no están disponibles en Unreal Engine Editor.

6.2.1.5 Hoja de referencia de entrada

Botones para acciones de entrada:

controlador principal Controlador XR derecho Controlador XR izquierdo
elegir haga clic en el panel táctil botón disparador derecho botón disparador izquierdo
Interruptor de mirada/puntero botón de menú nulo botón de menú izquierdo
panel táctil panel táctil nulo palanca de mando izquierda
Confirmación del punto de anclaje haga clic en el panel táctil Cualquier botón de disparo Cualquier botón de disparo

Uso de los tres modos de entrada
En la aplicación de ejemplo, existen diferencias entre los dispositivos AR y VR/MR cuando se usan tres modos de entrada:

  • Dispositivos AR : el cambio entre seguimiento manual, controladores de mirada y controladores de puntero debe realizarse mediante el botón de menú.
  • Dispositivos VR/MR : Al utilizar el botón de menú, los usuarios solo pueden cambiar entre controladores de mirada y controladores de seguimiento manual/puntero. El cambio entre la entrada de seguimiento manual y el controlador del puntero (y viceversa) se realizará automáticamente según el estado de seguimiento del controlador. Cuando no se esté rastreando el controlador, el sistema cambiará automáticamente a la entrada de seguimiento manual. Cuando se utiliza la entrada de seguimiento manual y se detecta un controlador, el sistema cambiará automáticamente al modo de entrada del controlador de puntero.

6.2.1.6 Interfaz de usuario

Los widgets 3D ubicados en el mundo deben BP_3DWidgetcrearse utilizando Blueprints (ubicados en Contenido de SnapdragonSpacesSamples > Snapdragon > Común > UI) y definir la UI en un WidgetComponent. Para poder utilizar un controlador de mirada o de puntero, debe ser una subclase de esta clase.

6.2.2 Ejemplo de interacción

Este ejemplo demuestra cómo interactuar con objetos 3D y una interfaz de usuario 2D en el espacio mundial.

6.2.2.1 Cómo funciona el ejemplo

Este ejemplo demuestra cómo interactuar con la interfaz de usuario y otros objetos del juego en la escena.

Los paneles de interfaz de usuario flotantes proporcionan elementos de interfaz de usuario comunes e interactivos, como botones y barras de desplazamiento. Mientras que los botones funcionan con la mirada y los punteros del dispositivo, las barras de desplazamiento del ejemplo solo funcionan con los punteros del dispositivo. Además, otro elemento de la interfaz de usuario en la escena muestra la entrada del panel táctil del controlador host.

Finalmente, el objeto cubo interactivo se puede agarrar usando el controlador para demostrar la interacción del objeto 3D. Para que sea un actor interactivo válido, debe tener colisiones superpuestas o de bloqueo con el canal 3DWidget y requiere una BPI_Interactableinterfaz (que se encuentra en Contenido de SnapdragonSpacesSamples > Snapdragon > Común > Colocable). Para agregar una interfaz a un actor, vaya a Configuración de clase > Interfaces > Interfaces implementadas > Agregar opciones de plano.

inserte la descripción de la imagen aquí

6.2.2.2 Controlador del puntero del dispositivo

La implementación del controlador del puntero del dispositivo se divide en varios planos, que se describen en detalle en las siguientes secciones.

6.2.2.2.1 Componentes del controlador de puntero

BP_PointerControllerComponentLos archivos de planos (ubicados en SnapdragonSpacesSamples Content > SnapdragonSpaces > Common > Core > Components) se pueden agregar a las clases de peones para interactuar con la interfaz de usuario 2D y 3D mediante punteros.

Este componente hereda de una clase principal BP_ControllerComponent( consulte Configuración de escena ) y escribe los scripts base que gestionan las interacciones con el mundo. La única opción personalizable es la clase de controlador de movimiento , que se refiere a la clase de personaje que aparecerá cuando se active ese controlador.

inserte la descripción de la imagen aquí

6.2.2.2.2 Controlador de puntero

BP_PointerControllerLos archivos de planos (ubicados en SnapdragonSpacesSamples Content > SnapdragonSpaces > Common > Placeable) administran la transmisión de rayos y la interacción con widgets y actores 3D. Utilice un canal de seguimiento personalizado llamado 3DWidget . Finalmente, para visualizar el controlador del puntero del dispositivo, se representa una malla de cilindros desde el origen del controlador a lo largo de la dirección en la que se dirige el controlador. De forma predeterminada, es de color rojo, pero una vez que llega a un objeto interactivo válido, cambia su color a verde. Además, la duración de la imagen se ajusta tomando el punto de impacto de raycast como punto final.

inserte la descripción de la imagen aquí

6.3 Ejemplo de percepción

6.3.1 Ejemplo de anclaje

Este ejemplo demuestra cómo crear y destruir puntos de anclaje locales y guardados para realizar un seguimiento preciso de los puntos en el mundo real. Consulte la documentación de Unreal Engine para obtener información básica sobre los anclajes y cómo funciona ARPin de Unreal Engine (se abre en una ventana nueva) y el almacenamiento local de ARPin (se abre en una ventana nueva). Para utilizar esta función, debe estar habilitada en la configuración del complemento OpenXR en Configuración del proyecto > Complemento Snapdragon Spaces.

6.3.1.1 Cómo funciona el ejemplo

De forma predeterminada, al abrir el ejemplo, aparece un artilugio blanco a 1 metro frente a la cámara, pero si se detecta un impacto frente a la cámara, el artilugio será amarillo y se ubicará en la ubicación del impacto. En este ejemplo, el usuario tiene dos formas de colocar el gizmo en su ubicación actual: tocando la selección en el controlador o usando el botón de creación que aparece en la interfaz de usuario flotante cuando el controlador de mirada está habilitado .

Después de colocar el artilugio, aparecerá un artilugio blanco simple que indica que no es ARPin y no será rastreado. Los artilugios rojos, verdes y azules aparecen una vez que la función subyacente informa el ancla rastreada. Esto también adjuntará ARPin al objeto. Si un dispositivo de seguimiento ya no realiza el seguimiento o falla la creación de ARPin, se coloreará de rojo. Si el ancla se guarda en el almacén de anclas local, el componente CubeMesh se mostrará en el centro del widget.

Las opciones disponibles para el usuario en este ejemplo son:

  • Destruir todas las anclas : botón para eliminar todos los adornos locales colocados en el mundo. Esta acción no destruye los anclajes guardados en la tienda.
  • Cargar todos los anclajes guardados : botón para cargar todos los anclajes guardados y mostrarlos como widgets locales colocados en el mundo.
  • Limpiar tienda : Botón para eliminar todos los anclajes guardados de la tienda. Esta acción no borra los gadgets locales colocados en el mundo.
  • Guardar el ancla creada en la tienda local : una casilla de verificación para guardar el widget local como un ancla guardada cuando se crea.

inserte la descripción de la imagen aquí

6.3.1.2 Administrador de anclaje

BP_AnchorManagerEl Blueprint (ubicado en SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > Anchor > Placeable) centraliza la creación y destrucción de adornos. Este plano vincula eventos en el peón para interactuar con la instancia (en este caso, una selección de toque en el controlador).

Para habilitar y deshabilitar anclajes espaciales, 切换空间要素el método debe usarse con anclajes espaciales como características.

Además, en BP_Pawn, se agrega un componente de escena como componente raíz para los artilugios no colocados. Algunas de las opciones que los desarrolladores pueden personalizar para adornos no colocados incluyen:

  • AnchorTag : el nombre de la etiqueta definido en el componente de escena en BP_Pawn, utilizado como raíz para los artilugios no colocados.
  • DistanceGizmo : La distancia del gizmo no colocado frente a la cámara.

Para colocar el widget, el administrador lo separa de la raíz y usa su transformación para crear el widget ARPin.
Además, puede aprender cómo Update Hitcombinar la implementación de anclajes con pruebas de acierto en funciones.

6.3.1.3 Aparatos

BP_GizmoEl archivo de plano (ubicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Muestras > Ancla > Colocable) es responsable de crear el ARPin. El nodo PinComponent (se abre en una nueva ventana) se utiliza para hacer esto, como se muestra en la imagen a continuación.

ADVERTENCIA
Para el complemento SnapdragonSpaces, debe agregar el componente que debe anclarse ( Component to Pin ) y la transformación que debe anclar el componente ( Pin to World Transform ); si una de las entradas está vacía, la creación de ARPin falla.
inserte la descripción de la imagen aquí

Si el gizmo tiene habilitada la variable bAutoSave, guárdela en el almacén ancla después de asignar el ARPin.
La gestión del estado del Pin se gestiona en la casilla de verificación de este plano.
Finalmente, elimina manualmente el pin cuando el artilugio se destruye y tiene un ARPin válido.

6.3.1.4 Cargar y guardar puntos de anclaje

ADVERTENCIA
Asegúrese de observar su entorno para generar mejores mapas de seguimiento y reducir los tiempos de guardado y carga. Guardar varios anclajes a la vez bloquea el hilo principal, por lo que se debe utilizar una devolución de llamada para guardar los anclajes posteriores.

La interfaz OpenXR nos brinda la capacidad de cargar y guardar ARPin en el almacenamiento local utilizando el complemento Snapdragon Spaces, y estas funciones se implementan en un hilo asíncrono para evitar problemas de congelación en la aplicación. Para ello, los desarrolladores deben considerar:

  • Cargar ARPins desde el almacenamiento local
    • Cargue todos los ARPin desde el guardado local. Este nodo nos devuelve un mapa de nombres y ARPins. Estos ARPin no se han cargado y su estado será "sin seguimiento" hasta que el subproceso asincrónico termine de cargar todos los ARPin desde el almacenamiento local. Una vez completado, el estado de los ARPin cambiará automáticamente.inserte la descripción de la imagen aquí
  • Guarde ARPin en el almacenamiento local
    • Guarde ARPin en el almacenamiento local. Este nodo guarda el ARPin usando el nombre como ID (que será devuelto por el nodo de carga), y los desarrolladores deben usar On Spaces Anchor Is Savedel delegado para saber cuándo el guardado se completó exitosamente.
      inserte la descripción de la imagen aquí
  • Obtener el nombre del ancla guardado
    • Devuelve todos los nombres de anclaje guardados en el almacenamiento.
  • Obtenga el nombre del punto de anclaje guardado por ARPin
    • Devuelve el nombre utilizado para guardar en la tienda ARPin.inserte la descripción de la imagen aquí

6.3.2 Seguimiento manual

6.3.2.1 Ejemplo de seguimiento manual

Este ejemplo demuestra cómo habilitar el seguimiento manual, cómo utilizar los datos de retorno de la función SpacesHandTracking y cómo habilitar la interacción con gestos. Para utilizar esta función, debe estar habilitada en la configuración del complemento Snapdragon Spaces en Configuración del proyecto > Complemento Snapdragon Spaces.

ADVERTENCIA
Asegúrese de desactivar el complemento OpenXRHandTracking para que el seguimiento manual estándar no sobrescriba el seguimiento manual de Spaces.inserte la descripción de la imagen aquí

6.3.2.1.1 Cómo funciona el ejemplo

Con la muestra activada, el seguimiento de manos se activa cuando el usuario coloca su mano en el campo de visión de la cámara del auricular. El usuario verá una cuadrícula que representa cada mano. Los actores 3D en la escena podrán interactuar si el seguimiento manual está activo como modo de entrada. Dependiendo de las opciones de interacción seleccionadas, se generarán diferentes actores interactuables en la escena.

La siguiente imagen muestra la malla de mano.

inserte la descripción de la imagen aquí

6.3.2.1.1.1 Administrador de seguimiento manual

Este ejemplo utiliza BP_HandTrackingManagerel recurso Blueprint (que se encuentra en SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > HandTracking > Placeable), que es responsable de controlar las diferentes opciones de interacción disponibles en la escena, incluidas la interacción lejana y la interacción cercana.

Para habilitar y deshabilitar el seguimiento de manos, Toggle Spaces Featureel método debe usarse con el seguimiento de manos como una característica a habilitar. De esta manera, el seguimiento manual se puede iniciar y detener según demanda durante partes del proyecto cuando no es necesario.

SUGERENCIA
En las versiones 0.13.0 y 0.14.0 de Snapdragon Spaces, hay otra opción para habilitar el seguimiento manual. Esto es "Usar seguimiento manual desde el principio" y se puede encontrar en Configuración del proyecto > Complementos > Espacios Snapdragon > General > Seguimiento manual.

Utilice Toggle AR Capture( Malla manual como tipo de captura) para habilitar el mallado manual. También se puede habilitar Toggle Spaces Featurecon .

ADVERTENCIA
Para las versiones de Snapdragon Spaces anteriores a la versión 0.12.1, habilite el mallado manual mediante Establecer estado de malla manual . Administre la visibilidad de la malla verificando el estado con Get Hand Mesh State .

Las dos manos se representan como controladores de movimiento y los datos se pueden obtener recuperando los datos del controlador de movimiento para acceder a las posiciones y rotaciones de las articulaciones de las manos.

SUGERENCIA
Para las versiones de Snapdragon Spaces anteriores a la 0.15.0, se eliminó el Administrador de seguimiento de manos responsable de representar las articulaciones de las manos utilizando datos del controlador de movimiento para poner más énfasis en la interacción de las manos. La funcionalidad para dibujar uniones todavía está disponible en Hand Tracking Manager Blueprint, donde el dibujo de uniones se utiliza para mostrar las uniones de las manos. La información correspondiente, especialmente la posición y rotación de cada articulación de la mano, se extrae de los datos del controlador de movimiento para situar correctamente la representación de cada articulación. Para esta representación se utiliza el rol BP_HandJointRepresentation .

6.3.2.1.1.2 Visor de malla manual

BP_HandMeshingViewerUbicado en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Muestras > HandTracking > Colocable, vincule eventos del componente AR Trackable Notify (se abre en una nueva ventana) para reaccionar a los cambios de geometría rastreable de AR, en este caso representando la malla de la mano. Se llama al evento Al agregar/actualizar geometría rastreada y, dado que se pueden registrar diferentes tipos de objetos como UARTrackedGeometry, para verificar que la geometría rastreada es una malla manual, la clase de objeto debe ser EARObjectClassification::HandMesh. Si el seguimiento manual es el modo de entrada, se BP_HandMeshingViewergenerará BP_HandTrackingControllerComponenty se utilizará como renderizador de malla manual.

inserte la descripción de la imagen aquí
GetObjectClassificationLa función se puede utilizar para comprobar la clasificación.

inserte la descripción de la imagen aquí

ADVERTENCIA
Para versiones de Snapdragon Spaces anteriores a la versión 0.13.0, BP_HandMeshingVieweresto no existe, la funcionalidad es BP_HandTrackingManagerinterna. Para versiones anteriores a la versión 0.12.1 de Snapdragon Spaces, para renderizar la malla manual HGestures 蓝图库se utiliza el método Render Hand Mesh, que está obsoleto a partir de la versión 0.13.0 de Snapdragon Spaces.inserte la descripción de la imagen aquí

Advertencia
En los nodos Blueprint, Unreal Engine expone parámetros como valores de retorno por referencia. Se debe pasar una referencia al actor que representa la malla manual y una variable que represente el número de vértices; de lo contrario, se crearán varios actores.

CONSEJO
El material de la malla manual se adapta al nuevo sistema de malla manual, lo que produce un efecto de sombra plana.

SUGERENCIA
Para realizar pruebas muy sencillas, se puede realizar renderizado manual utilizando el complemento XRVisualization y conectando los datos del controlador de movimiento a la función del controlador de movimiento de renderizado .

6.3.2.1.1.3 Estado de gesto

SUGERENCIA
A partir de la versión 0.15.0 de Snapdragon Spaces, el acceso directo a los datos de gestos ya no se utiliza en las muestras de seguimiento de manos. Los planos WBP_HandTrackingSampletodavía están en el complemento de ejemplo, pero ya no se utilizan.

WBP_HandTrackingSample(en Contenido de SnapdragonSpacesSamples > SnapdragonSpaces > Muestras > HandTracking > UI) Se utiliza para alternar entre visualización de mallado de manos y visualización de articulaciones de manos, y visualizar gestos reconocidos en cada fotograma. HGestures 蓝图库类La función de se utiliza para este propósito. En cada fotograma se comprueba si se siguen ambas manos y qué gesto se realiza. Esto se hace utilizando los métodos Obtener datos de gestos XRHand y Se realiza un seguimiento manual .

inserte la descripción de la imagen aquí
Los datos de gestos constan de los siguientes parámetros:

  • Tipo : valor de enumeración que proporciona el gesto de la mano detectado. Podría ser uno de los gestos de esta lista: { DESCONOCIDO, OPEN_HAND, GRAB, PINCH, ERROR }
  • GestureRatio : un valor de coma flotante entre 0 y 1 que indica el grado en que se aplica el gesto.
  • FlipRatio : un valor de coma flotante entre -1 y 1 que indica si el gesto se detectó desde atrás (-1), desde adelante (1) o en el medio.

A continuación se muestra el resultado de la interfaz de usuario que muestra el tipo y la escala del gesto de la mano izquierda detectado.

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_38498942/article/details/132577307
Recomendado
Clasificación