Acaba de lançar Fei-Fei Li, sua mais recente conquista: celulares agora conseguem executar um mundo 3D com centenas de milhões de partículas [Link para experimentar a demonstração]

A capacidade de gerar um mundo 3D interativo a partir de uma série de fotos não é novidade. O verdadeiro desafio é fazer com que esse vasto mundo caiba no navegador de um celular comum.

Acaba de lançar e disponibilizar em código aberto uma nova conquista da World Labs, empresa de modelagem de IA liderada por Fei-Fei Li: o Spark 2.0.

Este mecanismo de renderização dinâmico de nuvem de pontos gaussiana 3D (3DGS), projetado especificamente para aplicações web, está gradualmente tornando realidade a execução fluida de cenas 3D ultragrandes com centenas de milhões de partículas em navegadores de qualquer dispositivo.

Por que é tão difícil encaixar um mundo 3D com centenas de milhões de partículas em um telefone celular?

Você já deve ter ouvido falar de "3D Gaussian Splatting", ou 3DGS, para abreviar. Resumidamente, é uma tecnologia que transforma cenas do mundo real em conteúdo 3D interativo sem a necessidade de modelagem; ele pode ser gerado simplesmente tirando uma série de fotos.

Ao contrário da modelagem 3D tradicional, que usa facetas triangulares, o 3DGS usa milhões de elipsoides translúcidos coloridos, cada um chamado de "splat".

▲O lado esquerdo utiliza malhas triangulares com mapeamento de textura, enquanto o lado direito utiliza pontos gaussianos para renderizar o mesmo objeto.

Cada mancha não é um simples ponto, mas um elipsoide com uma "personalidade" completa. Ela registra sua posição no espaço, o comprimento dos raios dos três eixos, o ângulo de orientação, o valor da cor RGB e a transparência.

A propriedade mais crucial é a transparência. Ela determina o peso da influência da mancha sobre o ambiente ao seu redor quando empilhadas. Se você plotar a densidade espacial de uma única mancha, obterá uma curva gaussiana: o centro é o mais denso, diminuindo gradualmente para fora, com as bordas se fundindo naturalmente ao fundo.

É esse método de sobreposição de "limites suaves" que permite que milhões de respingos sejam empilhados para apresentar a textura de paredes de tijolos, a translucidez das folhas e o reflexo do vidro, em vez da textura plástica de um conjunto de triângulos com bordas rígidas.

Os resultados são excelentes e a quantidade de informações é substancial. Uma cena de digitalização 3DGS de alta qualidade geralmente contém dezenas de milhões de manchas, ultrapassando facilmente 1 GB de tamanho de arquivo.

Isso apresenta um problema espinhoso: o limite superior para renderização suave em um celular comum é de cerca de 1 milhão a 5 milhões de pixels, o que é uma ordem de grandeza menor do que os 40 milhões de pixels de digitalizações de alta qualidade.

Os renderizadores existentes também não conseguem renderizar corretamente vários objetos digitalizados na mesma cena. Eles só conseguem renderizar um de cada vez, ou os objetos ficam fora de ordem e "presos" nas superfícies uns dos outros, resultando em uma aparência confusa.

Assim nasceu o Spark. De acordo com o blog oficial, o Spark era inicialmente uma ferramenta interna usada pela World Labs. A World Labs precisava exibir mundos gerados por 3DGS em uma página da web, mas os renderizadores existentes tinham limitações inerentes: alguns só conseguiam renderizar objetos individuais, alguns dependiam da WebGPU (que muitos dispositivos ainda não suportavam) e alguns não suportavam animações dinâmicas.

Após compararem diversas opções, decidiram construir uma eles mesmos.

A plataforma tecnológica escolhida foi o THREE.js, o framework 3D mais popular da web, que roda em WebGL2 e é compatível com praticamente todos os dispositivos modernos. A lógica principal de renderização funciona em três etapas: primeiro, uma lista global de objetos renderizados (splat list) é gerada na GPU; em seguida, os objetos renderizados são ordenados uniformemente do mais distante para o mais próximo; e, finalmente, todos os objetos renderizados são renderizados simultaneamente.

A "ordenação global" pode parecer algo trivial, mas na verdade é a chave para permitir que vários objetos 3DGS coexistam na mesma cena sem se sobreporem. O Spark também fornece um pipeline de processamento de GPU, permitindo que os usuários realizem operações personalizadas em cada objeto, como recolorir, ajustar a opacidade e criar animações dinâmicas, usando GLSL ou implementando-o com um grafo de nós como o Blender.

A versão 1.0 resolveu o problema da renderização de múltiplos objetos, mas cenários com 40 milhões de splats continuaram sendo um obstáculo intransponível. Isso levou ao desenvolvimento do Spark 2.0.

