Compartilhar via


Tamanhos de servidor

O Azure Remote Rendering está disponível em duas configurações de servidor: Standard e Premium.

Limites primitivos

Forma primitiva é um único triângulo (em malhas triangulares) ou um único ponto (em malhas de nuvem de ponto). As malhas triangulares podem ser instanciadas junto com nuvens de ponto e, nesse caso, a soma de todos os pontos e triângulos na sessão é contada em relação ao limite.

Tamanho padrão

O Remote Rendering com servidor de tamanho Standard tem um tamanho máximo de cena de 20 milhões de primitivos. Quando o renderizador de um servidor de tamanho "Standard" chega à limitação, ele alterna a renderização para uma tela de fundo quadriculada:

Screenshot shows a grid of black and white squares with a Tools menu.

Tamanho Premium

O Remote Rendering com o tamanho de Premium não impõe um valor máximo, mas o desempenho pode ser degradado caso o conteúdo exceda a capacidade de renderização do serviço. Além disso, para malhas triangulares (e ao contrário das nuvens de pontos), a quantidade disponível de memória gráfica é um limite rígido. Não é possível mapear a quantidade de memória gráfica para um número específico de triângulos, porque há muitos fatores contribuintes que dependem da malha de origem e das configurações:

Para nuvens de pontos, não há limite real, já que os ativos de nuvem de pontos usam a abordagem de streaming de dados. Com o streaming de dados, o renderizador gerencia automaticamente o orçamento de memória na placa gráfica, com base na geometria visível real.

Especificar o tamanho do servidor

O tipo desejado de configuração do servidor deve ser especificado no início da sessão de renderização. Não é possível alterá-lo em uma sessão em execução. Os exemplos de código seguintes mostram o local em que o tamanho do servidor deve ser especificado:

async void CreateRenderingSession(RemoteRenderingClient client)
{
    RenderingSessionCreationOptions sessionCreationOptions = default;
    sessionCreationOptions.Size = RenderingSessionVmSize.Standard; // or  RenderingSessionVmSize.Premium

    CreateRenderingSessionResult result = await client.CreateNewRenderingSessionAsync(sessionCreationOptions);
    if (result.ErrorCode == Result.Success)
    {
        RenderingSession session = result.Session;
        // do something with the session
    }
}
void CreateRenderingSession(ApiHandle<RemoteRenderingClient> client)
{
    RenderingSessionCreationOptions sessionCreationOptions;
    sessionCreationOptions.Size = RenderingSessionVmSize::Standard; // or  RenderingSessionVmSize::Premium

    client->CreateNewRenderingSessionAsync(sessionCreationOptions, [](Status status, ApiHandle<CreateRenderingSessionResult> result) {
        if (status == Status::OK && result->GetErrorCode() == Result::Success)
        {
            ApiHandle<RenderingSession> session = result->GetSession();
            // do something with the session
        }
    });
}

No caso dos scripts de exemplo do PowerShell, o tamanho de servidor desejado precisa ser especificado dentro do arquivo arrconfig.json:

{
  "accountSettings": {
    ...
  },
  "renderingSessionSettings": {
    "vmSize": "<standard or premium>",
    ...
  },

Como o renderizador avalia o número de primitivos

O número de primitivos considerados para o teste de limitação é o número de primitivos (triângulos e pontos) realmente passado para o renderizador. Essa geometria normalmente é a soma de todas as malhas instanciadas, mas também há exceções. A seguinte geometria não está incluída:

Assim, é possível gravar um aplicativo que tem como alvo o tamanho standard que carrega vários modelos com um número de primitivos próximo do limite de cada modelo único. Quando o aplicativo mostra apenas um único modelo por vez, o padrão quadriculado não é disparado.

Como determinar o número de primitivos

Há duas maneiras de determinar o número de primitivos de um modelo ou cena que contribuem para o limite de orçamento do tamanho da configuração standard:

  • No lado da conversão de modelo, recupere o arquivo JSON de saída de conversão e verifique a entrada numFaces na seção inputStatistics. Esse número denota a contagem de triângulos em malhas triangulares e o número de pontos em nuvens de ponto respectivamente.
  • Se o aplicativo processa conteúdo dinâmico, o número de primitivos renderizados pode ser consultado dinamicamente durante o runtime. Use uma consulta de avaliação de desempenho e verifique a soma dos valores nos dois membros PolygonsRendered e PointsRendered no struct PerformanceAssessment. O PolygonsRendered / PointsRendered campo é definido como bad quando o renderizador atinge a limitação primitiva. A tela de fundo quadriculada sempre fica com algum atraso para garantir que a ação do usuário seja executada após essa consulta assíncrona. A ação do usuário pode, por exemplo, ocultar ou excluir instâncias do modelo.

Preços

Para ver um detalhamento dos preços de cada tipo de configuração, veja a página de preços do Remote Rendering.

Próximas etapas