Asignación espacial

La asignación espacial proporciona una representación detallada de las superficies reales en el entorno alrededor de HoloLens, lo que permite a los desarrolladores crear una experiencia convincente de realidad mixta. Al combinar el mundo real con el mundo virtual, una aplicación puede hacer que los hologramas parezcan reales. Las aplicaciones también pueden alinearse de forma más natural con las expectativas del usuario al proporcionar comportamientos y interacciones familiares del mundo real.


El dispositivo admite

Característica HoloLens (1.ª generación) HoloLens 2 Cascos envolventes
Asignación espacial ✔️ ✔️

¿Por qué es importante la asignación espacial?

La asignación espacial permite colocar objetos en superficies reales. Esto ayuda a delimitar objetos en el mundo del usuario y aprovecha las indicaciones de profundidad del mundo real. La conclusión de los hologramas basados en otros hologramas y objetos del mundo real ayuda a convencer al usuario de que estos hologramas están realmente en su espacio. Los hologramas flotan en el espacio o se mueven con el usuario no se sentirán tan reales. Cuando sea posible, coloque los artículos para el confort.

Visualizar superficies al colocar o mover hologramas (use una cuadrícula proyectada). Esto ayuda a los usuarios a saber dónde pueden colocar mejor sus hologramas y muestra si el lugar en el que intenta colocar el holograma no está asignado. Puede "elementos de cartelera" hacia el usuario si terminan en demasiado ángulo.

Información general conceptual

Superficies de malla que cubren una sala
Un ejemplo de una malla de asignación espacial que cubre una sala

Los dos tipos de objeto principales que se usan para la asignación espacial son "Spatial Surface Observer" y "Spatial Surface".

La aplicación proporciona al Observador de superficie espacial uno o varios volúmenes delimitadores para definir las regiones de espacio en las que la aplicación desea recibir datos de asignación espacial. Para cada uno de estos volúmenes, la asignación espacial proporcionará a la aplicación un conjunto de superficies espaciales.

Estos volúmenes pueden estar fijos (en una ubicación fija basada en el mundo real) o pueden estar conectados a HoloLens (se mueven, pero no giran, con HoloLens a medida que se mueve a través del entorno). Cada superficie espacial describe las superficies reales en un pequeño volumen de espacio, representada como una malla de triángulo conectada a un sistema de coordenadas espaciales bloqueados por el mundo.

A medida que HoloLens recopila nuevos datos sobre el entorno y, a medida que se producen cambios en el entorno, aparecerán, desaparecerán y cambiarán las superficies espaciales.

Demostración de conceptos de diseño de reconocimiento espacial

Si quiere ver los conceptos de diseño de reconocimiento espacial en acción, consulte nuestra demostración de vídeo Diseño de hologramas: reconocimiento espacial a continuación. Cuando haya terminado, continúe para profundizar más en detalle en temas específicos.

Este vídeo se tomó de la aplicación HoloLens 2 "Diseño de hologramas". Descargue y disfrute de la experiencia completa aquí.

Asignación espacial frente a Scene Understanding WorldMesh

Para HoloLens 2, es posible consultar una versión estática de los datos de asignación espacial mediante el SDK de Scene understanding (configuración EnableWorldMesh). Estas son las diferencias entre dos maneras de acceder a los datos de asignación espacial:

  • API de asignación espacial:
    • Intervalo limitado: los datos de asignación espacial disponibles para las aplicaciones en un tamaño limitado almacenado en caché "burbuja" alrededor del usuario.
    • Proporciona actualizaciones de baja latencia de las regiones de malla modificadas a través de eventos SurfacesChanged.
    • Nivel variable de detalles controlados por el parámetro Triángulos por medidor cúbico.
  • SDK de descripción de la escena:
    • Intervalo ilimitado: proporciona todos los datos de asignación espacial escaneados dentro del radio de consulta.
    • Proporciona una instantánea estática de los datos de asignación espacial. La obtención de los datos de asignación espacial actualizados requiere ejecutar una nueva consulta para toda la malla.
    • Nivel coherente de detalles controlados por la configuración RequestedMeshLevelOfDetail.

¿Qué influye en la calidad de la asignación espacial?

Varios factores, detallados aquí, pueden afectar a la frecuencia y la gravedad de estos errores. Sin embargo, debe diseñar la aplicación para que el usuario pueda alcanzar sus objetivos incluso en presencia de errores en los datos de asignación espacial.

Escenarios de uso comunes

Ilustraciones de escenarios comunes de uso de asignaciones espaciales: Colocación, Oclusión, Física y Navegación

Selección de ubicación

La asignación espacial proporciona a las aplicaciones la oportunidad de presentar formas naturales y familiares de interacción al usuario. ¿Qué podría ser más natural que colocar el teléfono en el escritorio?

Restringir la colocación de hologramas (o más generalmente, cualquier selección de ubicaciones espaciales) para colocarse en superficies proporciona una asignación natural de 3D (punto en el espacio) a 2D (punto en superficie). Esto reduce la cantidad de información que el usuario necesita proporcionar a la aplicación y hace que las interacciones del usuario sean más rápidas, sencillas y precisas. Esto es cierto porque "distancia a distancia" no es algo que estamos acostumbrados a comunicar físicamente a otras personas o a equipos. Cuando apuntamos con el dedo, estamos especificando una dirección, pero no una distancia.

Una advertencia importante aquí es que cuando una aplicación deduce distancia desde la dirección (por ejemplo, haciendo una difusión de rayos a lo largo de la dirección de mirada del usuario para encontrar la superficie espacial más cercana), esto debe producir resultados que el usuario pueda predecir de forma confiable. De lo contrario, el usuario perderá su sentido de control y esto puede resultar frustrante. Un método que ayuda con esto es hacer varios raycasts en lugar de solo uno. Los resultados agregados deben ser más suaves y predecibles, menos susceptibles a la influencia de los resultados transitorios "atípicos" (como puede deberse a que los rayos pasan por pequeños agujeros o golpean pequeños bits de geometría que el usuario no conoce). La agregación o suavizado también se puede realizar con el tiempo; por ejemplo, puede limitar la velocidad máxima a la que un holograma puede variar a distancia del usuario. Simplemente limitar el valor de distancia mínima y máxima también puede ayudar, por lo que el holograma que se mueve no vuela repentinamente a la distancia o vuelve a bloquearse en la cara del usuario.

