Apresentamos o SLIM: Scalable Lightweight Interactive Models (Modelos Interativos Leves e Escaláveis)
Como aproveitar o potencial de composições de renderização leves para criar mundos maiores e mais detalhados para todos os dispositivos
A Roblox é o lar de milhões de experiências, incluindo desde minijogos simples a vastos mundos abertos repletos de ativos 3D de alta fidelidade. Nosso objetivo é dar suporte às experiências cada vez mais detalhadas e complexas concebidas pelos criadores em um vasto grupo de dispositivos de usuário, o que requer inovação em nosso motor, sistemas de entrega de conteúdo e infraestrutura. O Scalable Lightweight Interactive Models, ou SLIM, é uma das partes de uma iniciativa de desenvolvimento em múltiplas partes que possibilita que os criadores concretizem suas grandes visões artísticas sem comprometer o desempenho.
O SLIM permite que os criadores criem automaticamente representações leves de qualquer objeto em uma experiência da Roblox, minimizando o número de draw calls, triângulos e instâncias de modelo de dados exigidas pelo cliente para renderizar um mundo robusto e contínuo. O SLIM oferece ao nosso modelo de streaming novas e poderosas formas de otimizar o conteúdo, permitindo que um usuário com um PC gamer avançado e um usuário com um dispositivo móvel de entrada compartilhem a mesma experiência com a mais alta fidelidade compatível com seu dispositivo.
| Sem streaming de instância e SLIM | Com streaming de instância e SLIM | |
| Instâncias de modelo de dados do cliente | 159.745 | 92.536 |
| Triângulos | 20 milhões | 3,35 milhões |
| Draw calls | 2.402 | 1.454 |
Dois pilares do streaming: instâncias e ativos
Quando você assiste a um filme no seu serviço de streaming favorito, seu dispositivo não baixa o arquivo inteiro antes de você começar a assistir. Ele baixa dados suficientes para que você comece a assistir imediatamente e, em seguida, baixa continuamente (ou armazena em buffer) os próximos segundos para que não haja interrupção na experiência. Se você estiver fazendo streaming em um dispositivo de entrada ou com conexão lenta, a plataforma se adapta automaticamente, enviando uma versão de baixa fidelidade do conteúdo enquanto baixa dados suficientes para transmitir o conteúdo de alta fidelidade.
A Roblox usa um conceito semelhante para transmitir conteúdo em tempo real, mas os dados necessários para representar uma simulação 3D de alta fidelidade apresentam seus próprios desafios. Enquanto um vídeo tem uma linha do tempo de conteúdo linear visualizado a partir de uma única perspectiva, as experiências da Roblox contêm mundos 3D vastos e interativos repletos de diferentes tipos de ativos que podem ser visualizados a partir de muitas perspectivas controladas pelo usuário. Junte a isso 151,5 milhões de usuários ativos diários jogando, explorando e, por fim, transmitindo conteúdo dos mais diversos tipos de dispositivos, e você encontrará um enorme potencial para otimizar a forma como o conteúdo é entregue e exibido.1
Tudo o que um usuário vê na Roblox (um carro, uma árvore, um avatar ou uma construção) é representado como uma série de instâncias dentro do motor. Um carro utilizável, por exemplo, é dividido em instâncias para os para-choques, portas, rodas e assim por diante. Cada instância é construída na experiência usando vários ativos, como malhas 3D, texturas, animações e áudio.
Quase todo o streaming na Roblox é separado em duas tecnologias principais: streaming de instâncias e streaming de ativos.
-
O streaming de instâncias determina quais instâncias o dispositivo de um usuário precisa transmitir. Não há necessidade de transmitir partes da experiência que o usuário ainda não pode ver ou interagir. No exemplo acima, apenas as instâncias que representam construções próximas são transmitidas para o cliente.
-
O streaming de ativos determina a qualidade das instâncias transmitidas. Não há necessidade de baixar uma textura 4K de alta resolução de uma montanha tão distante que o usuário não consiga discernir pequenos detalhes. Na imagem acima, construções distantes e construções que ocupam pouco espaço na tela usam malhas decimadas e texturas de baixa resolução.
O principal responsável por esta operação é um sistema que chamamos de Harmony, que monitora os recursos disponíveis de cada usuário em cada quadro. O Harmony ajusta o streaming de instâncias e de ativos para fornecer a melhor experiência com base na memória do dispositivo, na carga de GPU e CPU e na largura de banda da rede. Em um PC gamer avançado, o Harmony eleva tudo à mais alta qualidade. Em um dispositivo móvel com uma conexão fraca, ele reduz automaticamente a escala para manter a experiência do usuário fluida.
A equipe falou sobre a tecnologia por trás do streaming, da transcodificação na nuvem e do SLIM no episódio 30 do podcast Tech Talks.
SLIM: Scalable Lightweight Interactive Models (Modelos Interativos Leves e Escaláveis)
A ideia central do SLIM é simples, mas poderosa: o SLIM pode criar automaticamente várias representações leves e otimizadas de qualquer objeto ou modelo no mundo de um criador e armazená-las no servidor para serem obtidas durante o tempo de execução. O cliente de cada usuário pode alternar dinamicamente entre a renderização das instâncias e ativos originais ou uma das representações SLIM leves, com base nos recursos disponíveis do dispositivo.
O SLIM usa duas técnicas principais para gerar uma representação leve:
1. Composição
Primeiro, o SLIM combina várias partes em menos partes. Em vez de o carro abaixo exigir 112 malhas separadas e 24 texturas separadas, sua representação leve pode exigir apenas uma malha e quatro texturas. O processo de composição é ajustado com precisão para corresponder à forma como o motor finalmente renderizará o conteúdo, eliminando a geometria invisível dentro de um objeto e reduzindo o número de draw calls necessárias para renderizá-lo.
2. Nível de detalhe (NDD)
Após a composição do modelo, o SLIM gera várias versões em diferentes níveis de detalhe. Isso significa criar versões da malha 3D com uma quantidade significativamente menor de triângulos e gerar texturas em resoluções muito mais baixas, como fazemos com qualquer malha individual ou ativo de textura usando técnicas tradicionais de NDD. Essas técnicas podem ser ainda mais otimizadas quando aplicadas a modelos SLIM, uma vez que temos os quadros de coordenadas individuais de cada instância subjacente. Isso nos proporciona um contexto completo de como o criador pretendia que cada um desses ativos fosse renderizado em conjunto. Com esse conhecimento, o SLIM nos permite tomar decisões mais embasadas sobre onde remover detalhes desnecessários e onde manter os detalhes que serão percebidos pelos usuários.
A representação certa no momento certo
Depois de criarmos várias representações de um objeto, o SLIM deve decidir qual usar para o dispositivo de um usuário específico ou se deve usar técnicas tradicionais de renderização. O sistema divide o mundo em três regiões distintas. Uma forma simples de entender essas regiões é pensar em círculos de detalhes com um centro em comum que se estendem para fora do jogador.
Os limites de streaming não são, de fato, circulares. Seu formato depende de diversos fatores.
Região HH (instâncias pesadas, renderização pesada)
Na região HH, instâncias completas e pesadas são transmitidas do servidor para o modelo de dados do cliente, e o cliente determina a representação de ativo específica para baixar e renderizar em cada instância. O dimensionamento ainda pode ser alcançado com NDDs de malha e mips de textura nesta região, mas não há composição. Antes do SLIM, era assim que todas as instâncias transmitidas para uma experiência eram renderizadas.
Região HL (instâncias pesadas, renderização leve)
A região HL fica entre as regiões HH e LL. Nesta região, o cliente tem as instâncias pesadas no modelo de dados, mas pode optar por renderizar usando o pipeline de renderização completo ou o pipeline SLIM. Esta região se adapta para garantir uma transição direta entre as regiões HH e LL, mesmo que o usuário esteja com latência na rede. O ponto de transição entre as regiões HH e HL é dinâmico, o que permite que o Harmony aumente ou diminua imediatamente para lidar com um pico de recursos em qualquer direção.
Região LL (instâncias leves, renderização leve)
Na região LL, o cliente transmite apenas representações superleves de instâncias necessárias para definir um quadro de coordenadas para um modelo SLIM, juntamente com os metadados mínimos. Apenas modelos SLIM compostos leves são renderizados nesta região, em vez de cada instância e ativo. A região LL requer muito menos triângulos e draw calls e reduz o uso de memória no dispositivo do usuário em comparação com o streaming em todas as instâncias pesadas e uso de pipeline de renderização tradicional.
Essa técnica de região permite que o cliente renderize todo o mundo visível em todos os momentos sem incorrer no custo computacional total de usar todas as instâncias e ativos pesados de uma só vez. Objetos distantes são representações altamente otimizadas e leves, que são substituídas por seus equivalentes de alta fidelidade à medida que o usuário se aproxima. A capacidade do SLIM de criar composições e modelos de NDD de múltiplas escalas oferece ao Harmony mais mecanismos para otimizar a qualidade dos ativos para o dispositivo de cada usuário.
Ao juntar isso tudo, o jogador deve se sentir completamente imerso e não perceber nenhum dos pontos de transição ou níveis variados de detalhes.
O futuro: quais são os próximos passos para o SLIM?
O SLIM é apenas o primeiro passo de uma jornada de várias etapas, e estamos animados para ver como os criadores integram a tecnologia em seus fluxos de trabalho. Estamos analisando expandir o SLIM em duas direções principais futuramente.
Determinar o que mais pode ser otimizado pelo SLIM
Estamos começando com os modelos estáticos especificados pelos criadores no Studio, mas, futuramente, o SLIM poderá otimizar alguns dos modelos mais complexos da Roblox: os avatares da plataforma. Os avatares, com todas as suas animações vinculadas, roupas em camadas e acessórios, podem ser uma variável imprevisível para os criadores. Permitir que os avatares sejam otimizados pelo SLIM significa que o motor pode efetivamente limitar os recursos que um modelo de avatar específico usa.
Eventualmente, queremos disponibilizar aos criadores a opção de aproveitar o SLIM para alterações em modelos dinâmicos. Imagine um modelo em que o servidor pode fazer alterações ativamente (por exemplo, uma porta se abre ou uma peça é destruída), mas com algumas estratégias inteligentes, o cliente pode reutilizar a mesma representação leve.
Otimizar o pipeline do SLIM
Agora que temos um pipeline de ponta a ponta que fornece ao motor uma nova dimensão de flexibilidade, também estamos focados em tornar o pipeline mais inteligente, rápido e eficiente. Isso inclui:
-
Reorganização de atlas de textura: organização inteligente de várias texturas de modelo em uma única folha de texturas otimizada.
-
Segmentação automática: usar automaticamente a compreensão semântica e espacial do mundo para identificar os melhores modelos SLIM.
-
Representações mais leves: para objetos dinâmicos que não sofrem tanto com latência, estamos explorando a geração de representações 2D que são virtualmente livres de recursos para renderizar no cliente.
-
SLIM em uma hierarquia: agrupar os modelos SLIM um após o outro para que grupos inteiros de instâncias possam ser simplificados e o motor possa selecionar dinamicamente entre níveis de especificidade, por exemplo, de uma única árvore para uma floresta e para uma área de terra inteira repleta de florestas e outros objetos.
-
Aumento de resolução: no momento, nosso foco está em otimizar o desempenho, mas muito em breve, esse mesmo sistema nos permitirá aumentar a resolução dos ativos em futuros sistemas, mantendo a intenção artística original do criador. Essa nova arquitetura indica que, à medida que nosso motor se torna melhor em simular a realidade, podemos atualizar continuamente as representações que ele usa.
O SLIM, em conjunto com o Harmony e o restante da nossa arquitetura de streaming e distribuição de conteúdo, é um grande avanço em nosso objetivo de oferecer suporte a mundos mais expansivos e detalhados para mais jogadores. A coesão entre o nosso motor, distribuição de conteúdo e infraestrutura de nuvem em conjunto com a enorme base de conteúdo de milhões de criadores nos permite construir sistemas profundamente interconectados que aprimoram a experiência como um todo. À medida que nosso motor se torna melhor em simular a realidade, podemos atualizar continuamente as representações que ele usa. No momento, nosso foco está em otimizar o desempenho, mas muito em breve, esse mesmo sistema nos permitirá aumentar a resolução dos ativos em futuros sistemas, mantendo a intenção artística original dos criadores.
Estamos construindo uma plataforma que não apenas respeita essa intenção artística, mas também pode distribuir de forma inteligente e automática suas criações a qualquer usuário nos mais diversos dispositivos, em qualquer lugar em que a Roblox esteja disponível. Mal podemos esperar para ver o que a comunidade criará com esse recurso.
1A partir do terceiro trimestre de 2025.