Cómo sincronizar una cámara virtual en Unreal Engine

En este artículo vamos a ver cómo sincronizar una cámara virtual y una cámara real dentro del motor de Unreal Engine para la realización de producciones virtuales.

Una producción virtual combina elementos reales como puede ser una persona, dentro de un escenario virtual. Para ello es necesario que la cámara virtual se sincronice con la cámara del mundo real reproduciendo su posición, rotación y otros parámetros como la distancia focal, la apertura o el código de tiempo.

Para sincronizar la posición y rotación de una cámara real con una cámara virtual, los rastreadores HTC Vive son una buena opción, ya que ofrecen una gran precisión a un coste asequible.

Instalación del rastreador HTC Vive y Steam VR

Kit de rastreador y sensores HTC Vive

El kit básico se compone de un rastreador y dos sensores de posición o estaciones base (También funciona con una estación base pero es menos preciso y puede perder la señal con frecuencia). Cuantas más estaciones base se utilicen, mayor será la precisión del sistema.

Las estaciones base tienen un alcance máximo recomendado de cinco metros y deben colocarse frente a frente, a una altura de entre dos y tres metros.

A continuación, hay que instalar el software Viveport y Steam VR.

Instalación del rastreador sin casco de realidad virtual HTC

En mi caso, compré solo el rastreador y los sensores, pero no el casco de realidad virtual de HTC. Si ya tienes el casco de HTC y funciona correctamente con Steam VR, puedes saltar este paso.

Junto con el rastreador, viene incluido un pequeño dispositivo USB que es el que se encargará de realizar la conexión bluetooth entre los dispositivos y Steam VR.

Steam VR wireless usb dongle

Para conectar el rastreador sin utilizar el casco de realidad virtual, es necesario cambiar algunos parámetros de la configuración habilitar y activar el driver en Steam VR:

1. En el directorio de instalación de Steam, localiza y edita el archivo default.vrsettings. Generalmente se encuentra en la siguiente ruta:

C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\null\resources\settings\

Cambia el valor del parámetro «enable» a «true»:

{
    "driver_null": {
        "enable": true,
        "loadPriority": -999,
        "serialNumber": "Null Serial Number",
        "modelNumber": "Null Model Number",
        "windowX": 0,
        "windowY": 0,
        "windowWidth": 2160,
        "windowHeight": 1200,
        "renderWidth": 1512,
        "renderHeight": 1680,
        "secondsFromVsyncToPhotons": 0.01111111,
        "displayFrequency": 90.0
    }
}

2.Localiza y edita este otro archivo default.vrsettings que generalmente se encuentra en la siguiente ruta:

C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\

Cambia el valor del parámetro «requireHMD» a «false» y «forcedDriver» a «null». Cambia también el parámetro «allowDisplayLockedMode» a «false».