Las aplicaciones también pueden usar la forma y la dirección de las superficies para guiar la colocación del holograma. Una silla holográfica no debe penetrar a través de las paredes y debe sentarse en vaciado con el suelo incluso si es ligeramente desigual. Este tipo de funcionalidad probablemente se basaría en el uso de colisiones físicas en lugar de raycasts, pero se aplicarán preocupaciones similares. Si el holograma que se coloca tiene muchos polígonos pequeños que se destacan, como las piernas de una silla, puede tener sentido expandir la representación física de esos polígonos a algo más ancho y suave para que sean más capaces de deslizarse sobre superficies espaciales sin etiquetar.

En su extremo, la entrada del usuario se puede simplificar completamente y las superficies espaciales se pueden usar para realizar una colocación de hologramas completamente automática. Por ejemplo, la aplicación podría colocar un conmutador de luz holográfico en algún lugar de la pared para que el usuario presione. La misma advertencia sobre la predictibilidad se aplica doblemente aquí; si el usuario espera el control sobre la colocación de hologramas, pero la aplicación no siempre coloca hologramas donde esperan (si el conmutador de luz aparece en algún lugar al que el usuario no puede acceder), esto será una experiencia frustrante. En realidad, puede ser peor hacer la colocación automática que requiere la corrección del usuario alguna de las veces, que simplemente exigir al usuario que siempre haga la colocación por sí mismo; porque se espera una colocación automática correcta, la corrección manual se siente como una carga.

Tenga en cuenta también que la capacidad de una aplicación para usar superficies espaciales para la selección de ubicación depende en gran medida de la experiencia de examen de la aplicación. Si no se ha examinado una superficie, no se puede usar para colocarla. Es necesario que la aplicación haga esto claro para el usuario, de modo que pueda ayudar a examinar nuevas superficies o seleccionar una nueva ubicación.

Los comentarios visuales al usuario son de importancia primordial durante la colocación. El usuario debe saber dónde se basa el holograma en la superficie más cercana con efectos de tierra. Deben entender por qué se restringe el movimiento de su holograma (por ejemplo, debido a colisiones con otra superficie cercana). Si no pueden colocar un holograma en la ubicación actual, los comentarios visuales deben aclarar por qué no. Por ejemplo, si el usuario intenta colocar un sofá holográfico a la mitad de la pared, las partes del sofá que están detrás de la pared deben pulsarse en un color enojado. Por el contrario, si la aplicación no encuentra una superficie espacial en una ubicación donde el usuario puede ver una superficie real, la aplicación debe aclararlo. La ausencia obvia de un efecto de base en esta área puede lograr este propósito.

Oclusión

Uno de los principales usos de superficies de asignación espacial es simplemente ocluir hologramas. Este comportamiento simple tiene un gran impacto en el realismo percibido de hologramas, lo que ayuda a crearuns que realmente habita el mismo espacio físico que el usuario.

La oclusión también proporciona información al usuario; cuando un holograma parece ser ocluido por una superficie del mundo real, esto proporciona comentarios visuales adicionales sobre la ubicación espacial de ese holograma en el mundo. Por el contrario, la oclusión también puede ocultar útilmente información del usuario; La oclusión de hologramas detrás de las paredes puede reducir el desorden visual de una manera intuitiva. Para ocultar o revelar un holograma, el usuario simplemente tiene que mover la cabeza.

La oclusión también se puede usar para mejorar las expectativas de una interfaz de usuario natural basada en interacciones físicas conocidas; si un holograma está ocluido por una superficie, es porque esa superficie es sólida, por lo que el usuario debe esperar que el holograma entre en conflicto con esa superficie y no pase por ella.

A veces, la oclusión de hologramas no es deseable. Si un usuario necesita interactuar con un holograma, debe verlo, incluso si está detrás de una superficie real. En tales casos, normalmente tiene sentido representar este holograma de forma diferente cuando se ocluye (por ejemplo, reduciendo su brillo). De este modo, el usuario puede localizar visualmente el holograma, pero todavía sabrá que está detrás de algo.

Física

El uso de la simulación física es otra manera en la que se puede usar la asignación espacial para reforzar la presencia de hologramas en el espacio físico del usuario. Cuando mi bola de goma holográfica se tira de forma realista fuera de mi escritorio, rebota por el suelo y desaparece debajo del sofá, podría ser difícil creer que no está allí.

La simulación física también ofrece la oportunidad de que una aplicación use interacciones naturales y familiares basadas en la física. Mover una pieza de muebles holográficos alrededor del suelo probablemente será más fácil para el usuario si el mobiliario responde como si se deslizase por el suelo con la inercia y fricción adecuadas.

Para generar comportamientos físicos realistas, es probable que tenga que realizar algún procesamiento de malla , como rellenar agujeros, quitar alucinaciones flotantes y suavizar superficies rugosas.

También tendrá que tener en cuenta cómo la experiencia de examen de la aplicación influye en su simulación física. En primer lugar, las superficies que faltan no colisionarán con nada; ¿qué ocurre cuando la bola de goma se lanza hacia el pasillo y fuera del final del mundo conocido? En segundo lugar, debe decidir si seguirá respondiendo a los cambios en el entorno a lo largo del tiempo. En algunos casos, querrá responder lo antes posible; diga si el usuario usa puertas y muebles como barricadas móviles en defensa contra una tempestad de flechas romanas entrantes. Sin embargo, en otros casos, es posible que desee omitir las nuevas actualizaciones; conducir su coche deportivo holográfico alrededor de la pista de carreras en su piso puede que repentinamente no sea tan divertido si su perro decide sentarse en medio de la pista.

