O cache de PSO cria e armazena com antecedência os dados de estado do objeto do pipeline mais usados no aplicativo, a fim de melhorar o desempenho de renderização e principalmente reduzir problemas durante a execução do aplicativo. Este guia apresenta um passo a passo da implementação do cache de PSO em um projeto Android na Unreal Engine (UE).
Esta página fornece instruções para o método de armazenamento em cache de PSO agrupado, que é o sistema legado de cache manual de PSO usado nas versões 5.2 da UE e anteriores. Recomendamos usar o sistema de pré-armazenamento em cache de PSO da versão 5.3 ou mais recente se for viável para o projeto. Consulte a documentação do pré-armazenamento em cache de PSO para obter mais detalhes.
Configuração necessária
Para seguir este guia, você precisará do seguinte:
Um projeto da Unreal Engine configurado para Android como plataforma de destino.
A versão do Android SDK e NDK compatível com sua versão atual da Unreal Engine.
Um dispositivo de teste Android compatível com o modo de desenvolvedor e depuração USB habilitados.
Para saber mais sobre quais dispositivos Android são compatíveis com sua versão da Unreal Engine, consulte Requisitos de desenvolvimento para Android
Defina as configurações e projeto para o armazenamento em cache de PSO
Para definir as configurações de projeto para oferecer compatibilidade com o cache de PSO, siga estas etapas:
Abra seu projeto no Unreal Editor.
Abra Editar > Configurações de projeto.
Vá até Projeto > Pacote e verifique se Compartilhar código de shader de material e Bibliotecas nativas de materiais compartilhados estão habilitados.
Na próxima etapa, você precisará editar os arquivos de configuração manualmente. Feche o Unreal Editor para evitar conflitos entre as edições do manual e as configurações de projeto.
Abra a pasta
Config/Androiddo projeto e abra o arquivoAndroidEngine.ini. Adicione as seguintes configurações:C++[DevOptions.Shaders] NeedsShaderStableKeys=true
Execute o jogo e colete PSOs
Agora que as configurações do projeto são compatíveis com o cache de PSO, execute uma versão do seu projeto com a linha de comando -logPSO habilitada.
Certifique-se de que o dispositivo de teste está conectado ao seu computador.
Abra seu projeto no Unreal Editor.
Clique em Plataformas > Inicializador de Projetos.
No Inicializador de Projetos, clique em + Adicionar > Criar perfil personalizado para criar um perfil de inicialização.
Renomeie o perfil como PSO Caching - ETC2.
No menu suspenso ao lado de Como você gostaria de preparar seu conteúdo?, clique em Preparação como manda o protocolo.
Escolha Android_ETC2 como plataforma de destino.
Em Implantação, escolha seu dispositivo móvel como dispositivo de destino e configure a Variante para Android_ETC2.
Na categoria Inicializar, adicione o comando
-logPSOaos parâmetros de linha de comando adicionais.Você pode usar o Android File Server (AFS) para adicionar o comando
-logPSOao arquivoUECommandLine.txtem uma versão existente no dispositivo. Para obter mais detalhes, consulte a documentação do AFS.Inicialize seu perfil. A UE compila e empacota o projeto para implantar no seu dispositivo.
Jogue o jogo. O log de saída exibe uma mensagem quando o jogo registrar um novo PSO.
Quando fizer sessões futuras de coleta de PSO, você poderá reutilizar o perfil criado nesta seção.
Dicas para coletar PSOs
Quanto mais PSOs você coletar, maior será o tempo de inicialização do jogo ao empacotar o aplicativo final, pois todos os seus PSOs precisarão ser carregados antes que os usuários possam começar a jogar. Portanto, recomendamos reunir PSOs especificamente em posições que você sabe que são comumente usadas e têm interrupções perceptíveis, pois os caches de PSO para essas elas oferecem os maiores benefícios para a experiência do usuário.
Sempre que um posição mudar significativamente, os PSOs coletados anteriormente para essa posição ficarão desatualizados. Portanto, colete PSOs com frequência durante a produção.
Recupere os dados coletados do PSO do dispositivo
Após registrar os PSOs, você precisa recuperar os dados do dispositivo de teste e incorporá-los a uma nova versão. Para recuperar seus dados de PSO, siga estas etapas:
Desconecte seu dispositivo de teste do computador e feche o jogo.
Se você tentar fechar o jogo pelo Inicializador de Projetos, seu dispositivo pode não salvar os dados de PSO registrados.
Feche o projeto e reconecte o dispositivo de teste ao computador.
Extraia os PSOs do seguinte diretório:
Internal Storage/Android/Data/[nome do pacote do projeto]/files/UnrealGame/[project name]/Saved/CollectedPSOsVocê pode extrair o conteúdo do diretório CollectedPSOs usando qualquer um dos seguintes métodos:
Execute o seguinte comando usando o Android File Server (AFS):
UnrealAndroidFileTool -p [nome do pacote] -k [token de segurança] pull ^saved/CollectedPSOs [caminho de destino]Conecte o dispositivo ao computador e use o sistema de arquivos do computador para navegar até o posição dos PSOs.
Copie o arquivo
.UPIPELINECACHEpara um local de fácil acesso no computador. Este exemplo usa uma pasta no diretório do projeto chamadaImport/PSOFiles.
Crie dados finais de cache de PSO e adicione ao seu projeto
Para incorporar o cache de PSO em uma versão, siga estas etapas:
Abra a pasta do projeto e localize Saved/Cooked/Android_ETC2/[Nome do projeto]/Metadata/PipelineCaches. Copie os arquivos desta pasta para Import/PSOFiles.
Abra a ferramenta de linha de comando e navegue até o diretório de instalação da versão da engine que você está usando para seu projeto, depois localize a pasta Engine/Binaries/Win64. Por exemplo: C:/Program FIles/Epic Games/UE_5.2/Engine/Binaries/Win64.
Execute a seguinte linha de comando:
C++UnrealEditor-Cmd.exe "YourProjectPath.uproject" -run=ShaderPipelineCacheTools expand C:\PSOfiles\*.rec.upipelinecache C:\PSOfiles\*.shk C:\PSOfiles\"Alias Name"_"Project Name"_"Used Graphics API".spcApós a execução da linha de comando, o diretório Import/PSOFiles armazenará um novo arquivo de certificado PKCS #7. Copie-o para a pasta Build/Android/PipelineCaches do projeto.
Recompile e inicialize o jogo novamente. A nova versão inclui os dados finais do cache do PSO.
Resultado
Na inicialização, você também verá um log informando quantos PSOs foram carregados. Ao executar o jogo, solucione qualquer falha de renderização dos locais onde você coletou PSOs.