1 pontos por GN⁺ 2024-04-03 | 1 comentários | Compartilhar no WhatsApp
  • CityGaussian (CityGS) é um método da ECCV 2024 que estende o 3D Gaussian Splatting (3DGS) para cenas em escala urbana, buscando ao mesmo tempo eficiência de treinamento e qualidade de exploração em tempo real
  • A limitação de ser difícil lidar com cenas de grande escala de uma só vez é resolvida ao dividir o problema entre treinamento por divisão e conquista e uma estratégia de nível de detalhe (LoD)
  • Usando informações prévias globais da cena e seleção adaptativa de dados de treinamento, os resultados de treinamento por bloco são alinhados com mais eficiência e fundidos de forma suave
  • Os Gaussian primitives fundidos são comprimidos para criar múltiplos níveis de detalhe, e na renderização o nível adequado é selecionado e agregado por bloco
  • Sem LoD, representar MatrixCity com 25 milhões de Gaussianas fica limitado a 18 FPS em uma A100, mas o CityGS com LoD atinge renderização em tempo real com média de 36 FPS

Estrutura de treinamento e renderização para 3DGS em grande escala

  • O 3D Gaussian Splatting (3DGS) mostrou força em reconstrução de cenas 3D em tempo real e síntese de novas visualizações, mas o treinamento de cenas em grande escala e a renderização em tempo real em diferentes escalas ainda têm alto custo
  • O CityGaussian trata esse problema em duas etapas
    • Treinamento por divisão e conquista: divide cenas de grande escala em blocos para treiná-las com eficiência
    • Estratégia LoD: usa apenas o nível de detalhe necessário de acordo com a escala de observação para aumentar a velocidade de renderização
  • Informações prévias globais da cena e seleção adaptativa de dados de treinamento aumentam a eficiência do treinamento e ajudam a fundir os fragmentos separados da cena de forma mais natural
  • Os Gaussian primitives fundidos passam por um processo de compressão para formar vários níveis de detalhe
  • Na etapa de renderização, usa-se uma estratégia de seleção e agregação de nível de detalhe por bloco, permitindo geração rápida de imagem em múltiplas escalas

Desempenho e materiais públicos

  • Sem aplicar LoD, a cena MatrixCity é representada por 25 milhões de Gaussianas e mede 18 FPS em uma A100
    • Essa velocidade é considerada insuficiente para oferecer uma experiência de navegação confortável
  • O CityGS com LoD aplicado permite renderização em tempo real mesmo em escalas muito diferentes, com média de 36 FPS em uma A100
  • Em experimentos com cenas de grande escala, o CityGS mostra qualidade de renderização de nível state-of-the-art e oferece renderização em tempo real consistente em cenas grandes com várias escalas
  • Materiais públicos

1 comentários

 
GN⁺ 2024-04-03
Opiniões do Hacker News
  • Pelo nome do dataset do vídeo ser Matrix city, é bem provável que tenha sido extraído da demo Matrix do Unreal Engine 5, divulgada alguns anos atrás
    Os pontos de vista são muito parecidos, então há um realismo fotográfico, mas não parece ter vindo de fotos reais
    Pesquisando mais, era isso mesmo: https://city-super.github.io/matrixcity/

    • Como a Epic comprou há algum tempo a empresa de fotogrametria Quixel, é bem provável que tenha usado uma biblioteca de assets escaneados por foto ao criar Matrix city
      Curiosamente, nesse caso o post original estaria reconstruindo de novo algo que já era uma reconstrução de objetos reais
    • Alguns assets da demo The Matrix Awakens foram disponibilizados como packs separados no marketplace do Unreal Engine: [1] mapa, [2] prédios·multidões·veículos
      O mapa MatrixCity é diferente, mas é até certo ponto parecido com o mapa de Matrix Awakens. Isso também pode ser visto na análise de design desta página [3], escrita pelo tech lead do projeto Matrix Awakens
      Indo mais fundo, na seção MatrixPlugin da codebase no GitHub [4], está explicitado que foi usado o projeto city-sample
      [1] https://www.unrealengine.com/marketplace/en-US/product/city-...
      [2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
      [3] https://quentinmarmier.artstation.com/projects/xYeKNO
      [4] https://github.com/city-super/MatrixCity
    • Usar dados de um game engine permite obter a pose exata da câmera correspondente a cada imagem
      Por isso, o treinamento de NeRF ou Gaussian splatting fica um pouco mais fácil, já que não há erro de otimização da pose da câmera
      É pelo mesmo motivo que os primeiros artigos de NeRF usavam a famosa escavadeira Lego amarela renderizada no Blender
    • Se já existe uma cena do Unreal Engine totalmente modelada, fico curioso se não seria possível gerar os splats sem uma etapa de treinamento
      Para uma cena como Matrix city, não parece necessário gastar muito tempo treinando para reproduzir os dados
    • Nem todos os vídeos são Matrix City; alguns são de lugares reais
  • No fim de semana, combinei uma malha de tiles 3D do Google Maps com Gaussian splats; não é exatamente a mesma coisa, mas o efeito ficou bem parecido e útil
    Exemplo 1 com código linkado: https://twitter.com/kfarr/status/1773934700878561396
    Exemplo 2: https://twitter.com/3dstreetapp/status/1775203540442697782

    • Muito legal; fico curioso se há um GitHub com o código
      No primeiro link, aparece um erro no DevTools
      Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>;)...
    • Eu estava fazendo alguns testes com Aframe e contornos de edifícios do OSM, mas essa abordagem parece muito melhor
      Pretendo dar uma olhada no aframe-loader-3dtiles-component
    • Para quem não usa xitter, seria bom se também pudessem postar aqui o link do repositório de código
  • “A velocidade média é de 36 FPS (testado em uma A100)”; então parece significar que é em tempo real se você tiver uma GPU de US$ 8 mil

    • É o velho tempo real no estilo SIGGRAPH
      Quando um artigo de computação gráfica diz que atingiu velocidade em tempo real, sempre é preciso verificar de novo se é realmente tempo real ou se é “640x480 a 20 fps no hardware mais caro que o dinheiro pode comprar”
      Se baixar o padrão o suficiente, qualquer coisa pode ser tempo real
    • Como parece ser o primeiro 3DGS a usar LOD e blocos, talvez ainda haja espaço para otimização
      Pode acabar sendo útil em casos como produção virtual, mas não parece algo para mobile
    • Isso me lembra benchmarks antigos de GPU, que quando saíam rodavam a 10 fps e depois mudavam com o passar do tempo
      https://www.techpowerup.com/forums/attachments/all-cards-png...
    • Infelizmente, muitas pesquisas de 3DGS/NeRF são assim
      Se quiser algo que rode até em um notebook de 10 anos, ou mesmo sem GPU, veja https://github.com/pierotofy/OpenSplat. Fui eu que fiz
    • Acho que a próxima geração de GPU de consumo, a 5090, será duas vezes mais rápida que a A100 e não custará US$ 8 mil
      Então não parece um problema intransponível
  • Alguém consegue me convencer de que 3D Gaussian Splatting não é um beco sem saída?
    A renderização é lenta demais por um fator de um dígito, e os dados também são grandes demais por um fator de um dígito. Dá a sensação de ver de novo o embate entre rasterização e ray tracing.
    A rasterização sempre será mais rápida que o ray tracing, e, se o ray tracing ficar 10 vezes mais rápido, a rasterização também ficará 10 vezes mais rápida.
    Gerar geometria e materiais tradicionais a partir de uma nuvem de pontos gaussianos pode ser interessante. Mas a fotogrametria já existe há bastante tempo.
    Tentar renderizar uma cidade gigantesca em splats em tempo real não parece “a direção certa”.
    É legal, divertido e interessante, mas não tenho certeza se vai se tornar realmente útil. Não sou especialista, então estou perguntando a sério.

    • Há possibilidades enormes. É uma abordagem parecida com as tecnologias patenteadas usadas na Unreal Engine, mas diferente.
      A maior parte das pesquisas atuais não foca em desempenho, e ainda nem há consenso sobre um formato unificado, incluindo compressão.
      As possibilidades de otimização são muito claras, e também é fácil ajustar para vários dispositivos. É parecido com LOD em nuvens de pontos ou culling de malhas.
      O desempenho de splats pode virar uma vantagem competitiva temporária de um visualizador, mas, assim como a descompressão de vídeo ou outros padrões 3D se disseminaram como open source, é provável que, em poucos anos, visualizar splats em alta qualidade e alta taxa de quadros na maioria dos dispositivos se torne um requisito básico.
      A próxima pergunta é onde usar isso.
    • Não é lento por um fator de um dígito. Mesmo hoje, na Unreal ou na Unity, é fácil chegar a 200–400 fps.
      Mais de 100 fps no navegador: https://current-exhibition.com/laboratorio31/
      900 fps: https://m-niemeyer.github.io/radsplat/
      Os motores tradicionais têm 30 anos de pesquisa e desenvolvimento acumulados, então vai levar tempo para as ferramentas e otimizações alcançarem esse nível.
      Mas, olhando de onde vêm os artigos, há muitos da Apple e da Meta, e parece uma tecnologia para impulsionar a era do metaverso/computação espacial que as duas empresas estão promovendo.
      A capacidade de levar conteúdo de custo de produção muito baixo, como vídeos de iPhone, para ambientes 3D vai deslocar muita pesquisa e desenvolvimento dos métodos tradicionais.
    • A fotogrametria tem dificuldade com certos materiais, como superfícies refletivas.
      Também é muito difícil capturar detalhes finos, como estruturas delgadas ou cabelos. 3DGS é forte nessas áreas.
      Também há pesquisas em andamento para melhorar as fraquezas atuais, incluindo métodos de extração de malhas que possam ser usados em pipelines gráficos tradicionais.
    • Em termos de realismo na reconstrução do mundo real em 3D realista, atualmente há poucas coisas comparáveis.
      A fotogrametria só funciona bem quando os dados de superfície são limpos, mas Gaussian splats são fortes em dados semivolumétricos, como pelos, vegetação, partículas e superfícies rugosas.
      Também se adaptam bem a superfícies brilhantes/refletivas, volumes com fortes propriedades de superfícies subdivididas e materiais com grande dependência do ponto de vista.
    • O importante é: beco sem saída para quê?
      Para um uso equivalente a uma fotografia 3D completa, é bem legal e um caso de uso bastante justificado.
      Para motores de jogos 3D, acho difícil manipular dinamicamente os primitivos básicos da forma que um motor de jogo exige. As tentativas vão continuar, mas, desse ponto de vista, os gaussianos parecem mais um formato final de renderização do que uma representação intermediária útil.
      Para uso prático em engines, algo mais precisa ser inventado para preencher esse intervalo, e ainda há muitas perguntas em aberto.
      Não sei quanto a outros usos, mas o mundo não é feito só de jogos 3D e efeitos visuais.
  • Há tantas coisas com o nome de Gauss, e, vendo que continuam surgindo novas como Gaussian splatting, é curioso perceber de novo quanto Gauss influenciou muitas áreas.
    Ele não inventou isso diretamente, mas contribuiu muito para a matemática por trás.

  • Estou curioso para ver com qual licença isso será lançado.
    Quero ver um jogo open source usando isso.

    • Independentemente do desempenho, para usar de fato em jogos, primeiro é preciso encontrar uma forma generalizada de tornar a cena dinâmica.
      Há muitos casos na história que pareciam promissores como alternativa a malhas triangulares e depois desapareceram ao se perceber que não havia uma forma eficiente de animá-los.
    • Isso é basicamente uma nuvem de pontos muito grande feita de pontos com formatos estranhos, então é realmente difícil.
      Os objetos dentro da nuvem de pontos não têm metadados inerentes como “cadeira, mesa, pessoa”, então qualquer interação fica muito difícil.
      Não é impossível, mas hoje não é prático.
      Além disso, nem é tão otimizado para renderização em tempo real. Mesmo que muitos pontos tenham sido podados, usar uma malha de baixa resolução é muito mais eficiente.
  • Isso não parece muito melhor do que algo como Cities: Skylines.
    Não há zoom in nem zoom out, e sempre mostram apenas quadros muito limitados. Será que estou deixando passar alguma coisa?

    • As outras respostas parecem ter sido dadas sem realmente pensar ou pesquisar.
      O artigo cita repetidamente MatrixCity, e https://city-super.github.io/matrixcity/, que outra pessoa encontrou acima, também afirma ser dados totalmente sintéticos.
      Pelo que entendi, foi extraído da Unreal Engine.
    • Isso é reconstrução 3D, não renderização de jogos.
    • Acho que foi renderizado a partir de fotos.
    • Isso não é um motor de jogo, mas sim fotos reais convertidas para uma perspectiva 3D gaussiana.
  • Estou aprendendo com pygame e fico curioso sobre como colocar motion blur em um jogo
    Por exemplo, ao fazer Mario com pygame, eu gostaria que ele parecesse borrado quando pulasse
    Eu poderia criar uma versão borrada do Mario fazendo a média de 9 pixels, mas não sei se outros jogos costumam fazer isso assim
    Muitos jogos também são bem nítidos, sem motion blur, então fico curioso se isso é usado de fato
    No cinema, é um elemento bem importante, e também me vem à cabeça que, para obter motion blur cinematográfico, é preciso filmar a 25 fps

    • Basta renderizar o vetor de movimento do objeto em outra textura de renderização
      Ou seja, calcular a velocidade de cada objeto, renderizá-la como cor e depois usá-la na etapa de pós-processamento para definir a intensidade e a direção do efeito de blur
      Talvez seja necessário o movimento em relação à câmera. No caso do Mario, provavelmente não, mas em um FPS você vai querer que as bordas da tela fiquem borradas quando a câmera se move para a frente
  • Material relacionado: https://city-super.github.io/octree-gs/

  • É uma abordagem bastante avançada para renderizar cenas maiores com 3D Gaussians, então quero testar rapidamente assim que o código sair