Las aplicaciones pueden usar datos de asignación espacial para conceder caracteres holográficos (o agentes) la capacidad de navegar por el mundo real de la misma manera que lo haría una persona real. Esto puede ayudar a reforzar la presencia de caracteres holográficos restringiéndolos al mismo conjunto de comportamientos naturales y familiares que los del usuario y sus amigos.

Las funcionalidades de navegación también podrían ser útiles para los usuarios. Una vez que se ha creado un mapa de navegación en un área determinada, se podría compartir para proporcionar instrucciones holográficas para los nuevos usuarios que no están familiarizados con esa ubicación. Este mapa podría diseñarse para ayudar a mantener el "tráfico" peatonal fluyendo sin problemas, o para evitar accidentes en lugares peligrosos como sitios de construcción.

Los principales desafíos técnicos implicados en la implementación de la funcionalidad de navegación serán una detección confiable de superficies caminables (los seres humanos no caminan en las tablas!) y la adaptación correcta a los cambios en el entorno (los humanos no recorren puertas cerradas). La malla puede requerir algún procesamiento antes de que se pueda usar para el planeamiento de rutas de acceso y la navegación por un carácter virtual. Suavizar la malla y quitar alucinaciones puede ayudar a evitar que los caracteres se bloqueen. También puedes simplificar drásticamente la malla para acelerar los cálculos de navegación y planificación de rutas de tu personaje. Estos desafíos han recibido una gran atención en el desarrollo de la tecnología de videojuegos, y hay una gran cantidad de literatura de investigación disponible sobre estos temas.

La funcionalidad integrada NavMesh en Unity no se puede usar de forma predeterminada para las superficies de asignación espacial porque las superficies no se conocen hasta que se inicia la aplicación. Sin embargo, puede compilar un NavMesh durante el tiempo de ejecución mediante la instalación de NavMeshComponents. Tenga en cuenta que el sistema de asignación espacial no proporcionará información sobre las superficies lejos de la ubicación actual del usuario; para crear un mapa de un área grande, la aplicación debe "recordar" superficies. También puede aumentar la configuración de extensiones de observación en el perfil de reconocimiento espacial, lo que aumenta el área en la que puede construir su NavMesh.

Visualización

La mayoría de las veces es adecuado para que las superficies espaciales sean invisibles; para minimizar el desorden visual y dejar que el mundo real hable por sí mismo. Sin embargo, a veces resulta útil visualizar las superficies de asignación espacial directamente, a pesar de que sus homólogos reales sean visibles.

Por ejemplo, cuando el usuario intenta colocar un holograma en una superficie (colocar un gabinete holográfico en la pared, por ejemplo), puede ser útil para "tierra" el holograma mediante la conversión de una sombra en la superficie. Esto proporciona al usuario una idea mucho más clara de la proximidad física exacta entre el holograma y la superficie. Este es también un ejemplo de la práctica más general de "vista previa" visualmente un cambio antes de que el usuario lo confirme.

Al visualizar superficies, la aplicación puede compartir con el usuario su comprensión del entorno. Por ejemplo, un juego de tablero holográfico podría visualizar las superficies horizontales que ha identificado como "tablas", por lo que el usuario sabe dónde debe ir a interactuar.

La visualización de superficies puede ser una manera útil de mostrar los espacios cercanos del usuario que están ocultos de la vista. Esto podría proporcionar una manera de dar al usuario acceso a su cocina (y todos sus hologramas contenidos) desde su sala de estar.

Es posible que las mallas de superficie proporcionadas por la asignación espacial no sean especialmente "limpias". Es importante visualizarlos adecuadamente. Los cálculos de iluminación tradicionales pueden resaltar errores en los normales de superficie de una manera visualmente distraída, mientras que las texturas "limpias" proyectadas en la superficie pueden ayudar a darle una apariencia más ordenada. También es posible realizar el procesamiento de malla para mejorar las propiedades de malla, antes de representar las superficies.

Nota

HoloLens 2 implementa un nuevo entorno de ejecución de Scene Understanding, que proporciona Mixed Reality desarrolladores con una representación de entorno estructurada y de alto nivel diseñada para simplificar la implementación de la colocación, la oclusión, la física y la navegación.

Uso del observador de Surface

El punto de partida para la asignación espacial es el observador de superficie. El flujo del programa es el siguiente:

  • Creación de un objeto de observador de superficie
    • Proporcione uno o varios volúmenes espaciales para definir las regiones de interés en las que la aplicación desea recibir datos de asignación espacial. Un volumen espacial es simplemente una forma que define una región del espacio, como una esfera o un cuadro.
    • Use un volumen espacial con un sistema de coordenadas espaciales bloqueados por el mundo para identificar una región fija del mundo físico.
    • Use un volumen espacial, actualizado cada fotograma con un sistema de coordenadas espaciales bloqueados por el cuerpo, para identificar una región de espacio que se mueve (pero no gira) con el usuario.
    • Estos volúmenes espaciales se pueden cambiar más adelante en cualquier momento, ya que cambia el estado de la aplicación o el usuario.
  • Usar sondeo o notificación para recuperar información sobre las superficies espaciales
    • Puede "sondear" el observador de superficie para el estado de la superficie espacial en cualquier momento. En su lugar, puede registrarse para el evento "surfaces changed" del observador de superficie, que notificará a la aplicación cuando las superficies espaciales hayan cambiado.
    • En el caso de un volumen espacial dinámico, como el frustum de vista o un volumen bloqueado por el cuerpo, las aplicaciones tendrán que sondear los cambios de cada fotograma estableciendo la región de interés y, a continuación, obteniendo el conjunto actual de superficies espaciales.
    • En el caso de un volumen estático, como un cubo bloqueado por el mundo que cubre una sola sala, las aplicaciones pueden registrarse para que se notifique el evento "superficies modificadas" cuando las superficies espaciales dentro de ese volumen puedan haber cambiado.
  • Cambios en las superficies de proceso
    • Iteración del conjunto proporcionado de superficies espaciales.
    • Clasifique las superficies espaciales como agregadas, modificadas o eliminadas.
    • Para cada superficie espacial agregada o modificada, si procede, envía una solicitud asincrónica para recibir una malla actualizada que representa el estado actual de la superficie en el nivel de detalle deseado.
  • Procese la solicitud de malla asincrónica (más detalles en las secciones siguientes).

