A sincronização é uma parte essencial da exibição de várias seções de conteúdo em tempo real em um grande monitor. Todos os sistemas dentro do ecossistema de renderização/monitor deve seguir um tempo rígido, medido em milissegundos, para produzir a ilusão de uma exibição sem interrupções.
A configuração de vários monitores geralmente requer recursos de sincronização no nível do software e do hardware. Não apenas o conteúdo gerado deve estar pronto ao mesmo tempo em todos os PCs, usando a mesma informação de sincronização para simulação, mas a troca de monitor (a troca da imagem atual para a próxima imagem no buffer das placas de vídeo) também precisa acontecer na hora correta para evitar artefatos.
Para RV e outros tipos de exibições estereoscópicas, a questão da sincronização aplica-se duplamente, pois os dois quadros diferentes, um para cada olho, devem se coordenar perfeitamente.
Determinismo
Existem dois tipos de abordagem para gerenciar a sincronização:
- Determinístico: cada servidor (PC, nó de renderização) é configurado de forma que a saída seja sempre previsível dado um conjunto específico de entradas, o que significa a única informação que o servidor precisa para sincronizar com outras máquinas no sistema é um tempo preciso e informações de entrada/saída para cada máquina individual.
- Não determinístico: para garantir a sincronização, o sistema força a replicação das matrizes de transformação e outras características relevantes de todos os atores ou objetos em uma cena e as reproduz em todo o sistema.
Cada abordagem tem prós e contras. A principal vantagem de um sistema determinístico é a simplicidade do projeto, e a largura de banda de dados economizada ao não compartilhar dados de transformação para cada objeto em cada quadro. A desvantagem é que, se um sistema divergir, a divergência terá problemas desconhecidos ao longo do tempo. A uniformidade de renderização pode ser drasticamente afetada, causando descontinuidade visual e artefatos.
Sincronização de hardware e Genlock
Apesar de o PC primário de nDisplay garantir que todos os PCs (de nós) de cluster sejam informados sobre as informações de sincronização de uma perspectiva de jogabilidade (por exemplo, qual quadro renderizar), placas de sincronização de hardware especializadas e placas gráficas profissionais compatíveis são necessárias para sincronizar a exibição desses quadros renderizados exatamente ao mesmo tempo no dispositivo de exibição físico.
Por exemplo, em aplicativos de transmissão, é comum sincronizar muitos dispositivos, como câmeras, monitores e outros monitores, para que todos alternem e capturem o próximo quadro precisamente ao mesmo tempo. Nesse setor, o uso de sinais bloqueados por gerador (genlock) é amplamente adotado e usado.
Normalmente, a configuração é composta por um gerador de hardware que envia o relógio para o hardware que requer sincronização. No caso de PCs usados para renderização em tempo real, placas gráficas profissionais, como as da linha NVIDIA Quadro, oferecem suporte para essa tecnologia juntamente com as placas NVIDIA Quadro Sync II, que serão bloqueadas no sinal ou pulso de sincronização recebido.
Topologia do sistema
Nó primário (gerador de relógio)
Nós de cluster (relógio de recebimento da GPU do nó primário)
Ao usar a o Quadro Sync:
- Use os drivers de "Production Branch/Studio" preferencialmente, porque eles tendem a ser mais estáveis do que os drivers de "New Feature Branch".
- Aciona pulsos de sincronização usando "bordas finais", porque tendem a ser mais confiáveis que "bordas iniciais" na deteção da taxa correta de sinais.
Sincronização de exibição desmistificada
-
Apenas bloqueio de quadro: usando técnicas em daisy chain em GPUs, esse é o método que a NVIDIA comumente chama de FrameLock/SwapSync. Nenhum genlock é usado aqui. Uma GPU no PC de nDisplay principal obtém um relógio mestre de uma exibição de saída ou processador conectado a ela e, em seguida, o propaga para as GPUs de PC não renderizar. Todos os PCs estão conectados dentro da topologia de árvore, em que o PC principal é a raiz. Essa abordagem permite o uso de alternância de grupos/barreiras da NVIDIA por meio da API da NVIDIA.
Essa abordagem não é adequada para produção virtual, pois funciona isoladamente de outros dispositivos usados no espaço, com todos eles sendo sincronizados com um relógio mestre externo.
-
Apenas genlock: com esse esquema, todas as GPUs de PC agrupadas obtêm seu sinal de relógio mestre de proprietário (genlock) da mesma fonte. Em outras palavras, cada PC recebe seu próprio cabo BNC, e todos os cabos são conectados ao mesmo gerador de relógio mestre.
Essa abordagem permite a sincronização de VSync; no entanto, as barreiras NVIDIA não estão disponíveis por meio da API da NVIDIA. Tecnicamente, todos os PCs do cluster tem trava de quadro para o relógio recebido. Porém, essa abordagem não mostrou ser 100% confiável porque não há controle preciso sobre a apresentação do quadro no nível do aplicativo.
Este é o método usado antes e por que tínhamos que implementar uma política de sincronização "avançada" que reduzisse a probabilidade de dessincronizações/falhas.
-
Genlock + trava de quadros: essa abordagem é a mais desejável para a produção virtual. Todos os dispositivos do estágio estão conectados a um relógio mestre, incluindo a GPU do PC de nDisplay principal. A sincronização no cluster é realizada usando-se conexões daisy chain entre o PC principal e os PCs do nó de renderização.
Essa abordagem proporciona o uso da API da NVIDIA e, portanto, utiliza barreiras da NVIDIA, que fornecem controles da UE sobre a apresentação do quadro no nível do aplicativo. Fornece o método mais confiável de sincronização de exibições, juntamente com um relógio externo (genlock) fornecido.
Daisy chain e genlock direto
Daisy chain é uma técnica de bloqueio de sinal que é usada junto com o genlock direto, onde o relógio mestre é enviado a um único PC ou dispositivo, neste caso, o PC principal. Cabos separados propagam o sinal para todos os outros PCs. Embora a experiência anterior com nDisplay sugira que o genlock direto (em que cada PC recebe o relógio diretamente da fonte primária) seja mais simples e eficaz do que a daisy chain, a nova abordagem de hardware baseada em daisy chain dá esperança de uma solução mais confiável e econômica para sinalizar o travamento. Essa solução é chamada de NVIDIA Swap Sync/Lock.
NVIDIA Mosaic e AMD EyeFinity
O Mosaic mode da NVIDIA e o EyeFinity da AMD são tecnologias de GPU semelhantes que combinam e sincronizam várias saídas dentro de uma placa gráfica para que apareçam como uma exibição única da perspectiva do software ou do sistema operacional. Esse monitor virtual é essencialmente uma agregação de vários monitores físicos atuando como um monitor síncrono que também pode ser sincronizado com outros monitores de diferentes sistemas usando técnicas subjacentes de trava de quadros ou genlock.
O processo de travar vários monitores usando um relógio interno é chamado de trava de quadros. Genlocking ocorre quando um relógio externo é usado. No contexto de genlock, o relógio externo é usado em todos os dispositivos, incluindo dispositivos de exibição, câmeras e sensores de rastreamento.
Presumindo que as GPUs estejam conectadas corretamente usando placas Quadro Sync II ou Firepro S400, as tecnologias Mosaic e EyeFinity permitem que várias saídas tenham exatamente o mesmo relógio e sejam tratadas como uma grande tela de monitores da perspectiva de um sistema operacional. Você pode criar quantos grupos de Mosaic ou EyeFinity por PC, mas não em PCs, cada PC deve ter seu grupo de Mosaico ou EyeFinity.
Para sincronizar os monitores orientados por vários PCs ou GPUs usando técnicas de daisy chain, uma GPU deve atuar como o gerador de relógio principal e compartilhar seu relógio com as outras GPUs, no mesmo PC ou em PCs diferentes, usando placas de sincronização como NVIDIA Quadro Sync II ou AMD Firepro S400.
Consulte mais informações em Mosaic Technology for Multiple Displays | NVIDIA e Multi-Display Eyefinity Technology.
Embora seja possível ter um monitor virtual Mosaic gerado em várias GPUs dentro de um só PC, atualmente, seria lento ter uma janela de aplicativo sobre essa tela. Um trabalho futuro pode habilitar isso. Hoje, essa abordagem não seria recomendada para produção virtual nem efeitos especiais na câmera.
Outros aspectos da sincronização de exibição
As threads do jogo e do renderizador são sempre sincronizadas pelo que são chamadas de barreiras de threads. Essa é a funcionalidade principal dos dois itens abaixo. Não é possível desabilitar barreiras. Considere-os como pontos em uma escala de tempo que ajudam o nó principal a lidar com o nó de agrupamento de forma síncrona para fornecer uma experiência de conteúdo uniforme em vários PCs da UE.
| Funcionalidade | Descrição |
|---|---|
| Software/Simulação (o que você deve ver) | O processo de sincronização de todos os assuntos relacionados a software. Trata-se de fazer com que a Unreal Engine e seu conteúdo sincronizem corretamente: determinismo de funcionalidades, sincronização de tempo delta, replicação de entrada, transformações personalizadas, barreiras de threads, evento de cluster, lógica de jogo e assim por diante. |
| Hardware/SO (como você deve ver o conteúdo) | O processo de sincronização de dispositivos de hardware, como GPUs, dispositivos de exibição e DWM (Desktop Window Manager, gerenciador de janelas da área de trabalho) usando um relógio compartilhado; uma sincronização interna ou um sinal de genlock. É como fazer um sistema operacional e um hardware mostrar o que você deseja de forma síncrona, sem rastreamento. Isso requer placas gráficas NVIDIA Quadro, além de placas Sync II e um gerador de genlock. Espere pelo menos um atraso de hardware de um quadro se a opção não estiver habilitada. |
Políticas de sincronização de renderização
As políticas de sincronização de renderização definir como sincronizar a saída de renderização. Este parâmetro pode ser definido no painel Detalhes do cluster em nDisplay 3D Config Editor.
A tabela a seguir descreve a opção disponível para a política de sincronização de renderização.
| Opção | Descrição |
|---|---|
| Nenhum (sincronização da política 0) | Significa que "VSync=0". Todos os nó mostram seu quadro após RenderThreadBarrier SEM sincronização com VBlank. Isso fornece máximo de FPS ao custo de um potencial interrupção por artefatos. |
| Ethernet (política de sincronização 1) | Todos os nó mostram seu quadro após RenderThreadBarrier COM sincronização com VBlank. Os monitores de saída não terão interrupções. Observe que ainda pode ser possível interrupções entre os monitores devido ao DWM do Windows e às configurações de tempo de execução ou do driver. |
| NVIDIA (política de sincronização 2) | A trava de quadros de hardware da NVIDIA (NVIDIA SwapLock API) baseado na conexão em daisy chain. Você pode usar os parâmetros na seção NVIDIA para ajustar algumas configurações de hardware específicas relacionadas à trava de quadros.
|
| Personalizado | Configura qualquer política de sincronização personalizada da qual o nDisplay não está ciente. Um ID de política e qualquer parâmetros valor-chave são necessários. |
Anteriormente, desenvolvemos um mecanismo de sincronização chamado Advanced Sync para circunstâncias específicas em que a renderização de um quadro em um determinado PC de nDisplay ocorria após VBlank, criando interrupções na tela. Esse mecanismo de software tenta prever esses eventos e força todos os PCs a ignorar e renderizar no próximo VBlank. Esse mecanismo não é 100% perfeito e pode ter um impacto indesejável no desempenho quando habilitado.
Mais recentemente, implementamos a API da NVIDIA para sincronização (Sync Policy 2), que é uma abordagem suportada por hardware para o problema.
As conexões de trava de quadros em um servidor de sincronização: 1) Servidor de sincronização 2) Clientes.
1) Fonte de sincronização 2) Servidor 3) Clientes
Como fazer com que a sincronização funcione
Para uma sincronização confiável no contexto de produção virtual, você precisa usar uma técnica que combine o genlock e a trava de quadros. Resumindo, você alimenta o sinal de genlock para o PC de nDisplay principal e, em seguida, usa o método de hardware daisy chain para expedir o sinal de sincronização de entrada para todos os PCs restantes do cluster para que fiquem apresentem uma trava de quadros correta. Isso implica uma política de sincronização de renderização da NVIDIA que precisa ser adequadamente definida dentro do ativo de configuração.
Fluxo de trabalho
- Configure a conexão em cadeia entre as placas de sincronização de GPU de agrupamento usando um cabo Ethernet comum com conectores J45 comuns.
- Habilite o MOSAIC e configure a sincronização por meio do painel de controle da NVIDIA (defina um PC principal e, em seguida, defina os nós do cluster de sincronização).
- Habilite DirectX Swapgroup PrePresentWait usando as etapas a seguir:
- Faça download do nVidia Configure Driver Utility.
- Execute ConfigureDriver.exe como administrador.
- Digite "11" e pressione Enter.
- No Editor de Configuração 3D nDisplay, defina a Política de Sincronização de Renderização do cluster como NVIDIA.
- Opcional: Para sistemas complexos, é possível personalizar o grupo de swap da NVIDIA e as barreiras de sincronização nas configurações do cluster.
Por padrão, o grupo de sincronização 1 e a barreira de sincronização 1 são usados.
A configuração de cluster Política de Sincronização de Renderização da NVIDIA habilita um grupo de swap da NVIDIA nos nós do cluster.
Comentários adicionais
Um valor de 0 não é permitido. Um valor de 0 é usado internamente para separar/sair de um grupo/barreira. Somente números naturais são permitidos. Em um sistema simples com uma GPU e uma placa de sincronização, você tem um único grupo de sincronização #1 e uma única barreira de sincronização #1. Eles são usados por padrão.
Teste de sincronização
Testar a sincronização para uma tela dimensionada pode ser complicado, pois a dessincronização pode ser resultado de vários problemas, entre eles:
- O quadro errado é simulado devido a um carimbo de data/hora incorreto (problema de software).
- A temporização do dispositivo de exibição está desativada (problema na tela ou no hardware).
Para testar a sincronização, usamos um projeto de teste simples que exibe um único objeto que se move rapidamente por toda a superfície da tela. Quando sistemas estão devidamente sincronizados, o objeto mantém sua forma ao atravessar fronteiras. Caso contrário, a tela mostrará artefatos nas bordas compartilhadas.
Quando os sistemas estão devidamente sincronizados, o objeto mantém sua forma ao passar da Tela 1 para a Tela 2.
Links para informações adicionais
-
Capítulo 30, Configuração do bloqueio de quadros e do Genlock
-
[Adaptadores de tela recomendados pela NVIDIA(https://nvidia.custhelp.com/app/answers/detail/a_id/4449/~/nvidia-recommended-display-adapters)