Reflection probe performance and optimisation
Implementando un Unity Cluster

Cluster Rendering

Cluster Rendering está disponible en una como una compra de licencia por separado. Por favor contáctenos para hablar con un representante de cuentas de Unity acerca de la compra de una licencia para Cluster Rendering.

Información General

La tecnología de Cluster Rendering de Unity permite varias maquinas simular la misma escena de manera sincronizada, y muestra el resultado en un cluster (grupo) de pantallas. Esta característica le permite a usted desplegar sus ambientes de Unity a ambientes complejos de varias pantallas como una video wall, una CAVE, un Dome o cualquier diseño personalizado de varias pantallas.

En comparación con otras soluciones en las que sólo se utiliza una máquina para generar varias salidas de pantallas, el Cluster Rendering de Unity tiene la habilidad de escalara una gran cantidad de pantallas (hasta 50 o más si las capacidades de networking son bastante altas). Con una sola máquina suministrar energía a varias pantallas, cada pantalla añade un coste computacional a esa máquina. En comparación con el Cluster Rendering de Unity, la carga de rendering se comparte en muchas maquinas, con cada maquina siendo responsable de rendering una pantalla.

Esto funciona teniendo el mismo proyecto instalado en todas las maquinas, ejecutándose en una sincronización lockstep. Cada maquina se ejecuta en la misma simulación, pero difiere en el output de rendering, renderizando solamente la porción de la configuración multi-pantalla.

Esta sincronización lock-step ocurre sobre una red de área local.

Configuración de Hardware

Un Node (nodo) en el cluster consiste de una estación de trabajo y una salida de pantalla. Cada estación de trabajo ejecuta una copia de la aplicación de Unity con el Cluster Rendering habilitado. Hay un Master Node (nodo maestro) y varios Client Nodes (nodos clientes). Los Client Nodes se conectan al Master Node mediante una Red de Área Local. Una red cableada se recomienda para esto. Una red de WiFi por lo general no es lo suficientemente rápido, y resultará en inconsistencias de sincronización.

Debajo del capote del Unity Cluster

Para comenzar un grupo de Cluster Rendering, usted debería empezar las maquinas Master y Client al mismo tiempo. Luego ejecutar la aplicación en cada maquina con el argumento de linea de comando específico para definir la relación del master y client.

El Master Node luego sincronizará todos los client nodes con él mismo. El método de sincronización se conoce como frame locking, o sincronización “lock step”. Esto significa que el Master Node va a propagar una señal de “actualización” en su propia llamada Update() para todos los Client Nodes, una vez todos los clients se han “checked in” con el maestro. Una vez el Master Node ha enviado la señal de Update, esperará para la siguiente revisión completa por todos los clientes y repetirá el ciclo.

El Master Node también envía con sí datos como el tiempo, los números aleatorios de seed e valores input. Esto asegurará que la aplicación simule idénticamente a través del master y todos los clients. La carga de datos que se sincroniza entre el Master y Client nodes cada frame es constante, sin importar la cantidad o complejidad de los objetos en la escena. Esto significa que la complejidad de la escena no tiene un impacto en el rendimiento de la red, solamente el rendimiento individual del rendering de cada nodo.

Dividiendo las pantallas a través de varias maquinas

Con todos los Client Nodes sincronizados al Master Node en el cluster, usted debe organizar los Nodes (nodos) de tal modo que cada uno esté renderizando una parte de la vista que tiene que renderizar. Los datos de sincronización no incluyen información acerca de la Camera, por lo que es libre de manipular la cámara individualmente en cada nodo. Ya que todos los nodos están simulando la misma escena, el truco es maniular las propiedades de la cámara para que cada nodo esté renderizando la parte correcta de la pantalla en general.

Para lograr esto dependerá de cómo las multiples pantallas están configuradas, pero el enfoque básico es asignar una matriz de proyección diferente a la cámara de cada node. Mirar Camera.projectionMatrix para más información acerca de cómo hacer esto.

Reflection probe performance and optimisation
Implementando un Unity Cluster