Almacenamiento en caché de malla

Las superficies espaciales se representan mediante mallas de triángulo densos. El almacenamiento, la representación y el procesamiento de estas mallas pueden consumir recursos de cálculo y almacenamiento significativos. Por lo tanto, cada aplicación debe adoptar un esquema de almacenamiento en caché de malla adecuado para sus necesidades, para minimizar los recursos usados para el procesamiento y el almacenamiento de mallas. Este esquema debe determinar qué mallas se deben mantener y cuáles descartar y cuándo actualizar la malla para cada superficie espacial.

Muchas de las consideraciones que se describen allí informarán directamente sobre cómo la aplicación debe abordar el almacenamiento en caché de malla. Debe considerar cómo se mueve el usuario a través del entorno, qué superficies son necesarias, cuándo se observarán diferentes superficies y cuándo se deben capturar los cambios en el entorno.

Al interpretar el evento "superficies modificadas" proporcionada por el observador de superficie, la lógica básica de almacenamiento en caché de malla es la siguiente:

  • Si la aplicación ve un identificador de superficie espacial que no ha visto antes, debe tratarlo como una nueva superficie espacial.
  • Si la aplicación ve una superficie espacial con un identificador conocido, pero con una nueva hora de actualización, debe tratarla como una superficie espacial actualizada.
  • Si la aplicación ya no ve una superficie espacial con un identificador conocido, debe tratarla como una superficie espacial eliminada.

A continuación, es necesario que cada aplicación tome las siguientes opciones:

  • En el caso de las nuevas superficies espaciales, ¿se debe solicitar malla?
    • Por lo general, la malla debe solicitarse inmediatamente para nuevas superficies espaciales, lo que puede proporcionar información útil al usuario.
    • Sin embargo, las nuevas superficies espaciales cercanas y delante del usuario deben tener prioridad y se debe solicitar primero su malla.
    • Si la nueva malla no es necesaria, si por ejemplo, la aplicación tiene permanente o temporalmente "inmovilizado" su modelo del entorno, no se debe solicitar.
  • Para superficies espaciales actualizadas, ¿se debe solicitar malla?
    • Las superficies espaciales actualizadas cerca y delante del usuario deben tener prioridad y se debe solicitar primero su malla.
    • También puede ser adecuado dar mayor prioridad a las nuevas superficies que a las superficies actualizadas, especialmente durante la experiencia de escaneo.
    • Para limitar los costos de procesamiento, las aplicaciones pueden querer limitar la velocidad a la que procesan las actualizaciones de las superficies espaciales.
    • Puede ser posible deducir que los cambios en una superficie espacial son menores, por ejemplo, si los límites de la superficie son pequeños, en cuyo caso la actualización puede no ser lo suficientemente importante como para procesarse.
    • Novedades a superficies espaciales fuera de la región actual de interés del usuario puede omitirse por completo, aunque en este caso puede ser más eficaz modificar los volúmenes de límite espacial en uso por el observador de superficie.
  • En el caso de las superficies espaciales eliminadas, ¿se debe descartar la malla?
    • Por lo general, la malla debe descartarse inmediatamente para las superficies espaciales eliminadas, de modo que la oclusión del holograma siga siendo correcta.
    • Sin embargo, si la aplicación tiene motivos para creer que una superficie espacial volverá a aparecer brevemente (basada en el diseño de la experiencia del usuario), puede ser más eficaz mantenerla que descartar su malla y volver a crearla más tarde.
    • Si la aplicación está creando un modelo a gran escala del entorno del usuario, es posible que no desee descartar ninguna malla en absoluto. Sin embargo, seguirá siendo necesario limitar el uso de recursos, posiblemente mediante la agrupación de mallas en disco a medida que desaparezcan las superficies espaciales.
    • Algunos eventos relativamente raros durante la generación de superficie espacial pueden hacer que las superficies espaciales se reemplacen por nuevas superficies espaciales en una ubicación similar, pero con identificadores diferentes. Por lo tanto, las aplicaciones que deciden no descartar una superficie eliminada deben tener cuidado de no terminar con varias mallas espaciales superpuestas altamente superpuestas que cubren la misma ubicación.
  • ¿Se debe descartar la malla para cualquier otra superficie espacial?
    • Incluso mientras existe una superficie espacial, si ya no es útil para la experiencia del usuario, se debe descartar. Por ejemplo, si la aplicación "reemplaza" la sala en el otro lado de una puerta con un espacio virtual alternativo, las superficies espaciales de esa sala ya no importan.

Este es un ejemplo de estrategia de almacenamiento en caché de malla, mediante hissteresis espacial y temporal:

  • Considere una aplicación que desee usar un volumen espacial en forma de frustum de interés que siga la mirada del usuario a medida que mira alrededor y camina.
  • Una superficie espacial puede desaparecer temporalmente de este volumen simplemente porque el usuario se aleja de la superficie o los pasos más lejos de él... sólo para mirar hacia atrás o acercarse de nuevo un momento más tarde. En este caso, descartar y volver a crear la malla para esta superficie representa muchos procesamientos redundantes.
  • Para reducir el número de cambios procesados, la aplicación usa dos observadores de superficie espacial, uno contenido en el otro. El volumen mayor es esférico y sigue al usuario "diferir" ; solo se mueve cuando es necesario para asegurarse de que su centro está a 2,0 metros del usuario.
  • Las mallas de superficie espacial nuevas y actualizadas siempre se procesan desde el observador de superficie interna más pequeña, pero las mallas se almacenan en caché hasta que desaparecen del observador de superficie exterior más grande. Esto permite que la aplicación evite procesar muchos cambios redundantes debido al movimiento del usuario local.
  • Dado que una superficie espacial también puede desaparecer temporalmente debido a la pérdida de seguimiento, la aplicación también aplaza la descartación de superficies espaciales eliminadas durante la pérdida de seguimiento.
  • En general, una aplicación debe evaluar el equilibrio entre el procesamiento de actualizaciones reducido y el aumento del uso de memoria para determinar su estrategia ideal de almacenamiento en caché.