Faça com que o dispositivo sempre exiba apenas a quantidade de informações "necessárias".

O Spark 2.0 é construído sobre uma combinação de três tecnologias: Nível de Detalhe (LoD), streaming progressivo e gerenciamento de memória virtual. Embora cada uma dessas tecnologias tenha precedentes, a força combinada delas permite a renderização fluida de bilhões de instâncias de splatter em navegadores móveis.

1. Árvore de Nível de Detalhe Contínua: Utilizando os recursos de forma inteligente.

O Nível de Detalhe (LoD, na sigla em inglês) já é um conceito bem estabelecido na indústria de jogos. Ele utiliza milhares de triângulos para árvores próximas e apenas algumas dezenas para árvores distantes, alocando recursos conforme necessário para economizar poder computacional. O sistema Nanite da Unreal Engine segue a mesma abordagem, vinculando o nível de detalhe dos triângulos à distância de visualização e realizando o dimensionamento automaticamente.

O Spark 2.0 transferiu a mesma lógica para o Splat, tornando-o ainda mais completo.

A alternância entre várias versões discretas pode facilmente causar "saltos" visuais. A abordagem do Spark consiste em construir uma "árvore de LoD contínua" completa. Cada nó interno é uma versão aproximada de seus splats filhos, que converge para cima camada por camada e finalmente atinge o nó raiz, que é o splat individual mais grosseiro em toda a cena.

Durante a renderização, o sistema desenha dinamicamente uma linha na árvore com base no ponto de vista atual, capturando os detalhes de nível inferior na área mais próxima do ponto de vista e os detalhes de nível superior e granularidade mais ampla à distância.

Todo o processo é limitado por um orçamento fixo de splats: aproximadamente 500.000 para dispositivos móveis e 2,5 milhões para desktops. O número total de splats na cena não importa; contanto que o número real de GPUs utilizadas permaneça estável dentro do orçamento, a taxa de quadros naturalmente permanecerá estável.

Além disso, o Spark introduz a "renderização foveada", que aloca mais recursos de renderização para a direção do seu olhar, reduzindo automaticamente os detalhes das bordas e áreas atrás de você. Esse efeito é especialmente perceptível em dispositivos de realidade virtual, onde o rastreamento ocular geralmente é necessário para obtê-lo. O Spark simula isso com uma região fixa em forma de cone, e funciona tão bem quanto.

2. Novo formato .RAD: "Streaming", como assistir a vídeos curtos.

O problema da eficiência de renderização foi resolvido, mas o problema da eficiência de transmissão continua sendo um desafio igualmente grande. Existem dois formatos de arquivo 3DGS: .PLY e .SPZ. O primeiro não é compactado e um arquivo de 10 MB pode chegar a impressionantes 2,3 GB. Embora permita o download e a exibição simultâneos, o tamanho do arquivo é simplesmente insuportável.

Este último utiliza armazenamento colunar e compressão Gzip, comprimindo a mesma quantidade de dados para 200-250 MB. A desvantagem é que o arquivo inteiro precisa ser baixado antes de ser exibido, pois os atributos de cada imagem estão espalhados por todo o arquivo, e o conteúdo completo não pode ser reunido se alguma parte estiver faltando.

Para obter o melhor dos dois mundos, o Spark 2.0 introduziu um novo formato, o .RAD (campos RADiance). Ele divide os dados de splat em blocos independentes de 64 KB cada, os comprime separadamente e registra o deslocamento de bytes de cada bloco no cabeçalho do arquivo, permitindo acesso aleatório a qualquer bloco.

O primeiro bloco é sempre o conjunto de imagens mais grosseiras de 64K de toda a cena; uma vez baixado, o contorno da cena fica imediatamente visível. Em seguida, o sistema determina quais áreas requerem maior refinamento com base no ponto de vista, priorizando a busca dos blocos de dados correspondentes e revelando gradualmente os detalhes de uma imagem borrada. Três threads Web Worker paralelas buscam e decodificam os dados de forma síncrona em segundo plano, garantindo que os detalhes acompanhem você aonde quer que vá.

3. Memória virtual da GPU: Armazenamento de espaço ilimitado dentro da memória de vídeo limitada.

O streaming resolve o problema da largura de banda, mas o limite rígido da memória da GPU continua sendo um obstáculo difícil de superar. Os navegadores móveis têm restrições rigorosas de memória de vídeo, tornando impossível exibir uma cena com 40 milhões de respingos.

O Spark 2.0 utiliza o mecanismo de memória virtual do sistema operacional para resolver esse problema.

