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

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.

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.


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.


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

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.

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.

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á.

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

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.

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.


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.

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.

Como valor por defecto, elige el MediaPlayer creado anteriormente.

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.

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.

Crea una primera capa Media Plate.

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.

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.

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.

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

Deja una respuesta