Representación

Hay tres formas principales de usar las mallas de asignación espacial para la representación:

  • Para la visualización de superficie
    • A menudo resulta útil visualizar las superficies espaciales directamente. Por ejemplo, la conversión de "sombras" de objetos en superficies espaciales puede proporcionar comentarios visuales útiles al usuario mientras coloca hologramas en superficies.
    • Una cosa que hay que tener en cuenta es que las mallas espaciales son diferentes al tipo de mallas que un artista 3D podría crear. La topología del triángulo no será tan "limpia" como topología creada por el usuario y la malla sufrirá varios errores.
    • Para crear una estética visual agradable, es posible que desee realizar algún procesamiento de malla, por ejemplo para rellenar agujeros o normales de superficie lisa. También puede usar un sombreador para proyectar texturas diseñadas por el artista en la malla en lugar de visualizar directamente la topología de malla y los normales.
  • Para ocluir hologramas detrás de superficies reales
    • Las superficies espaciales se pueden representar en un paso de solo profundidad, que solo afecta al búfer de profundidad y no afecta a los destinos de representación de color.
    • Esto prepara el búfer de profundidad para ocluir posteriormente hologramas representados detrás de superficies espaciales. La oclusión precisa de hologramas mejora el sentido de que los hologramas realmente existen dentro del espacio físico del usuario.
    • Para habilitar la representación de solo profundidad, actualice el estado de combinación para establecer RenderTargetWriteMask en cero para todos los destinos de representación de color.
  • Para modificar la apariencia de los hologramas ocluidos por superficies reales
    • Normalmente, la geometría representada está oculta cuando está ocluida. Esto se logra estableciendo la función de profundidad en el estado de galería de símbolos de profundidad en "menor o igual", lo que hace que la geometría solo sea visible donde está más cerca de la cámara que toda la geometría representada anteriormente.
    • Sin embargo, puede ser útil mantener cierta geometría visible incluso cuando se ocluye y modificar su apariencia cuando se ocluye como una forma de proporcionar comentarios visuales al usuario. Por ejemplo, esto permite a la aplicación mostrar al usuario la ubicación de un objeto mientras se deja claro que está detrás de una superficie real.
    • Para ello, represente la geometría una segunda vez con un sombreador diferente que cree la apariencia "ocluida" deseada. Antes de representar la geometría por segunda vez, realice dos cambios en el estado de galería de símbolos de profundidad. En primer lugar, establezca la función de profundidad en "mayor o igual que" para que la geometría solo sea visible donde está más lejos de la cámara que toda la geometría representada anteriormente. En segundo lugar, establezca DepthWriteMask en cero, de modo que el búfer de profundidad no se modifique (el búfer de profundidad debe seguir representando la profundidad de la geometría más cercana a la cámara).

El rendimiento es un problema importante al representar mallas de asignación espacial. Estas son algunas técnicas de rendimiento de representación específicas de la representación de mallas de asignación espacial:

  • Ajustar la densidad del triángulo
    • Al solicitar mallas de superficie espaciales desde el observador de superficie, solicite la densidad más baja de las mallas de triángulo que serán suficientes para sus necesidades.
    • Puede tener sentido variar la densidad de triángulos en una superficie por superficie, según la distancia de la superficie del usuario y su relevancia para la experiencia del usuario.
    • Reducir los recuentos de triángulos reducirá el uso de memoria y los costos de procesamiento de vértices en la GPU, aunque no afectará a los costos de procesamiento de píxeles.
  • Usar la selección de frustum
    • La selección de frustum omite los objetos de dibujo que no se pueden ver porque están fuera del frustum de visualización actual. Esto reduce los costos de procesamiento de CPU y GPU.
    • Dado que la selección se realiza sobre una base por malla y las superficies espaciales pueden ser grandes, dividir cada malla de superficie espacial en fragmentos más pequeños puede dar lugar a una selección más eficaz (en que se representan menos triángulos fuera de la pantalla). Sin embargo, hay un equilibrio; cuantos más mallas tenga, más llamadas de dibujo debe realizar, lo que puede aumentar los costos de CPU. En un caso extremo, los cálculos de selección de frustum podrían incluso tener un costo de CPU medible.
  • Ajustar el orden de representación
    • Las superficies espaciales tienden a ser grandes, ya que representan todo el entorno del usuario que los rodea. Los costos de procesamiento de píxeles en la GPU pueden ser altos, especialmente en los casos en los que hay más de una capa de geometría visible (incluidas las superficies espaciales y otros hologramas). En este caso, la capa más cercana al usuario estará ocultando las capas más alejadas, por lo que cualquier tiempo de GPU dedicado a representar esas capas más distantes se desperdicia.
    • Para reducir este trabajo redundante en la GPU, ayuda a representar superficies opacas en orden de front-to-back (las más cercanas primero, más lejanas últimas). Por 'opaco' significamos superficies para las que DepthWriteMask está establecido en uno en su estado de galería de símbolos de profundidad. Cuando se representen las superficies más cercanas, primorán el búfer de profundidad para que el procesador de píxeles omita eficazmente las superficies más distantes en la GPU.

Procesamiento de malla

Una aplicación puede querer realizar varias operaciones en mallas de superficie espacial para satisfacer sus necesidades. Los datos de índice y vértice proporcionados con cada malla de superficie espacial usan el mismo diseño conocido que los búferes de vértices e índices que se usan para representar mallas de triángulos en todas las API de representación modernas. Sin embargo, un hecho clave que hay que tener en cuenta es que los triángulos de asignación espacial tienen un orden de desenlazamiento en el sentido de las agujas del reloj. Cada triángulo se representa mediante tres índices de vértices en el búfer de índices de la malla y estos índices identificarán los vértices del triángulo en un orden en el sentido de las agujas del reloj , cuando el triángulo se ve desde el lado frontal . El lado frontal (o exterior) de las mallas de superficie espaciales corresponde al lado frontal (visible) de las superficies reales.

