Parte: 13 — VR, AR y experiencias inmersivas · Fuente: Documentación de ARCore, ARKit y de interfaces XR en Godot 4 ⏱️ Duración estimada: 75 min · Nivel: Avanzado
La realidad aumentada superpone contenido digital sobre el mundo real que ve la cámara del dispositivo. A diferencia de la VR, aquí el reto no es construir un mundo, sino entender el mundo real en tiempo real: dónde está el suelo, qué superficies hay, cómo se mueve el dispositivo y cómo anclar objetos para que parezcan estar físicamente presentes. En esta clase estudiarás los fundamentos: el passthrough, el tracking por SLAM, la detección de planos, las anclas, la oclusión y la iluminación estimada.
El laboratorio es conceptual y de preparación: describirás con precisión el flujo de una app AR —de detectar un plano a anclar un objeto sobre él— y dejarás el proyecto de Godot listo para AR, con la interfaz XR correcta y la estructura de nodos que usarás en la siguiente clase con ARCore/ARKit.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | AR vs VR vs MR | Cada una impone retos técnicos distintos. |
| 2 | Passthrough | Muestra el mundo real como base del contenido. |
| 3 | Tracking y SLAM | Sin pose estable, todo "flota" o deriva. |
| 4 | Detección de planos | Da superficies reales donde apoyar objetos. |
| 5 | Anclas (anchors) | Fijan el contenido a un punto del mundo. |
| 6 | Oclusión | Objetos reales tapan a los virtuales y viceversa. |
| 7 | Iluminación estimada | Ilumina lo virtual acorde a la escena real. |
| 8 | Casos de uso de AR | Guían qué features priorizar. |
Necesitas un móvil compatible: Android con ARCore o iOS con ARKit. Godot no trae AR móvil de serie: se integra mediante plugins/addons que exponen la funcionalidad como una interfaz XR. En esta clase no compilamos aún; preparamos el proyecto y el árbol de nodos. Trabajaremos con XROrigin3D y XRCamera3D (la cámara pasa a mostrar el passthrough) más nodos de ancla que en la clase 236 poblará el plugin.
Referencias: ARCore en https://developers.google.com/ar, ARKit en https://developer.apple.com/augmented-reality/ y las interfaces XR de Godot en https://docs.godotengine.org/en/stable/tutorials/xr/index.html.
Prepararemos el proyecto para AR y dejaremos escrito el flujo que implementaremos luego.
Crea un proyecto nuevo (o duplica el VR) y en Project → Project Settings → XR deja OpenXR desactivado: en móvil la interfaz la aporta el plugin ARCore/ARKit, no OpenXR de escritorio.
Monta el árbol base: un XROrigin3D con un XRCamera3D hijo. En AR, la XRCamera3D renderiza el video de la cámara como fondo y su pose la mueve el tracking del dispositivo.
Escribe el gestor de sesión AR que inicializa la interfaz y activa el modo XR. Aún sin plugin fallará al buscar la interfaz, pero deja el esqueleto correcto:
extends Node3D
var interfaz_ar: XRInterface
func _ready() -> void:
# En movil la interfaz la registra el plugin ARCore/ARKit.
interfaz_ar = XRServer.find_interface("ARCore") # o "ARKit" en iOS
if interfaz_ar and interfaz_ar.is_initialized():
get_viewport().use_xr = true
print("Sesion AR iniciada: passthrough y tracking activos.")
else:
push_warning("Interfaz AR no disponible: falta el plugin o el dispositivo no es compatible.")
# FLUJO AR: detectar plano -> anclar -> colocar objeto
# 1. El sistema detecta un plano (suelo/mesa) y reporta su pose.
# 2. El usuario toca la pantalla sobre ese plano.
# 3. Un hit-test lanza un rayo desde el toque hacia la escena real.
# 4. Si impacta un plano, se crea una ancla (anchor) en ese punto.
# 5. Se instancia el objeto como hijo del nodo de ancla.
# 6. El objeto queda fijo al mundo real aunque el dispositivo se mueva.
func colocar_objeto_en(_posicion_toque: Vector2) -> void:
pass # se implementa con el plugin en la proxima clase
Añade un Node3D llamado Anclas que será el contenedor de todos los objetos anclados, y una escena de objeto de prueba (un MeshInstance3D con BoxMesh de 0.1 m) que reutilizaremos.
Documenta en un comentario qué features usarás: detección de planos horizontales, hit-test por toque, una ancla por objeto y (opcional) iluminación estimada para ajustar la luz de la escena.
Verifica que el proyecto abre sin errores en escritorio (mostrará el aviso de interfaz no disponible, que es lo esperado). El árbol y el contrato quedan listos para conectar el plugin.
Con los fundamentos claros y el proyecto preparado, en la próxima clase colocaremos objetos reales sobre planos con ARCore/ARKit.
Entrega el proyecto de Godot preparado para AR: sin OpenXR de escritorio, con XROrigin3D/XRCamera3D, un nodo contenedor Anclas, el gestor de sesión que busca la interfaz AR y falla con un aviso claro, y el flujo de colocación documentado como pseudocódigo comentado paso a paso.
Criterio de aceptación: el proyecto abre sin errores en escritorio, muestra el push_warning de interfaz no disponible, y el pseudocódigo describe correctamente los seis pasos del flujo detección → hit-test → ancla → objeto.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Activas OpenXR y AR no funciona en móvil | AR móvil no usa OpenXR de escritorio. Deja que el plugin ARCore/ARKit registre la interfaz. |
| Los objetos "derivan" o flotan | Tracking pobre por poca luz o superficie sin textura. Mejora iluminación y textura del entorno. |
| No se detectan planos | Superficie uniforme o sin rasgos. Apunta a zonas con textura y mueve el dispositivo despacio. |
| Lo virtual siempre tapa lo real | Falta oclusión. Requiere depth/oclusión del plugin, no está activa por defecto. |
find_interface devuelve null |
El plugin no está instalado o el dispositivo no es compatible con ARCore/ARKit. |
❓ ¿Puedo hacer AR con OpenXR en el móvil? El AR móvil típico usa ARCore/ARKit vía plugin; OpenXR cubre sobre todo visores. Prepara la interfaz que corresponda al dispositivo.
❓ ¿El SLAM funciona en cualquier entorno? Necesita textura y luz suficientes. Paredes lisas, oscuridad o superficies reflejantes degradan el tracking.
❓ ¿Qué diferencia hay entre una ancla y una simple posición? La ancla la sigue y corrige el sistema conforme mejora su mapa; una posición fija no se ajusta y puede quedar desalineada.
❓ ¿La iluminación estimada es obligatoria? No, pero sin ella los objetos virtuales se ven "pegados" porque su luz no coincide con la de la escena real.
Clase 234 - Presencia, escala y diseño para VR