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:
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:
- número e resolução de texturas,
- quantidade de geometria exclusiva versus instanciação de submalha dentro da malha (consulte também instanciação de objetos),
- fluxos de vértices sendo usados,
- o modo de composição de renderização usado com o
Premium
tamanho.
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:
- Instâncias de modelo carregadas que estão completamente fora do volume de exibição.
- Modelos ou peças de modelo que são alternadas para invisível, usando o componente de substituição de estado hierárquico.
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
ePointsRendered
no structPerformanceAssessment
. OPolygonsRendered
/PointsRendered
campo é definido comobad
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.