Las aplicaciones solo deben simplificar la malla si la densidad de triángulo más gruesa proporcionada por el observador de la superficie sigue siendo insuficiente: este trabajo es computacionalmente costoso y ya lo está realizando el tiempo de ejecución para generar los distintos niveles de detalle proporcionados.

Dado que cada observador de superficie puede proporcionar varias superficies espaciales no conectadas, es posible que algunas aplicaciones deseen recortar estas mallas de superficie espaciales entre sí y, a continuación, comprimirlas juntas. En general, se requiere el paso de recorte, ya que las mallas de superficie espacial cercanas a menudo se superponen ligeramente.

Raycasting y Colisión

Para que una API física (como Havok) proporcione una aplicación con funcionalidad de raycasting y colisión para superficies espaciales, la aplicación debe proporcionar mallas de superficie espaciales a la API física. Las mallas usadas para la física suelen tener las siguientes propiedades:

  • Solo contienen pequeños números de triángulos. Las operaciones físicas consumen mucho más cálculo que las operaciones de representación.
  • Son "apretados al agua". Las superficies diseñadas para ser sólidas no deben tener pequeños agujeros en ellas; incluso agujeros demasiado pequeños para ser visibles puede causar problemas.
  • Se convierten en cascos convexas. Las cascos convexas tienen pocos polígonos y están libres de agujeros, y son mucho más eficientes computacionalmente para procesar que las mallas de triángulo sin procesar.

Al hacer raycasts contra superficies espaciales, tenga en cuenta que estas superficies son a menudo complejas y desordenadas formas llenas de pequeños detalles desordenados , al igual que su escritorio! Esto significa que un solo raycast es a menudo insuficiente para proporcionarle suficiente información sobre la forma de la superficie y la forma del espacio vacío cerca de ella. Normalmente es una buena idea realizar muchas raycasts dentro de un área pequeña y usar los resultados agregados para obtener una comprensión más confiable de la superficie. Por ejemplo, el uso del promedio de 10 raycasts para guiar la colocación de hologramas en una superficie producirá un resultado mucho más suave y menos "jittery" que usa solo un solo raycast.

Sin embargo, tenga en cuenta que cada raycast puede tener un alto costo computacional. En función del escenario de uso, debe reducir el costo computacional de los raycasts adicionales (hecho cada fotograma) con respecto al costo computacional del procesamiento de malla para suavizar y quitar agujeros en superficies espaciales (hecho cuando se actualizan las mallas espaciales).

La experiencia de examen del entorno

Cada aplicación que usa la asignación espacial debe considerar la posibilidad de proporcionar una "experiencia de examen"; el proceso a través del cual la aplicación guía al usuario a examinar las superficies necesarias para que la aplicación funcione correctamente.

Ejemplo de examen
Ejemplo de examen

La naturaleza de esta experiencia de examen puede variar en gran medida en función de las necesidades de cada aplicación, pero dos principios principales deben guiar su diseño.

En primer lugar, la comunicación clara con el usuario es la principal preocupación. El usuario siempre debe tener en cuenta si se cumplen los requisitos de la aplicación. Cuando no se cumplen, debe estar inmediatamente claro para el usuario por qué es así y deben llevar a cabo rápidamente la acción adecuada.

En segundo lugar, las aplicaciones deben intentar lograr un equilibrio entre la eficiencia y la confiabilidad. Cuando sea posible hacerlo de forma confiable, las aplicaciones deben analizar automáticamente los datos de asignación espacial para ahorrar tiempo al usuario. Cuando no es posible hacerlo de forma confiable, las aplicaciones deben permitir al usuario proporcionar rápidamente a la aplicación la información adicional que necesita.