"steamvr": {
    "requireHmd": false,
    "forcedDriver": "null",
    "forcedHmd": "",
    "displayDebug": false,
    "debugProcessPipe": "",
    "enableDistortion": true,
    "displayDebugX": 0,
    "displayDebugY": 0,
    "allowDisplayLockedMode": false,
    "sendSystemButtonToAllApps": false,
    "loglevel": 3,
    "ipd": 0.063,
    "ipdOffset": 0.0,
    "background": "",

Ahora, al ejecutar Steam VR el ratreador y las estaciones base se conectarán sin necesidad de un casco. Cuando estén correctamente conectadas, tanto las estaciones base como el rastreador mostrarán una luz verde y en Steam VR se mostrarán los iconos iluminados.

Instalacion de HTC VIVE en steam
Rastreador HTC Vive

Configuración del rastreador en Steam VR

El siguiente paso es calibrar el rastreador para indicarle las dimensiones del escenario y la posición del suelo. Para ello, hay que realizar la configuración de la habitación ejecutando esta opción en el menú de Steam VR.

Instalacion de HTC VIVE en steam
Instalacion de HTC VIVE en steam

Después de configurar la habitación, en el menú de Steam VR hay que ir a Dispositivos > Administrar Vive Trackers.

Instalacion de HTC VIVE en steam

En el menú desplegable seleccionamos “Cámara”. De esta forma, el rastreador y los sensores estarán correctamente configurados en Steam VR y preparados para ser utilizados por Unreal Engine.

Instalacion de HTC VIVE en Steam

Sincronización de la cámara virtual y la cámara real dentro de Unreal Engine

Después de haber instalado y emparejado el tracker y las estaciones base, vamos a integrarlo todo en Unreal Engine. Sigue estos pasos:

1.Crea un nuevo Blueprint de Actor con el nombre SceneMover.

2.Crea otro Actor con el nombre CameraTracker. Este debe ser un hijo del anterior.

3.Crea un objeto CineCamera y colócalo como hijo de CameraTracker.

Configuracion del rastreador HTC VIVE en Unreal Engine

4.Dentro de CameraTracker, creamos un Blueprint que tome la posición del dispositivo. En la casilla Device ID hay que poner la ID del rastreador, que puede ser 0, 1 o 2, dependiendo del orden en el que se hayan sincronizado el rastreador y las dos estaciones base. Una vez encontrada la ID correcta, podemos ejecutar la simulación y el rastreador se moverá.

Configuracion del rastreador HTC VIVE dentro de Unreal Engine

5. Para ver mejor la rotación del objeto, podemos añadir algún objeto (StaticMesh), preferiblemente un modelo 3D del propio rastreador.

Configuracion del rastreador HTC VIVE dentro de Unreal Engine

En este punto, si ejecutamos el juego y movemos el rastreador en el espacio real, también debería moverse en el virtual.

El siguiente paso sería ajustarlo a la cámara para que se sincronicen ambos movimientos. Para este ejemplo, he añadido un modelo 3D de mi cámara, la Sony FS7 para que la sincronización sea todavía más precisa. Para que la rotación y posición del rastreador coincida exactamente con la posición del sensor, hay mover el objeto StaticMesh hasta que coincida con el punto de rotación del eje XYZ.

A continuación, te dejo un vídeo donde se puede ver el resultado final.

Inserción de un flujo de vídeo en tiempo real

Aunque ya hemos visto cómo sincronizar el rastreador, para realizar una producción virtual que combine elementos del mundo real con objetos o escenarios generados dentro de Unreal Engine.

Para ello, es necesario insertar un flujo de vídeo en el motor y combinarlo con las capas de elementos 3D de Unreal. Para poder utilizar las capas de vídeo, hay que activar los plugins Media Framework Utilities y Composure.

La imagen en tiempo real se puede insertar mediante una tarjeta de captura Blackmagic u otro dispositivo similar. Si estás utilizando una tarjeta capturadora Decklink, tendrás que activar también el plugin Built-in Timecode Synchronizer.

Para introducir un flujo de cámara, primero hay que añadir un objeto Media > Media Player y marcar la opción para crear una textura de salida.

Flujo de video en tiempo real en Unreal Engine

Haciendo clic en el icono de carpeta, en la parte superior izquierda, puedes elegir entre todas las fuentes de video y audio. En mi caso, seleccionaré Blackmagic Web Presenter como dispositivo de entrada de vídeo.

Copia la url de la fuente de video que aparece en la parte superior de la ventana.

Flujo de video en tiempo real en Unreal Engine
Flujo de video en tiempo real en Unreal Engine

Crea un plano sobre el que se verá la textura y crea un material a partir de la textura de video. Aplica el material sobre el plano y selecciona la fuente de video para visualizarlo.

Flujo de video en tiempo real en Unreal Engine

La imagen en tiempo real de la cámara se verá aplicada sobre la textura del plano. El problema es que si cerramos la ventana y salimos de la ejecución del juego, se pierde la señal del vídeo y hay que volver a configurarla.

Para mantenerla constante dentro de la escena, crea un blueprint Actor (MediaSetup) y colócalo en la escena.

En el editor de Blueprints, crea una variable Media Player.

Flujo de video en tiempo real en Unreal Engine

Como valor por defecto, elige el MediaPlayer creado anteriormente.

Flujo de video en tiempo real en Unreal Engine

Termina de configurar el Blueprint con una llamada a la url de la fuente de video que aparecía en la parte superior de la ventana de vídeo.

Flujo de video en tiempo real en Unreal Engine

A continuación, para realizar la mezcla del fondo virtual con el flujo de cámara, abre una ventana de Composure y crea una nueva composición.

Flujo de video en tiempo real en Unreal Engine

Crea una primera capa Media Plate.

Flujo de video en tiempo real en Unreal Engine

En los detalles, elige Input > Media Texture y selecciona la textura que contiene la capa de video. Adicionalmente, puedes escoger la salida en el Viewport o la salida de tarjeta Blackmagic.

Grabación de una secuencia

El último paso sería la grabación de una secuencia que combine las capas de la cámara real con las capas de fondos y objetos generados en Unreal Engine.

Flujo de video en tiempo real en Unreal Engine

En primer lugar, hay que activar el grabador de secuencia.

Selecciona los elementos que quieres grabar. En este caso añadimos los 3 que componen la cámara virtual: SceneMover, CameraTracker_BP_BluePrint y LiveCamera_Blueprint.

Flujo de video en tiempo real en Unreal Engine

Añade un título para la secuencia y pulsa RECORD para empezar a grabar la secuencia. A partir de este momento, se grabarán tanto los movimientos de cámara como la animación dentro del motor.

Al finalizar, por defecto encontrarás la secuencia recién grabada en Content > Cinematics > Sequences y podrás abrirla y editarla en el Sequencer.

Los fotogramas clave se encuentran en la capa CameraTracker_BP y es posible editarlos para alterar los movimientos grabados.

Flujo de video en tiempo real en Unreal Engine

Por último, puedes exportar la película configurando los parámetros de salida en la ventana de renderizado.

Grabacion de una secuencia en Unreal Engine

Publicado

en

,

por

Comentarios

7 respuestas a «Cómo sincronizar una cámara virtual en Unreal Engine»

  1. Avatar de Juan Zelaya
    Juan Zelaya

    Compre el kit que sugieres pero no he podido hacer que steamvr los reconozca. pregunta: Como se comunican las base station 2.0 con steamvr sin un equipo completo de vive pro si cuando se intenta agregar desde windows piden un PIN y si es atravez del mismo steamvr dice que no hay bluetooth disponible?

    1. Avatar de Javier

      Hola Juan, la conexión bluetooth se realiza a través de un receptor USB (Dongle) que viene incluido con el tracker. He añadido esta información al post, gracias por comentarlo.

  2. Avatar de Javier Alvarez
    Javier Alvarez

    Hola, yo tengo una pregunta, está manera de vincular la cámara es como la hicieron para grabar mandalorian? o es algo similar? o son procesos totalmente distintos?

    1. Avatar de Javier

      Hola Javier, básicamente es el mismo sistema: mediante una serie de sensores colocados en el plató, se registra la posición de la cámara en tiempo real (tracking) y luego se generan los fondos en Unreal Engine. La diferencia es que en The Mandalorian, cada sensor cuesta miles de dólares y los de HTC poco más de 100. Además utilizan enormes paneles de LED para los fondos. En este otro artículo lo explico con más detalle: https://javiersalinas.es/que-es-la-produccion-virtual-con-pantalla-led/

      1. Avatar de Javier Alvarez
        Javier Alvarez

        Gracias por tu respuesta, tengo una pregunta más te comento, yo tengo el kit de htc vive con el casco, controles y sensores, pero no tengo el tracker, el procedimiento cambia mucho comparado con este? o como sería? muchas gracias por tus aportes

  3. Avatar de Santi
    Santi

    Hola Javier, muy interesante tu articulo. En el dices que una producción virtual combina elementos reales como puede ser una persona, dentro de un escenario virtual. Si lo que queremos es hacerlo al revés, cómo se debería proceder?

    1. Avatar de Javier

      Hola Santi, muchas gracias por el comentario. Si lo que quieres es extraer un elemento de Unreal para integrarlo en unas escena real, tendrías que colocar este elemento en una capa CG-Layer (En lugar de Media Plate) y exportar la secuencia solo con esta capa. Luego podrías finalizar la composición en un programa externo como After Effects. Espero realizar un tutorial de este proceso muy pronto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *