Este guia fornece instruções sobre como configurar o SMPTE 2110, usando o NVIDIA Rivermax, para funcionar com o nDisplay, especificamente ao trabalhar com efeitos especiais na câmera (ICVFX) e uma parede de LED.
Transmissão de câmera de ICVFX com nDisplay
A integração de compartilhamento de mídia e renderização fora da tela fornece uma maneira de aproveitar fontes e saídas de mídia SMPTE 2110 para otimizar o desempenho de seus agrupamentos. Você pode mover a renderização de cada câmera ICVFX para sua própria máquina e, em seguida, usar os recursos de multicast do SMPTE 2110 para entregar essas transmissões de câmera a outros nós que dependem delas.
Isso significa que você pode dedicar nós de renderização à renderização de câmeras, o que geralmente escala melhor do que renderizar todos os frustums internos em todos os nós de renderização. Com essa configuração, você não altera a forma como a UE envia pixels à parede. Uma placa de sincronização ainda é usado por nós de compositor para enviar a saída de forma síncrona. No entanto, nós de renderização dedicados a renderizar frustums internos não precisam de uma placa de sincronização. Além disso, nessa configuração, a definição de tempo via PTP não é usada para a transmissão do SMPTE 2110 compartilhada entre instâncias da UE.
Este exemplo mostra como configurar um agrupamento de três nós e duas câmeras ICVFX. Este exemplo começa com uma configuração de cena existente para mostrar o processo de conversão para aproveitar essas novas adições.
Configuração de nós
No Navegador de Conteúdo, procure e abra sua configuração do nDisplay. Este exemplo é chamado de NDC_MyStage:
Esta configuração tem três nós controlando a parede, e cada um deles renderiza um conjunto de janelas de visualização. Eles não serão modificados.
Nó Janelas de visualização Node_1
VP_W1
Node_2
VP_W2
Node_3
VP_C1 VP_C2
Ele também possui duas câmeras ICVFX. Para cada uma delas, clique em + Adicionar e selecione Adicionar novo nó de agrupamento para criar um nó que você usará para renderizar a câmera.
Para cada nó:
Dê um nome que identifique para qual câmera será feita a renderização.
Desabilite Ajustar a posição do nó do agrupamento para evitar a sobreposição.
Desabilite Adicionar janela de visualização ao novo nó de agrupamento.
Defina o IP do host desejado.
Habilite a renderização sem periféricos.
Configure os adaptadores gráficos se o sistema tiver mais que um.
Após a configuração completa, a caixa de diálogo de Adicionar novo nó de agrupamento deve ficar como na seguinte imagem.
Quando você terminar de criar os nós, seu agrupamento deve ficar como na seguinte imagem:
Configuração de mídia — Saída da câmera A de ICVFX
Depois de configurar os nós dedicados à renderização dos frustums da câmera, continue e configure o compartilhamento de mídia.
No organizador de cena, selecione ICVFXCameraA.
No painel Detalhes, encontre a seção Mídia:
Marque a caixa de seleção de Habilitar.
Adicionar um Grupo de Saída de Mídia. Aqui, você configura qual nó renderizará esse frustum interno e como ele será compartilhado.
O nó em que essa câmera será renderizada será Node_CamA para ICVFXCameraA. Se quiser configurar ICVFXCameraB, selecione Node_CamB.
Configure o tipo MediaOutput como Nvidia Rivermax Output para compartilhá-lo usando o ST 2110. Algumas configurações presentes aqui são importantes:
Defina o Modo de Alinhamento como Criação de Quadro. Isso significa que a sua saída começará a transmitir o frustum renderizado assim que estiver disponível, sempre respeitando o intervalo de quadros configurado na transmissão.
Defina o modo Travamento de Quadros como Bloquear ao reservar, para garantir que todos os quadros renderizados serão compartilhados.
Habilite DoFrameCounterTimestamp. Isso incorpora o número de quadros da Unreal Engine na transmissão de vídeo e será usado pelos nós receptores para saber quais amostras correspondem a qual quadro.
Forçar uma Resolução não é necessário, pois a UE detectará o tamanho do frustum automaticamente após a captura.
A Taxa de Quadros é importante. O padrão 2110, como SDI, transfere um quadro de vídeo por todo o intervalo de quadro. Se você configurar a transmissão de vídeo 2110 para 24 FPS, cada quadro levará 41 ms para ser recebido pelos ouvintes. Para minimizar a latência, e dependendo da largura de banda disponível da placa de rede, configure a taxa de quadros para ser mais rápida do que a taxa apresentada pelo agrupamento. Isso significa que, para um agrupamento rodando a 24 FPS, você deve transmissão o frustum interno mais rápido do que isso. É preferível usar 48, 60 ou uma taxa de quadros ainda mais rápida, mas leve em consideração o uso de largura de banda.
Para o Endereço da Interface, use curingas para deixar a configuração o mais flexível possível para funcionar em diferentes máquinas com IPs diferentes.
Para Endereço da Transmissão, escolha um endereço de multicast exclusivo para evitar que dois frustums internos façam uma transmissão no mesmo endereço. Se isso ocorrer, os receptores não conseguirão identificá-los. No exemplo mostrado aqui, CameraA usará 225.1.1.10 e CameraB usará 225.1.1.11.
A Sincronização de Captura não é necessária aqui, pois a transmissão não vai para a parede.
A configuração de saída deve ficar como na seguinte imagem:
Configuração de mídia — Entrada da câmera A de ICVFX
Agora que o lado de saída da renderização de ICVFXCameraA está configurado, você pode trabalhar no lado da recepção. Aqui, você configurará quais nós receberão a renderização compartilhada e como a receberão.
Primeiro, adicione um Grupo de Entrada de Mídia.
Adicione Nós de Agrupamento para receber essa saída. Neste caso, use todos os nós que impulsionam a parede (Node_1, Node_2, Node_3).
Para receber a renderização compartilhada usando ST 2110, configure a Fonte de Mídia como Fonte de Mídia Rivermax. Algumas configurações precisam estar definidas para que o travamento de quadros de baixa latência funcione.
Para Modo de Reprodutor, use Trava de Quadros para que os receptores aguardem um quadro esperado a cada renderização. Usando o número de quadros embutido, as instâncias receptoras da UE podem corresponder as amostras de vídeo com o número do quadro atual. Se um quadro ainda não tiver chegado, as instâncias receptoras o aguardarão, com a expectativa de que chegará.
Você pode usar a opção Usar zero latência para que as instâncias receptoras da UE aguardem um número de quadro correspondente ao atual sem adicionar latência. Dependendo do conteúdo, isso pode não ser possível. Você tem a opção de adicionar um quadro de latência para obter mais margem de espera pelo interno.
A Resolução não precisa ser forçada, pois será detectada automaticamente pelas instâncias receptoras da UE quando a transmissão for recebida.
Configure a Taxa de Quadros com a mesma taxa usada para a saída.
Para o Endereço da Interface, use curingas novamente, pois isso será usado por vários nós do agrupamento e eles não terão o mesmo IP da interface.
Configure o Endereço da Transmissão e a Porta para corresponderem à configuração de saída.
Você pode habilitar GPU Direct, mas certifique-se de que a GPU e a DPU (placa Mellanox) estejam no mesmo complexo raiz. Caso contrário, os pacotes 2110 podem ser perdidos, especialmente se houver várias transmissões de entrada.
Para habilitar totalmente o GPU Direct na entrada, defina
Rivermax.GPUDirectInput=1na inicialização da Unreal Engine ou antes de iniciar a transmissão do Rivermax.
Sua configuração de entrada deve ficar como na seguinte imagem:
ICVFXCameraA agora está configurada para ser compartilhada de um nó de renderização para o agrupamento. As configurações de mídia devem ficar assim:
Configuração de mídia — câmera B de ICVFX
Após terminar de configurar ICVFXCameraA, você poderá configurar ICVFXCameraB, que usará basicamente as mesmas configurações, mas com os seguintes detalhes:
Grupos de Saída de Mídia
O Nó de Agrupamento que renderiza ICVFXCameraB será Node_CamB.
O Endereço da Transmissão deve ser diferente. Use 225.1.1.11, mas mantenha o mesmo número de Porta.
Grupos de Entrada de Mídia
O Endereço da Transmissão é a única configuração que você deve alterar para corresponder à configuração de saída, neste exemplo, 225.1.1.11.
Você pode usar uma taxa de quadros mais rápida nas transmissões do 2110 para reduzir a latência. Isso tem um custo maior de largura de banda, então leve isso em consideração com base na sua configuração de rede. Se houver outros dispositivos usando largura de banda na mesma rede, você também deve considerá-los.
Exemplo de uso de largura de banda:
4k24 RGB10
~6,3 Gb/s
4k48 RGB10
~12,6 Gb/s
8k24 RGB10
~25 Gb/s
8k48 RGB10
~50 Gb/s
Transmissão de câmera ICVFX com nDisplay e saída síncrona (experimental)
Requisitos
A outra área do nDisplay que você pode atualizar é como você envia suas renderizações para a parede de LED. Em vez de enviar transmissões da GPU, agora você pode enviar transmissões ST 2110 diretamente da placa de rede. Ao fornecer uma referência de tempo PTP comum a cada nó, você pode travar os quadros e sincronizar cada transmissão indo para a parede, em vez de depender de uma placa de sincronização.
Isso exige:
Um relógio mestre que gera PTP.
Um switch compatível com transmissões ST 2110.
Uma placa de rede NVIDIA compatível, como a placa BlueField-2 com ConnectX-6.
O processador de LED também deve ser capaz de receber transmissões ST 2110.
Quando configurados dessa forma, todos os nós são configurados como sem periféricos ou fora da tela. Você não precisa mais configurar o mosaico nem lidar com configurações EDID, pois não estará transmitindo usando a GPU. No entanto, a referência de tempo PTP que vai para cada nó precisa ser válida o tempo todo.
Para que essa configuração funcione, a seção opcional sobre a configuração de PTP mencionada na fase de implantação é obrigatória.
Noções básicas da configuração
Em relação à configuração do nDisplay, esse recurso não altera como você configura a transmissão de câmera ICVFX. Em vez disso, este recurso aproveita a configuração de saída de mídia que você pode definir no nível do nó para transmitir o back buffer final renderizado por um determinado nó. Você também deve configurar o travamento de quadros.
Ao configurar o tamanho da janela de cada nó, dependendo do processador de LED que recebe as transmissões, pode haver restrições. Se o mesmo processador receber duas transmissões, talvez seja necessário fazer com que cada transmissão tenha o mesmo tamanho. Veja como aplicar essa restrição no mesmo agrupamento de exemplo descrito anteriormente.
Neste exemplo, você tem três nós para enviar: Node_1, Node_2 e Node_3. Como não há restrições de resolução, você pode reduzir ao máximo a janela de nós para enviar a quantidade mínima de pixels necessária. Nesse caso, você definirá as janelas do Node_1 e do Node_2 para o mesmo tamanho adicionando uma restrição. Considere que usam o mesmo processador de LED. A transmissão do Node_3 não terá essa restrição e não terá o mesmo tamanho de janela.
Configuração de nós — Node_1 e Node_2
Comece com as configurações do Node_1 e Node_2. Na configuração original:
O Node_1 usou um nó de tela cheia com tamanho de janela de 7680x2160 e janela de visualização de 2640x1408.
O Node_2 usou um nó de tela cheia com tamanho de janela de 3840x2160 e janela de visualização de 3344x1408.
Como a janela de visualização VP_W2 é a maior, torne as configurações idênticas para Node_1 e Node_2 e use o tamanho de 3344x1408 de VP_W2.
Habilite a configuração Renderização Sem Periféricos para definir os dois nós fora da tela e desabilite a opção Tela Cheia.
Essa alteração adicionou alguns pixels extras à transmissão do Node_1 para corresponder às dimensões da transmissão do Node_2. Quando as janelas de visualização não são todas iguais, é importante considerar como elas são organizadas por nó para minimizar o desperdício de largura de banda.
Agora configure a saída de mídia de cada nó. As mídias podem ser configuradas no nível do nó (backbuffer final) e no nível da janela de visualização. É importante fazer essa configuração no nó para enviar o resultado final de composição.
Selecione Node_1 e encontre sua seção Mídia:
Habilite a configuração de Mídia:
Adicione uma Saída de Mídia:
Configure Saída de Mídia como Saída NVIDIA Rivermax e defina as configurações para refletir isso:
Modo de Alinhamento: AlignmentPoint. Você precisa alinhar a saída com o Genlock usando a referência de tempo PTP. Portanto, a saída deve ser enviada em pontos de alinhamento conhecidos.
Realizar saída contínua: Verdadeiro. Se um quadro não foi renderizado no prazo, a saída deve continuar e repetir o quadro anterior.
Modo de Travamento de Quadros: Bloquear ao reservar. Você deve transmitir todos os quadros renderizados.
Tamanho da Fila de Apresentação: 2. O buffer duplo é ideal para minimizar a latência.
Número de Buffers de Textura: 3. Não há requisitos rígidos para isso.
Resolução: Não marcar. Você não precisa forçar uma resolução. Se esta opção não for marcada, uma transmissão será criada usando o tamanho do back buffer do nó.
Taxa de Quadros: Depende do projeto. O exemplo usa 24 FPS, mas seu projeto pode usar uma configuração diferente.
Formato de Pixel: RGB10. Isso pode variar para o seu projeto, e o receptor (processador de LED) deve ser compatível com esse formato.
Endereço da Interface: 10.69.70.. Neste exemplo, todos os nós estão na sub-rede 10.69.70. para facilitar a mudança da máquina que renderiza cada nó. O uso de um curinga no último octeto significa que o nó selecionado pode resolver para o endereço da interface local.
Endereço da Transmissão: endereço de transmissão único do Node_1. Neste exemplo, use 225.1.2.1 aqui e incremente o último octeto de cada nó para ter um endereço de multicast único por nó. Verifique se o grupo de multicast usado aqui já não está em uso na rede para evitar colisões.
Porta: 50000. Este exemplo usa 50000 para todos os nós e apenas o endereço de multicast muda.
Usar GPUDirect: FALSO. No momento, isso não é suportado com a saída ST 2110 com o travamento de quadros.
Defina Sincronização de Captura para usar Rivermax (PTP). Isso habilita um mecanismo que reforça o travamento de quadros no agrupamento usando uma barreira de sincronização Ethernet que aproveita uma referência de tempo PTP comum para todo o agrupamento.
Margem (ms): 5. Use o valor padrão. É uma margem de tempo de referência para quando o nó está prestes a entrar na barreira de sincronização de captura, pouco antes de enfileirar um quadro para apresentação. Se detectar que está muito perto do próximo ponto de alinhamento (pela margem), ele introduz um atraso na entrada na barreira.
Tempo Limite de Barreira (ms): 3000. Use o valor padrão. Tempo limite para sair da barreira para quando todos os nós não tiverem entrado antes do fim do tempo limite.
A configuração do Node_1 está concluída e deve ficar assim:
Agora que a configuração do Node_1 está concluída, configure o Node_2. A configuração deve ser idêntica à do Node_1, exceto por Endereço da Transmissão, que deve ser único.
Defina as configurações do Node_2 para serem idênticas às do Node_1.
Defina o Endereço da Transmissão para o Node_2 como 225.1.2.2.
Aqui está a configuração final do Node_2:
Configuração do nó — Node_3
Prossiga e configure o Node_3. No exemplo original descrito acima, havia um espaço entre as duas janelas de visualização.
Para reduzir o espaço desperdiçado, você pode configurar as janelas de visualização para eliminar a lacuna.
Em seguida, assim como fez no Node_1 e no Node_2, configure o nó para ser sem periféricos e ajuste o tamanho da janela para o mínimo necessário para conter as duas janelas de visualização.
Em vez de usar 7680x2160, defina Tamanho de Janela como 6336x1408.
Habilite a renderização sem periféricos.
Agora, defina as configurações de saída de mídia para o Node_3. Novamente, as configurações serão as mesmas que as do Node_1 e Node_2, exceto pelo endereço de transmissão, que deve ser único no agrupamento.
Defina as configurações de Node_3 para serem idênticas às do Node_1 e Node_2.
Defina o Endereço da Transmissão para o Node_3 como 225.1.2.3.
Com a configuração concluída, seu agrupamento agora usa cinco grupos de multicast:
225.1.1.10:50000 : ICVFXCameraA
225.1.1.11:50000 : ICVFXCameraB
225.1.2.1:50000 : Node_1
225.1.2.2:50000 : Node_2
225.1.2.3:50000 : Node_3
Aqui está a configuração final do Node_3: