Otimizar recursos de ambiente

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Headsets de realidade estendida
Óculos XR com fio

A partir da versão alpha04 das bibliotecas Jetpack XR, há atualizações importantes sobre como fornecer recursos de ambiente espacial para qualidade visual e desempenho ideais. Essas mudanças têm um impacto na compatibilidade e exigem a atualização dos apps atuais que definem ambientes espaciais.

Para fornecer ambientes espaciais, você precisa de dois componentes principais:

  • Um arquivo .glb ou .gltf para a geometria do ambiente (por exemplo, o plano de fundo, objetos próximos) e a textura principal da skybox visual que os usuários veem.
  • Um arquivo ZIP separado com informações de iluminação baseada em imagem (IBL, na sigla em inglês) geradas de uma imagem EXR de alto alcance dinâmico usando a ferramenta cmgen. O arquivo ZIP é usado para cálculos de iluminação, como reflexos em objetos, e não para a textura visual da skybox.

Por que essa abordagem?

Essa estrutura de recursos atualizada oferece as seguintes vantagens:

  • Tamanhos de arquivo menores:em comparação com métodos anteriores, como usar um único arquivo de skybox HDR de alta resolução para exibição visual e informações de iluminação, essa abordagem reduz os tamanhos dos arquivos.
  • Performance aprimorada:separar a textura visual do skybox (integrada ao glb) dos dados de IBL (no arquivo ZIP) permite otimizar cada componente de forma independente. Isso resulta em menor largura de banda de leitura da memória de textura e menor consumo de energia.
  • Iluminação otimizada:usar um recurso de skybox de resolução mais baixa especificamente para o mapa de iluminação é benéfico para o desempenho sem afetar significativamente os resultados visuais da iluminação nos objetos.

Para saber mais sobre como adicionar um ambiente espacial ao seu app, consulte nosso guia sobre como adicionar ambientes ao app.

Otimizar seu glb

Seu glb representa a geometria ao redor do usuário, e você inclui a textura visual da skybox. Para sua geometria, tente manter tamanhos de arquivo de 80 MB ou menos.

Para isso, há várias oportunidades de tornar seu ambiente mais eficiente sem perder a qualidade. Por exemplo, a densidade da malha deve ser maior perto do usuário, e você pode diminuir a densidade para malhas mais distantes.

  • Distância de visualização:a distância de visualização para ambientes no Android XR é de 200 m do ponto do usuário, e a textura do skybox precisa obedecer a essa restrição. Isso oferece uma experiência ideal porque o efeito paralaxe se torna imperceptível a essa distância.
  • Altura do usuário:a geografia pode variar, mas posicione o usuário em um monte a cerca de 1,5 metro de altura para evitar cortes com elementos maiores da interface em apps.

  • Contagem de polígonos:seja sensível à contagem de polígonos nos arquivos glb, já que uma contagem alta pode levar a um consumo de energia desnecessário. Cada patch de geometria não pode exceder 10.000 vértices.

  • Compactação KTX:otimize o desempenho da GPU do seu arquivo glb garantindo que ele use mipmaps e texturas ktx2.

O que você precisa para otimizar seu IBL

Faça o download do utilitário de linha de comando cmgen:

  • A versão mais recente está disponível no repositório do Filament (link em inglês).
  • Encontre e extraia o arquivo .tgz que contém a versão pré-criada do cmgen para sua plataforma.
  • A ferramenta pré-criada está no diretório /bin do arquivo .tgz extraído.

Recursos a serem preparados para gerar o arquivo .zip para IBL:

  • Um EXR de baixa resolução que corresponda à textura do skybox
    • A entrada de textura da skybox precisa ser um arquivo EXR. Embora o cmgen seja compatível com outros formatos, os EXRs são recomendados porque fornecem as informações de alto intervalo dinâmico essenciais para oferecer IBL de alta qualidade. Usar outros formatos, como PNG, resulta em uma iluminação menos precisa.
    • A imagem de origem (EXR) precisa ter uma proporção de 2:1 e dimensões que sejam uma potência de 2. Use um EXR de 1024 x 512 pixels. Observação: pode parecer que 1024 x 512 é uma resolução muito baixa, mas isso é benéfico para o desempenho. Para IBL, os resultados visuais para o usuário são muito semelhantes aos recursos de resolução de IBL muito mais alta.
  • Um png preto sólido
    • Esse recurso também precisa ter uma proporção de 2:1. Use um tamanho de 100 x 50 pixels.
    • Isso serve como uma textura otimizada para acompanhar a IBL. Os usuários não vão ver isso, então focamos o recurso na otimização da performance.

Confira abaixo um exemplo de como usar o cmgen para criar o arquivo .zip para IBL. Neste exemplo, usamos arquivos de entrada chamados my_360_skybox_1024_x_512.exr e black_skybox.png, e criamos um arquivo .zip chamado my_ibl.zip.

# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png

# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr

# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512

# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old

# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox

# Change into the child directory.
cd ./skybox_ibl

# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*

# Return to the directory you started in.
cd ..