Para ayudar a diseñar la experiencia de análisis adecuada, tenga en cuenta cuáles de las siguientes posibilidades son aplicables a la aplicación:

  • Sin experiencia de examen

    • Una aplicación puede funcionar perfectamente sin ninguna experiencia de exploración guiada; obtendrá información sobre las superficies que se observan en el curso del movimiento natural del usuario.
    • Por ejemplo, una aplicación que permite al usuario dibujar en superficies con pintura de pulverización holográfica solo requiere conocimiento de las superficies actualmente visibles para el usuario.
    • Es posible que el entorno ya se examine si es uno en el que el usuario ya ha dedicado mucho tiempo a usar HoloLens.
    • Tenga en cuenta, sin embargo, que la cámara usada por la asignación espacial solo puede ver 3,1 m delante del usuario, por lo que la asignación espacial no sabrá sobre superficies más distantes a menos que el usuario las haya observado desde una distancia más cercana en el pasado.
    • Por lo tanto, el usuario entiende qué superficies se han examinado, la aplicación debe proporcionar comentarios visuales a este efecto, por ejemplo, la conversión de sombras virtuales en superficies escaneadas puede ayudar al usuario a colocar hologramas en esas superficies.
    • En este caso, los volúmenes delimitadores del observador de superficie espacial deben actualizarse cada fotograma a un sistema de coordenadas espaciales bloqueado por el cuerpo, para que sigan al usuario.
  • Buscar una ubicación adecuada

    • Una aplicación puede diseñarse para su uso en una ubicación con requisitos específicos.
    • Por ejemplo, la aplicación puede requerir un área vacía alrededor del usuario para que pueda practicar de forma segura kung-fu holográfica.
    • Las aplicaciones deben comunicar cualquier requisito específico al usuario por adelantado y reforzarlos con comentarios visuales claros.
    • En este ejemplo, la aplicación debe visualizar la extensión del área vacía necesaria y resaltar visualmente la presencia de cualquier objeto no deseado dentro de esta zona.
    • En este caso, los volúmenes delimitadores del observador de superficie espacial deben usar un sistema de coordenadas espaciales bloqueados por el mundo en la ubicación elegida.
  • Buscar una configuración adecuada de superficies

    • Una aplicación puede requerir una configuración específica de superficies, por ejemplo, dos paredes grandes, planas y opuestas para crear una sala holográfica de espejos.
    • En tales casos, la aplicación tendrá que analizar las superficies proporcionadas por la asignación espacial para detectar superficies adecuadas y dirigir al usuario hacia ellas.
    • El usuario debe tener una opción de reserva si el análisis de superficie de la aplicación no es confiable. Por ejemplo, si la aplicación identifica incorrectamente una puerta como una pared plana, el usuario necesita una manera sencilla de corregir este error.
  • Examinar parte del entorno

    • Una aplicación puede querer capturar solo parte del entorno, tal como lo indica el usuario.
    • Por ejemplo, la aplicación examina parte de una sala para que el usuario pueda publicar un anuncio clasificado holográfico para los muebles que desea vender.
    • En este caso, la aplicación debe capturar datos de asignación espacial dentro de las regiones observadas por el usuario durante su examen.
  • Escanear toda la sala

    • Una aplicación puede requerir un examen de todas las superficies de la sala actual, incluidas las que están detrás del usuario.
    • Por ejemplo, un juego puede poner al usuario en el rol de Gulliver, bajo el sitio de cientos de pequeños Lilliputianos que se acercan desde todas las direcciones.
    • En tales casos, la aplicación tendrá que determinar cuántos de las superficies de la sala actual ya se han examinado y dirigir la mirada del usuario para rellenar espacios significativos.
    • La clave de este proceso es proporcionar comentarios visuales que hacen claro al usuario qué superficies aún no se han examinado. La aplicación podría, por ejemplo, usar niebla basada en distancia para resaltar visualmente las regiones que no están cubiertas por superficies de asignación espacial.
  • Tomar una instantánea inicial del entorno

    • Una aplicación puede querer omitir todos los cambios en el entorno después de tomar una "instantánea" inicial.
    • Esto puede ser adecuado para evitar la interrupción de los datos creados por el usuario que están estrechamente acoplados al estado inicial del entorno.
    • En este caso, la aplicación debe realizar una copia de los datos de asignación espacial en su estado inicial una vez completado el examen.
    • Las aplicaciones deben seguir recibiendo actualizaciones de los datos de asignación espacial si el entorno sigue ocultando correctamente los hologramas.
    • Las actualizaciones continuas de los datos de asignación espacial también permiten visualizar los cambios que se han producido, aclarando al usuario las diferencias entre los estados anteriores y actuales del entorno.
  • Tomar instantáneas iniciadas por el usuario del entorno

    • Es posible que una aplicación solo desee responder a los cambios del entorno cuando el usuario lo indique.
    • Por ejemplo, el usuario podría crear varias "estatuas 3D" de un amigo capturando sus posturas en momentos diferentes.
  • Permitir que el usuario cambie el entorno

    • Una aplicación puede diseñarse para responder en tiempo real a los cambios realizados en el entorno del usuario.
    • Por ejemplo, el usuario que dibuja una cortina podría desencadenar "cambio de escena" para un juego holográfico que tiene lugar en el otro lado.
  • Guía al usuario para evitar errores en los datos de asignación espacial

    • Es posible que una aplicación quiera proporcionar instrucciones al usuario mientras examina su entorno.
    • Esto puede ayudar al usuario a evitar ciertos tipos de errores en los datos de asignación espacial, por ejemplo, al mantenerse alejados de ventanas o reflejos iluminados.

Un detalle adicional que se debe tener en cuenta es que el "intervalo" de datos de asignación espacial no es ilimitado. Aunque la asignación espacial crea una base de datos permanente de espacios grandes, solo hace que los datos estén disponibles para las aplicaciones en una "burbuja" de tamaño limitado alrededor del usuario. Si empiezas al principio de un pasillo largo y caminas lo suficientemente lejos del principio, finalmente las superficies espaciales de nuevo al principio desaparecerán. Puede mitigarlo almacenando en caché esas superficies en la aplicación después de que hayan desaparecido de los datos de asignación espacial disponibles.

Procesamiento de malla

Puede ayudar a detectar tipos comunes de errores en superficies y filtrar, quitar o modificar los datos de asignación espacial según corresponda.

Tenga en cuenta que los datos de asignación espacial están diseñados para ser lo más fieles posible a las superficies del mundo real, por lo que cualquier procesamiento que aplique riesgos para cambiar las superficies más allá de la "verdad".

