La sincronización es una parte vital de la visualización de varias secciones de contenido en tiempo real en una pantalla grande. Todos los sistemas del ecosistema de renderizado/visualización deben cumplir un cronometraje estricto, medidos en milisegundos, para producir la ilusión de una visualización perfecta.
Las configuraciones multipantalla suelen requerir capacidades de sincronización tanto a nivel de software como de hardware. El contenido generado no solo debe estar listo al mismo tiempo en todos los PC, con la misma información de tiempo para la simulación, sino que también debe producirse el intercambio de visualización (el cambio de la imagen actual por la siguiente en el búfer de la tarjeta de vídeo) en el momento correcto para evitar artefactos con tearing en la pantalla.
En la RV y otros tipos de pantallas estereoscópicas, la cuestión de la sincronización se aplica por partida doble, ya que los dos fotogramas diferentes (uno para cada ojo) deben coordinarse perfectamente.
Determinismo
Existen dos tipos de enfoque para gestionar la sincronización:
- Determinista: cada servidor (PC, nodo de renderización) está configurado de tal manera que la salida siempre es predecible si se proporciona un conjunto concreto de entradas, lo que significa que la única información que el servidor necesita para sincronizarse con otras máquinas en el sistema es una hora precisa y la información de entrada/salida de cada máquina individual.
- No determinista: para garantizar la sincronización, el sistema fuerza la replicación de las matrices de transformación y otras características relevantes de todo actor u objeto de una escena y las reproduce por todo el sistema.
Cada enfoque tiene ventajas y desventajas. La principal ventaja de un sistema determinista es la sencillez del proyecto y el ancho de banda de datos que se ahorra al no compartir transformar datos de cada objeto en cada fotograma. El inconveniente es que, si un sistema diverge, la divergencia tendrá problemas desconocidos con el tiempo. La uniformidad de la renderización podría verse gravemente comprometida, lo que daría lugar a la discontinuidad de los elementos visuales y a artefactos.
Sincronización por hardware y genlock
Mientras que el PC principal con nDisplay garantiza que todos los PC de conjunto (nodo) reciben la información de tiempo desde una perspectiva de jugabilidad (por ejemplo, qué fotograma se va a renderizar), se necesitan tarjetas de sincronización de hardware especializado y tarjetas gráficas profesionales compatibles para sincronizar la visualización de los fotogramas renderizados exactamente al mismo tiempo en los dispositivos de visualización física.
Por ejemplo, en las aplicaciones de retransmisión, es habitual sincronizar muchos dispositivos, como cámaras, monitores y otras pantallas, para que todos cambien y capturen el siguiente fotograma exactamente al mismo tiempo. En este sector está muy extendido el uso de señales bloqueadas por generador (genlock).
Normalmente, la configuración consta de un generador de hardware que envía el reloj al hardware que requiere sincronización. En el caso de los ordenadores que se utilizan para la renderización en tiempo real, las tarjetas gráficas profesionales, como las de la gama NVIDIA Quadro, admiten esta tecnología junto con la tarjeta NVIDIA Quadro sync II, que se sincronizará con la señal de temporización recibida o pulso.
Topología del sistema
Nodo primario (generador de reloj local)
Nodos de clúster (reloj de recepción de la GPU del nodo principal)
Cuando utilices la sincronización de Quadro:
- Utiliza preferentemente controladores de «Estudio/rama de producción» porque suelen ser más estables que los controladores de «Nueva rama de funciones».
- Activa los pulsos de sincronización con «bordes decrecientes», porque tienden a ser más fiables que los «bordes principales» a la hora de detectar la frecuencia de señal correcta.
Adiós al mito de la sincronización de la pantalla
-
Solo bloqueo de fotogramas: mediante técnicas de encadenamiento en todas las GPU, este método es lo que NVIDIA denomina habitualmente FrameLock/SwapSync. Aquí no se utiliza ningún genlock. Una GPU del PC con nDisplay principal obtiene un reloj maestro de un procesador o pantalla de salida conectado a él y, a continuación, lo propaga a las GPU del PC del nodo de renderizado. Todos los PC están conectados dentro de una topología de árbol, donde el PC principal es la raíz. Este enfoque permite el uso de grupos/barreras de intercambio de NVIDIA a través de la API de NVIDIA.
Este enfoque no es muy adecuado para la producción virtual, ya que funciona de forma aislada de otros dispositivos utilizados en el espacio, y todos ellos están sincronizados con un reloj maestro externo.
-
Solo genlock: con este esquema, todas las GPU de PC de conjunto obtienen su propia señal de reloj maestro (genlock) de la misma fuente. Es decir, cada PC tiene su propio cable BNC y todos los cables están conectados al mismo generador de reloj maestro.
Este enfoque permite la sincronización vertical; sin embargo, las barreras de NVIDIA no están disponibles a través de la API de NVIDIA. Técnicamente, todos los PC del conjunto cuentan con bloqueo de fotogramas en relación con el reloj recibido. Sin embargo, este enfoque no ha demostrado ser 100 % fiable porque no hay una presentación precisa del control sobre fotogramas en el nivel de las aplicaciones.
Este es el método utilizado antes, por lo que hemos tenido que implementar una política de sincronización «avanzada» que redujera la probabilidad de desincronización/fallos.
-
Genlock + bloqueo de fotogramas: este enfoque es el más deseable para la producción virtual. Todos los dispositivos de escenario están conectados a un reloj maestro, incluida la GPU principal de nDisplay para PC. La sincronización en conjunto se consigue mediante conexiones encadenadas entre el PC principal y los PC del nodo de renderizado.
Este enfoque prevé el uso de la API de NVIDIA y, por tanto, utiliza barreras de NVIDIA, lo que proporciona a UE Control una presentación sobre fotograma en el nivel de las aplicaciones. Proporciona el método más fiable de sincronizar pantallas, junto con un reloj externo proporcionado (genlock).
Conexión en cadena frente a genlock directo
La conexión en cadena es una técnica de bloqueo de señal que se utiliza junto con el genlock directo, en la que el reloj maestro se envía a un único PC o dispositivo, en este caso, al PC principal. Separa los cables y, a continuación, propaga la señal a todos los demás PC. Aunque la experiencia previa con nDisplay sugiere que el genlock directo (en el que cada PC recibe la señal de reloj directamente de la fuente primaria) es más sencillo y eficaz que la conexión en cadena, el nuevo enfoque del hardware basado en la conexión en cadena ofrece la posibilidad de una solución más fiable y económica para indicar el bloqueo. Esta solución se llama Bloqueo/sincronización de intercambio de NVIDIA.
NVIDIA Mosaic y AMD EyeFinity
Mosaic mode de NVIDIA y EyeFinity de AMD son tecnologías de GPU similares que combinan y sincronizan varias salidas dentro de una tarjeta gráfica para que aparezcan como una visualización única desde la perspectiva del SO o del software. Esta pantalla virtual es esencialmente una agregación de varias pantallas físicas que actúan como una pantalla síncrona que también puede sincronizarse con otras pantallas de diferentes sistemas mediante técnicas subyacentes de fotograma o genlock.
El proceso de bloquear varias pantallas con un reloj local se llama bloqueo de fotogramas. El genlocking se produce cuando se utiliza en su lugar un reloj externo. En el contexto de genlock, el reloj externo se utiliza en todos los dispositivos, incluidos los dispositivos de visualización, la cámara y los sensores de seguimiento.
Suponiendo que las GPU estén correctamente conectadas mediante la tarjeta Quadro Sync II o la tarjeta Firepro S400, tanto las tecnologías Mosaic como Eyefinity permiten que varias salidas tengan exactamente el mismo reloj y que se traten como un gran lienzo de visualización desde la perspectiva de un sistema operativo. Puedes crear uno o varios grupos de Mosaic o Eyefinity por PC, pero no entre varios PC: cada PC debe tener su propio grupo de Mosaic o Eyefinity.
Para sincronizar pantallas controladas por varios PC o GPU mediante técnicas de conexión en cadena, una GPU debe actuar como generador de reloj maestro y compartir su reloj con las otras GPU, ya sea en el mismo PC o en diferentes PC, con una tarjeta de sincronización, como la tarjeta NVIDIA. Quadro Sync II o AMD Firepro S400.
Para obtener más información, consulta la tecnología Mosaic para varias pantallas | NVIDIA y la tecnología Eyefinity multipantalla.
Aunque es posible tener una pantalla virtual MOSAIC generada en varias GPU dentro de un mismo PC, actualmente sería lento tener una ventana de aplicaciones sobre ese lienzo. (El trabajo futuro puede habilitarlo). Hoy en día, este enfoque no sería recomendable para la producción virtual o los efectos visuales en cámara.
Otros aspectos de la sincronización de pantalla
Los subprocesos de juego y de renderizado están siempre sincronizados por lo que se denomina barreras de subproceso. Esta es la función principal de los dos elementos siguientes. No es posible deshabilitar las barreras. Considéralos como puntos en una escala temporal que ayudan al nodo principal a tratar con el nodo de conjunto de forma síncrona para proporcionar una experiencia de contenido uniforme en varios PC de UE.
| Función | Descripción |
|---|---|
| Software/simulación (lo que deberías ver) | El proceso de sincronizar todos los asuntos relacionados con el software. Se trata de hacer que Unreal Engine y su contenido estén correctamente sincronizados: determinismo de funciones, sincronización de tiempo delta, replicación de entradas, transformaciones personalizadas, barreras de subprocesos, eventos de conjunto, lógica de juego, etc. |
| Hardware/SO (cómo deberías ver el contenido) | El proceso de sincronizar un dispositivo de hardware, como una GPU, un dispositivo de visualización y el DWM (gestor de ventanas del escritorio) con un reloj compartido: una sincronización local o una señal de genlock. Así se consigue que un sistema operativo y un hardware muestren lo que quieres de forma sincrónica, sin tearing. Esto requiere la tarjeta gráfica NVIDIA Quadro, más tarjetas Sync II, más un generador genlock. Se espera al menos un retraso de hardware de un fotograma si no se ha habilitado. |
Políticas de sincronización de renderizado
Las políticas de sincronización de renderizado definen cómo sincronizar la salida de renderizado. Este parámetro se puede establecer en el panel Detalles del conjunto en el editor de configuración 3D de nDisplay.
En la siguiente tabla se describen las opciones disponibles para la política de sincronización de renderizado.
| Opción | Descripción |
|---|---|
| Ninguna (política de sincronización 0) | Sincronización vertical = 0. Todos los nodos muestran su fotograma después de RenderThreadBarrier SIN sincronización con VBlank. Esto da el máximo de fps a costa de obtener posibles artefactos de tearing. |
| Ethernet (política de sincronización 1) | Todos los nodos muestran sus fotogramas tras la sincronización de RenderThreadBarrier CON VBlank. Las pantallas de salida no tendrán tearing. Ten en cuenta que es posible que se produzca tearing entre las pantallas debido a DWM de Windows y a la configuración del tiempo de ejecución o del controlador. |
| NVIDIA (política de sincronización 2) | Bloqueo de fotogramas de hardware de NVIDIA (API NVIDIA SwapLock) basado en conexión cadena. Puedes utilizar el parámetro en la sección de NVIDIA para modificar algunos ajustes específicos de hardware relacionados con el bloqueo de fotogramas.
|
| Personalizada | Configura cualquier política de sincronización personalizada que nDisplay desconozca. Son obligatorios un ID de política y cualquier cantidad de parámetro de clave-valor. |
Anteriormente, desarrollamos un mecanismo de sincronización denominado Sincronización avanzada para circunstancias específicas en las que la renderización de un fotograma en un PC con nDisplay determinado se producía después de VBlank y creaba tearing en pantalla. Este mecanismo de software intenta predecir esos eventos y fuerza a todos los PC a omitirlos y renderizarlos en el siguiente VBlank. Este mecanismo no es perfecto al 100 % y puede tener un impacto de rendimiento no deseado cuando se habilita.
Más recientemente, implementamos la API de NVIDIA para la sincronización (política de sincronización 2), que es un enfoque del problema compatible con el hardware.
Conexiones de bloqueo de fotogramas en un servidor de cronometraje: 1) servidor de cronometraje, 2) cliente.
1) Fuente de sincronización, 2) servidor, 3) clientes.
Cómo garantizar el buen funcionamiento de la sincronización
Para obtener una sincronización fiable en el contexto de la producción virtual, tienes que utilizar una técnica que combine tanto el genlock como el bloqueo de fotogramas. En resumen, alimentas la señal de genlock al PC principal con nDisplay y, a continuación, utilizas el método de hardware de conexión en cadena para distribuir la señal de sincronización entrante a todos los PC restantes del conjunto, de modo que tengan un bloqueo de fotogramas correcto. Esto implica una política de sincronización de renderizado de NVIDIA que debe definirse correctamente dentro del recurso de configuración.
Flujo de trabajo
- Configura la conexión en cadena entre los paneles de sincronización de la GPU del conjunto mediante un cable de Ethernet normal con conectores RJ45 normales.
- Habilita MOSAIC y configura la sincronización a través del panel de control de NVIDIA (establece un PC principal y, a continuación, configura los nodos del conjunto de sincronización).
- Activa el grupo de intercambio de DirectX PrePresentWait siguiendo estos pasos:
- Descarga nVidia Configure Driver Utility.
- Ejecuta ConfigureDriver.exe como administrador.
- Escribe "11" y pulsa Intro.
- En el editor de configuración de nDisplay 3D, establece la política de sincronización de renderizado del conjunto en NVIDIA.
- Opcional: para sistemas complejos, es posible personalizar las barreras de sincronización y agrupación de intercambio de NVIDIA en la configuración del conjunto.
De forma predeterminada, se utilizan el grupo de sincronización 1 y la barrera de sincronización 1.
La configuración del conjunto de la política de sincronización de renderizado de NVIDIA activa un grupo de intercambio de NVIDIA en los nodos del conjunto.
Comentarios adicionales
No se permite un valor 0. Un valor 0 se utiliza internamente para desconectar/abandonar un grupo/barrera. Solo se permiten números naturales. En un sistema sencillo con una GPU y un panel de sincronización, tienes el grupo de sincronización único n.º 1 y la barrera de sincronización única n.º 1. Se utilizan de forma predeterminada.
Prueba de sincronización
Probar la sincronización de una pantalla a escala puede ser complicado porque la desincronización puede deberse a varios problemas, entre ellos:
- Se simula un fotograma equivocado debido a una marca de tiempo incorrecta (problema de software). * La sincronización del dispositivo de visualización está desactivada (problema de pantalla o hardware).
Para probar la sincronización, utilizamos un proyecto de prueba simple que muestra un único objeto que se mueve rápidamente por toda la superficie de visualización. Cuando los sistemas están correctamente sincronizados, el objeto conserva su forma al cruzar los límites. En caso contrario, la pantalla mostrará artefactos en aristas compartidas.
Cuando los sistemas están correctamente sincronizados, el objeto conserva su forma al pasar de la pantalla 1 a la pantalla 2.