O sistema aloca um pool de memória fixo na GPU, com um máximo de 16 milhões de splats, e usa uma tabela de páginas para registrar quais blocos de dados .RAD estão atualmente residindo na GPU. Quando uma região específica precisa ser renderizada…

Quando a memória está cheia, o bloco correspondente é carregado na memória. Quando a memória está cheia, os blocos antigos são removidos na ordem dos blocos menos utilizados.

Graças a esse mecanismo, cenas 3DGS de diferentes fontes podem compartilhar o mesmo conjunto de memória. Teoricamente, desde que a velocidade da rede seja suficiente, inúmeras cenas digitalizadas independentes podem ser unidas perfeitamente para formar um mundo infinitamente grande.

Um único link leva a todo o mundo.

Após o lançamento do Spark 2.0, Fei-Fei Li declarou publicamente: "O Spark 2.0 agora consegue reproduzir com fluidez mais de 100 milhões de objetos 3D em qualquer dispositivo. É uma grande honra contribuir para o ecossistema de código aberto de renderização 3D de gráficos baseados na web."

Ela não enfatizou "o que realizou", mas sim "sua contribuição para a comunidade de código aberto". Essa declaração é intrigante. A renderização 3D é uma área em rápida evolução; uma única empresa não consegue impulsionar todo o ecossistema. O código aberto é a abordagem correta para acelerar esse processo.

A julgar pelos estudos de caso existentes, os desenvolvedores estão de fato usando o Spark para explorar diversas possibilidades. James C. Kane, vencedor do prêmio Webby, desenvolveu de forma independente um jogo de tiro espacial multiplayer chamado Starspeed.

Toda a cena do jogo é construída com mais de 100 milhões de manchas e inclui 10 trilhas sonoras originais sintetizadas no estilo wave, todas transmitidas em formato .RAD pelo navegador. O impressionante ambiente de ficção científica pode ser jogado diretamente em uma página da web.

▲Link para vivenciar a experiência  https://starspeed.game/

Na direção de arte, temos *Memórias Adormecidas*, de Hugues Bruyère. Ele é cofundador do estúdio de experiências interativas Dpt. Esta série justapõe digitalizações 3D de locais reais com espaços imaginários para criar ambientes exploráveis ​​e interativos. A fronteira entre realidade e ficção se torna tênue na granulação irregular, o que, surpreendentemente, se encaixa perfeitamente.

▲ Em anexo está o endereço da experiência.  https://smallfly.com/dormant_memories/

Ryu Fujiwara, do Departamento de Tecnologia da Informação Espacial da Hololive, usou o Spark para renderizar várias cenas de captura do mundo real em grande escala, com um máximo de 40 milhões de manchas por cena, que rodaram sem problemas em smartphones, Quest e Vision Pro.

▲Link para vivenciar a experiência  https://works.lilea.net/spark/

Essas diversas tentativas dos desenvolvedores demonstram plenamente os poderosos recursos do Spark 2.0 em diferentes dispositivos e cenários de aplicação. Mas isso é apenas metade da história.

Para uma empresa dedicada a construir um "modelo mundial de IA", as ambições da equipe de Fei-Fei Li vão muito além de simplesmente fornecer uma ferramenta de renderização de código aberto. Se o Spark 2.0 resolveu o desafio final de "como assistir sem interrupções", então seu verdadeiro trunfo é como criar esse conteúdo 3D com baixas barreiras de entrada.

O Spark e a plataforma de criação Marble da World Labs estão profundamente integrados. Você pode gerar um mundo 3D no Marble usando uma linha de texto ou uma imagem, combinar vários mundos em uma cena maior usando o Marble Studio e, em seguida, renderizá-la em uma experiência web compartilhável usando o Spark. Esse processo já está funcionando.

Os avanços tecnológicos muitas vezes priorizam a "melhoria ilimitada", mas, às vezes, "bom o suficiente" pode ser a abordagem mais adequada. O Spark 2.0 ilustra exatamente isso.

A ideia de um dispositivo renderizar apenas a quantidade "suficiente" de splats por vez não é nova, mas implementá-la na renderização da web, mantendo a compatibilidade com navegadores móveis e o Quest, apresenta verdadeiros desafios de engenharia a cada passo.

Quando a IA puder gerar mundos 3D infinitamente grandes, qual meio usaremos para levá-los a todas as pessoas comuns? A resposta mais recente da World Labs é um link da web.

Aqui está o endereço do blog:

https://www.worldlabs.ai/blog/spark-2.0

#Siga a conta oficial do iFanr no WeChat: iFanr (ID do WeChat: ifanr), onde você encontrará conteúdo ainda mais interessante o mais breve possível.