Estos son algunos ejemplos de diferentes tipos de procesamiento de malla que puede resultar útil:

  • Relleno de agujeros

    • Si un pequeño objeto hecho de un material oscuro no puede escanear, dejará un agujero en la superficie circundante.
    • Los agujeros afectan a la oclusión: los hologramas se pueden ver "a través" de un agujero en una superficie supuestamente opaca del mundo real.
    • Los agujeros afectan a raycasts: si usa raycasts para ayudar a los usuarios a interactuar con superficies, puede que no sea deseable que estos rayos pasen por agujeros. Una mitigación consiste en usar una agrupación de varios raycasts que abarcan una región de tamaño adecuado. Esto le permitirá filtrar los resultados atípicos, de modo que incluso si un raycast pasa a través de un pequeño agujero, el resultado agregado seguirá siendo válido. Sin embargo, este enfoque conlleva un costo computacional.
    • Los agujeros afectan a las colisiones físicas: un objeto controlado por la simulación física puede caer a través de un agujero en el suelo y perderse.
    • Es posible rellenar de forma algorítmica tales agujeros en la malla expuesta. Sin embargo, deberá ajustar el algoritmo para que "agujeros reales", como ventanas y puertas, no se rellenen. Puede ser difícil diferenciar de forma confiable "agujeros reales" de "agujeros imaginarios", por lo que deberá experimentar con diferentes heurística, como "tamaño" y "forma de límite".
  • Eliminación de la alucinación

    • Las reflexiones, las luces brillantes y los objetos móviles pueden dejar pequeñas "alucinaciones" flotantes en medio del aire.
    • Las alucinaciones afectan a la oclusión: las alucinaciones pueden ser visibles a medida que las formas oscuras se mueven delante y ocluyen otros hologramas.
    • Las alucinaciones afectan a los raycasts: si usa raycasts para ayudar a los usuarios a interactuar con superficies, estos rayos podrían alcanzar una alucinación en lugar de la superficie detrás de ella. Al igual que con los agujeros, una mitigación es usar muchos raycasts en lugar de un solo raycast, pero de nuevo esto vendrá a un costo computacional.
    • Las alucinaciones afectan a las colisiones físicas: un objeto controlado por la simulación física puede quedar atascado contra una alucinación y no poder moverse por un área aparentemente clara del espacio.
    • Es posible filtrar estas alucinaciones desde la malla expuesta. Sin embargo, al igual que con los agujeros, deberá ajustar el algoritmo para que los objetos pequeños reales, como los soportes de lámpara y las manijas de puerta, no se quiten.
  • Suavizado

    • La asignación espacial puede devolver superficies que parecen ser aproximadas o "ruidosas" en comparación con sus homólogos reales.
    • La lisura afecta a las colisiones físicas: si el suelo es áspero, es posible que una pelota de golf físicamente simulada no se rebase suavemente a través de ella en una línea recta.
    • La suavidad afecta a la representación: si una superficie se visualiza directamente, los normales de superficie aproximada pueden afectar a su apariencia e interrumpir una apariencia "limpia". Es posible mitigar esto mediante la iluminación y las texturas adecuadas en el sombreador que se usa para representar la superficie.
    • Es posible suavizar la rugosidad en una malla expuesta. Sin embargo, esto puede empujar la superficie más lejos de la superficie real correspondiente. Mantener una correspondencia estrecha es importante para producir oclusión precisa de hologramas y permitir a los usuarios lograr interacciones precisas y predecibles con superficies holográficas.
    • Si solo se requiere un cambio cosmético, puede ser suficiente para suavizar los valores normales de vértice sin cambiar las posiciones del vértice.
  • Búsqueda del plano

    • Hay muchas formas de análisis que una aplicación puede querer realizar en las superficies proporcionadas por la asignación espacial.
    • Un ejemplo sencillo es "búsqueda del plano"; identificar regiones limitadas, principalmente planas de superficies.
    • Las regiones planar se pueden usar como superficies de trabajo holográficas, regiones donde la aplicación puede colocar automáticamente el contenido holográfico.
    • Las regiones planar pueden restringir la interfaz de usuario para guiar a los usuarios a interactuar con las superficies que mejor se adapten a sus necesidades.
    • Las regiones planar se pueden usar como en el mundo real, para homólogos holográficos en objetos funcionales, como pantallas LCD, tablas o pizarras.
    • Las regiones planar pueden definir áreas de juego, formando la base de los niveles de videojuegos.
    • Las regiones planar pueden ayudar a los agentes virtuales a navegar por el mundo real mediante la identificación de las áreas de piso en las que es probable que las personas reales pasen.

Creación de prototipos y depuración

Herramientas útiles

  • El emulador de HoloLens se puede usar para desarrollar aplicaciones mediante la asignación espacial sin acceso a holoLens físico. Permite simular una sesión en directo en un holoLens en un entorno realista, con todos los datos que la aplicación consumiría normalmente, incluido el movimiento de HoloLens, los sistemas de coordenadas espaciales y las mallas de asignación espacial. Esto se puede usar para proporcionar una entrada confiable y repetible, que puede ser útil para depurar problemas y evaluar los cambios en el código.
  • Para reproducir un escenario, capture datos de asignación espacial a través de la red desde un HoloLens activo y guárdelo en el disco y reutilízcalos en sesiones de depuración posteriores.
  • La vista 3D del portal de dispositivos Windows proporciona una manera de ver todas las superficies espaciales disponibles actualmente a través del sistema de asignación espacial. Esto proporciona una base de comparación para las superficies espaciales dentro de la aplicación; por ejemplo, puede saber fácilmente si faltan superficies espaciales o se muestran en el lugar incorrecto.

Guía general de creación de prototipos

  • Dado que los errores de los datos de asignación espacial pueden afectar fuertemente a la experiencia del usuario, se recomienda probar la aplicación en una amplia variedad de entornos.
  • No te encierres en el hábito de probar siempre en la misma ubicación, por ejemplo en tu escritorio. Asegúrese de probar en varias superficies de diferentes posiciones, formas, tamaños y materiales.
  • De forma similar, aunque los datos sintéticos o grabados pueden ser útiles para la depuración, no dependan demasiado de los mismos casos de prueba. Esto puede retrasar la búsqueda de problemas importantes que las pruebas más variadas habrían detectado anteriormente.
  • Es una buena idea realizar pruebas con usuarios reales (e idealmente incoachados), ya que es posible que no usen HoloLens o la aplicación exactamente de la misma manera que lo hace. De hecho, puede sorprenderle cómo puede ser el comportamiento, el conocimiento y las suposiciones de las personas divergentes.

Solución de problemas

  • Para que las mallas de superficie estén orientadas correctamente, cada GameObject debe estar activo antes de que se envíe al SurfaceObserver para que su malla se construya. De lo contrario, las mallas aparecerán en el espacio, pero girarán en ángulos extraños.
  • El GameObject que ejecuta el script que se comunica con SurfaceObserver debe establecerse en el origen. De lo contrario, todos los objetos GameObject que creas y envías al SurfaceObserver para que sus mallas construidas tengan un desplazamiento igual al desplazamiento del objeto de juego primario. Esto puede hacer que las mallas aparezcan a varios metros de distancia, lo que dificulta la depuración de lo que está pasando.

Consulte también