Compartilhar via


Modos de renderização

O Remote Rendering conta com dois modos de operação: TileBasedComposition e DepthBasedComposition. Esses modos determinam como a carga de trabalho é distribuída entre várias GPUs no servidor. O modo deve ser especificado no momento da conexão e não pode ser alterado durante o runtime.

Ambos os modos têm vantagens, mas também limitações de recursos inerentes. Portanto, escolher o modo mais adequado é específico do caso de uso.

Modos

Os dois modos serão discutidos mais detalhadamente agora.

Modo TileBasedComposition

No modo TileBasedComposition, cada GPU envolvida renderiza sub-retângulos específicos (blocos) na tela. A GPU principal compõe a imagem final dos blocos antes enviá-la como um quadro de vídeo para o cliente. Assim, todas as GPUs devem ter o mesmo conjunto de recursos para renderização, de modo que os ativos carregados precisem se ajustar à memória de uma única GPU.

A qualidade de renderização nesse modo é um pouco melhor do que no modo DepthBasedComposition, uma vez que o MSAA pode funcionar no conjunto completo de geometria para cada GPU. A captura de tela a seguir mostra que a suavização funciona corretamente para ambas as bordas do mesmo jeito:

MSAA in TileBasedComposition

Além disso, nesse modo, cada bloco pode ser alternado para um material transparente ou para o modo see-through por meio do HierarchicalStateOverrideComponent.

Modo DepthBasedComposition

No modo DepthBasedComposition, cada GPU envolvida é renderizada na resolução de tela inteira, menos um subconjunto de malhas. A composição da imagem final na GPU principal faz com que os blocos sejam mesclados corretamente de acordo com as informações de profundidade. Naturalmente, o conteúdo da memória é distribuído entre as GPUs, permitindo, assim, a renderização de modelos que não cabem na memória de uma única GPU.

Cada GPU única usa MSAA para suavizar o conteúdo local. No entanto, pode haver um serrilhado inerente entre as bordas de GPUs distintas. Esse efeito é mitigado pelo pós-processamento da imagem final, mas a qualidade de MSAA ainda é pior que no modo TileBasedComposition.

Os artefatos MSAA são ilustrados na imagem a seguir: MSAA in DepthBasedComposition

A suavização funciona corretamente entre a escultura e a cortina, porque ambos os blocos são renderizados na mesma GPU. Por outro lado, a borda entre a cortina e a parede mostra alguns serrilhados, pois esses dois blocos são compostos em GPUs distintas.

A maior limitação desse modo é que os blocos de geometria não podem ser alternados dinamicamente para materiais transparentes, e o modo see-through não funciona para o HierarchicalStateOverrideComponent. No entanto, outros recursos de substituição de estado (contorno, tonalidade de cores…) funcionam. Além disso, os materiais marcados como transparentes no momento da conversão funcionam corretamente nesse modo.

Desempenho

As características de desempenho de ambos os modos variam de acordo com o caso de uso. É difícil justificar ou dar recomendações gerais. Se você não está restrito pelas limitações mencionadas acima (memória ou transparência/see-through), é recomendável testar ambos os modos e monitorar o desempenho usando várias posições de câmera.

Definir o modo de renderização

O modo de renderização usado em um servidor do Remote Rendering é especificado durante RenderingSession.ConnectAsync por meio de RendererInitOptions.

async void ExampleConnect(RenderingSession session)
{
    RendererInitOptions parameters = new RendererInitOptions();

    // Connect with one rendering mode
    parameters.RenderMode = ServiceRenderMode.TileBasedComposition;
    await session.ConnectAsync(parameters);

    session.Disconnect();

    // Wait until session.IsConnected == false

    // Reconnect with a different rendering mode
    parameters.RenderMode = ServiceRenderMode.DepthBasedComposition;
    await session.ConnectAsync(parameters);
}

Documentação da API

Próximas etapas