A partir da versão Alfa04 das bibliotecas Jetpack XR, há atualizações importantes sobre como fornecer recursos de ambiente espacial para desempenho e qualidade visual ideais. Essas mudanças afetam a compatibilidade e exigem a atualização de apps 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 do solo, objetos próximos) e a textura visual primária da skybox que os usuários veem.
- Um arquivo ZIP separado contendo informações de iluminação baseada em imagem (IBL, na sigla em inglês) geradas a partir 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 atualizada de recursos oferece as seguintes vantagens:
- Tamanhos de arquivo menores:em comparação com métodos anteriores, como o uso de 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 de arquivo.
- Melhoria no desempenho:separar a textura da skybox visual (integrada ao glb) dos dados IBL (no arquivo ZIP) permite otimizar cada componente de forma independente. Isso resulta em menor largura de banda de leitura de 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 o glb
O glb representa a geometria ao redor do usuário, e você inclui a textura visual do skybox. Para a geometria, tente manter o tamanho dos arquivos menor ou igual a 80 MB.
Para fazer isso, há várias oportunidades de tornar seu ambiente mais eficiente e manter a alta qualidade. Por exemplo, a densidade da malha deve ser mais densa perto do usuário, e você pode diminuir a densidade das malhas que estão 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 da skybox precisa obedecer a essa restrição. Isso proporciona uma experiência ideal porque a paralaxe se torna imperceptível nessa distância.
Altura do usuário:a geografia pode variar, mas posicione o usuário em um monte com cerca de 1,5 metro de altura para evitar o corte de elementos de interface maiores nos apps.
Polycount:preste atenção no polycount nos arquivos glb, porque um polycount alto pode levar a um consumo de energia desnecessário. Cada trecho de geometria não pode exceder 10.000 vértices.
Compactação KTX:otimize o desempenho da GPU do arquivo glb garantindo que ele use mipmaps e texturas KTX2.
O que você precisa para otimizar sua IBL
Faça o download do utilitário de linha de comando cmgen:
- Você pode encontrar a versão mais recente no repositório do Filament.
- Encontre e extraia o .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 a IBL:
- Um EXR de baixa resolução que corresponde à textura do céu
- A entrada de textura da skybox precisa ser um arquivo EXR. Embora o cmgen ofereça suporte a outros formatos, os EXRs são recomendados porque fornecem as informações de alto alcance dinâmico que são essenciais para fornecer uma IBL de alta qualidade. O uso de outros formatos, como PNG, resulta em 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 1.024 x 512 pixels. Observação: pode parecer que 1.024 x 512 é uma resolução muito baixa, mas isso é benéfico para a performance. Para IBL, os resultados visuais para o usuário são muito semelhantes aos recursos de IBL de resolução 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.
- Ela serve como uma textura otimizada para acompanhar o IBL. Os usuários não vão olhar para isso, então focamos o recurso na otimização da performance.
O exemplo a seguir mostra 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 ..