Texturas de jogo têm requisitos específicos para serem renderizadas corretamente no jogo. Ao criar texturas no Unreal Editor para Fortnite (UEFN) com imagens importadas, certifique-se de que o arquivo de imagem de origem use a potência de dois para altura e largura. Assim, aumentamos a compatibilidade e a estabilidade da ilha entre plataformas.
Formatos de arquivo compactados para unidades de processamento gráfico (GPUs) devem usar texturas à potência de dois em todos os consoles, PCs e dispositivos móveis. As texturas que não estiverem em conformidade com a regra da potência de dois se tornarão instáveis em plataformas menos sofisticadas e possivelmente causarão travamentos nos jogos. A potência de dois também é usada em transmissões de texturas para diminuir a resolução de textura em plataformas com menos memória.
A transmissão de texturas ajuda a:
Alterando a resolução de uma textura.
Determinando a rapidez com que um jogo é carregado.
Aumentando a qualidade visual do jogo.
Economizando memória de GPU.
O que é a potência de dois
Computadores e consoles gerenciam e processam dados em partes limitadas, não todos de uma vez. Esse é um princípio semelhante ao modo como os segundos planos são renderizados usando o World Partition.
Quando as partes de dados do jogo respeitam a regra da potência de dois, estabelecem um conjunto de restrições físicas codificadas sobre a mídia. A menos que essas restrições sejam atendidas, a engine de jogo desperdiçará recursos tentando renderizar os ativos corretamente.
A potência de dois é uma maneira de otimizar os dados do jogo e renderizar imagens para exibir experiências visuais com eficiência.
Exemplos de tamanhos de imagem aceitáveis são: 256x256, 512x512 ou 1024x2048. Texturas que não usarem a potência de dois não serão otimizadas e causarão instabilidade e baixo desempenho da ilha.
Texturas com potência de dois permitem que o UEFN use três funcionalidades principais:
Compactação de textura: reduz o tamanho da memória em aproximadamente oito vezes a um custo visual mínimo.
Mapeamento de MIPs: a geração automática de variantes de resolução inferior.
Transmissão de textura: mostra uma variante de resolução inferior antes que os dados de resolução superior possam ser transmitidos para a memória.
Combinados, essas funcionalidades permitem que até mesmo um ativo de última geração com texturas em 4K seja renderizado em qualquer plataforma. Isso ocorre porque as texturas terão variantes de alta qualidade em uma resolução reduzida.
Por exemplo, uma textura de 4000x4000 sem camada alfa exigiria 64 megabytes de memória. Ela teria que ser carregada de uma só vez e ainda seria exibida em 4000x4000, mesmo que estivesse causando serrilhado em um pequeno cartaz, bem longe do horizonte. Tamanhos de textura muito grandes podem travar o jogo em dispositivos que não possuem memória suficiente.
Por outro lado, uma versão em 4096x4096 de uma textura que usa compactação padrão consumirá apenas 8 megabytes, terá uma transmissão progressiva e produzirá menos serrilhado à distância. Tamanhos de texturas muito grandes também aumentarão o tamanho do pacote, mas não causarão travamento no jogo.
Validação de textura
Texturas devem ser validadas para fins de desempenho antes de serem usadas em um projeto. Se uma textura não for validada, causará os seguintes problemas:
travamento por falta de memória (ODM) devido à grande dimensão das texturas de origem.
Plataformas travando porque as texturas preparadas são grandes demais.
Problemas de desempenho da plataforma devido a texturas estarem abaixo do ideal.
Texturas que não passarem na validação impedirão que um projeto possa ser publicado.
Regras de validação
As regras de validação incluem uma regra universal que se aplica a todos os ativos, e três regras principais que se aplicam apenas a texturas.
Regra universal
Nenhuma dimensão de origem pode ser maior que 4096 texels.
Texturas 2D na interface de usuário
Qualquer textura preparada com menos de 1.048.576 texels (1024 X 1024) passará automaticamente na validação.
Texturas 2D
Texturas preparadas com menos de 1.048.576 texels (1024x1024) passam automaticamente na validação.
As dimensões preparadas não podem ser maiores que 2048 texels.
As dimensões preparadas devem ser uma potência de dois.
Deve ser possível transmitir e permitir a criação de MIPs.
Texturas de Cube Map
Qualquer textura preparada (por face) com menos de 1.048.576 texels passa automaticamente na validação.
As dimensões preparadas não podem ser maiores que 1024 texels. Isso é por face, não o ativo.
As dimensões preparadas devem ser uma potência de dois.
Deve ser possível transmitir e permitir a criação de MIPs.
Como identificar texturas inválidas
O UEFN tem requisitos de tamanho rígidos para texturas. Para garantir que todas as texturas importadas estejam usando as restrições de tamanho corretas, o UEFN contém validadores adicionais além do que o Fortnite oferece. Esses validadores usam regras para detectar e expor problemas no início do processo de construção para evitar o carregamento de projetos que inevitavelmente falham ao preparar o conteúdo.
Existem duas áreas em que uma textura é validada; durante o processo de validação do projeto e também quando adicionada ao Navegador de Conteúdo.
Validação do projeto
Os erros de validação da textura são exibidos depois que um projeto passa pelo processo de validação. O processo sempre usa os dados de textura reais (em vez de tags de ativos). Todos os resultados são impressos no Log de Mensagens com uma ficha de "Correção Automática" (Auto Fix).
Validação do Navegador de Conteúdo
A miniatura e a dica de ferramenta da textura exibem um ícone e um resumo, respectivamente. O menu de contexto oferece uma opção "Conformar textura". A ação de conformar textura tenta usar os dados da textura real, por motivos de desempenho, volta a usar as tags de ativos se a textura não for carregada. Se ela ler tags de ativos, poderá ser um pouco menos precisa se algumas tags estiverem ausentes. No entanto, da próxima vez que os dados reais da textura forem validados (validação de projeto, OnObjectTransacted), a dica de ferramenta e a miniatura serão atualizadas de forma precisa.
Os ativos de textura que não seguem os requisitos definidos acima são marcados no Navegador de Conteúdo com um ícone de erro. Focalizar o ativo mostra mais detalhes sobre o problema específico na parte superior da dica:
Consulte mais informações sobre o uso de texturas de conformidade na seção a seguir Como deixar texturas inválidas em conformidade.
Requisitos de dimensionamento de textura para o UEFN
Para garantir que todas as ilhas funcionem bem em todas as plataformas-alvo, o UEFN aplica certos requisitos sobre os ativos de textura.
Se o seu projeto contiver ativos de textura que não seguem esses requisitos, essas texturas não passarão na validação e você não poderá fazer o upload de seu projeto.
Se a textura estiver atribuída ao grupo de texturas da interface de usuário, suas dimensões devem ser menores que o tamanho máximo de 2048x2048. Porém, as dimensões da textura não precisam ser potências de dois. (As texturas da interface de usuário geralmente não são transmitidas, por isso, sempre serão exibidas da forma mais nítida possível.)
Se a sua textura _não_ estiver atribuída ao grupo de texturas da interface de usuário, suas dimensões devem ser menores que o tamanho máximo de 4096x4096. Além disso, se ela contiver mais pixels que o limite mínimo (1024x1024, ou 1048576), deve poder ser transmitida. Ou seja,
Cada uma de suas dimensões deve ser uma potência de dois (por exemplo, 256x256, 512x512, 1024x1024, e assim por diante).
A imagem não precisa ser quadrada, desde que cada dimensão seja uma potência de dois. Por exemplo,, 256x512, 512x1024, 256x1024, e assim sucessivamente.
A propriedade Nunca transmitir da textura deve ser desabilitada.
A textura deve ser definida para gerar mipmaps.
O custo total de memória de todas as texturas não transmitidas em seu projeto deve ser menor que um orçamento máximo predefinido. O custo de memória para o seu projeto é determinado pela adição do custo de memória de todas as texturas das quais a propriedade "Nunca transmitir" esteja habilitada. Isso inclui:
Todas as texturas cujas dimensões não são potências de dois (e que não foram preenchidas ou esticadas para potências de dois usando a propriedade "Preenchimento e redimensionamento"). A propriedade "Nunca transmitir" é sempre automaticamente habilitada para essas texturas.
Todas as outras texturas com a propriedade "Nunca transmitir" habilitada manualmente.
Todas as texturas têm uma configuração "Grupo de texturas" que indica seu uso esperado. Você pode definir esse grupo, e as outras propriedades das texturas citadas acima, clicando duas vezes no ativo de textura no Navegador de Conteúdo para abrir o Editor de Texturas.
Como redimensionar texturas
No UEFN, texturas antigas, importadas e que utilizam dimensões irregulares ou dimensionamento inchado podem ser dimensionadas de acordo com a potência de dois. Encontre e corrija texturas com falha seguindo as etapas abaixo:
Abra a Gaveta de Conteúdo ou o Navegador de Conteúdo e selecione a pasta-raiz de conteúdo do projeto, localizada em FortniteGame no painel esquerdo da árvore de arquivos.
Em Todos, localize a pasta chamada Conteúdo de NomeDoProjeto.
Digite
NeverStream==true&&TextureGroup!=UIna barra de pesquisa, na parte superior da Gaveta de Conteúdo. Isso executa uma consulta para identificar ativos afetados.
Todos os ativos visíveis nessa exibição filtrada são afetados. Embora a correção demore um pouco, ela melhorará o desempenho do seu nível.
Existem duas maneiras de atualizar texturas afetadas que não estão no grupo IU.
A Opção A usa os recursos de edição em massa do UEFN para agrupar texturas e editá-las em uma única etapa. Essa é a maneira mais rápida de corrigir texturas automaticamente, preenchendo-as na proporção correta. Entretanto, esse preenchimento pode resultar no uso desnecessário de memória.
A Opção B leva um pouco mais de tempo, mas fará o melhor uso possível do orçamento de memória se você precisar resolver várias texturas afetadas. Essa opção permitirá editar e recarregar texturas para evitar preenchimento desnecessário.
Opção A
Clique no menu de hambúrguer no Navegador de Conteúdo ao lado da barra de pesquisa e selecione Texturas. Todas as texturas são isoladas no Navegador de Conteúdo.
Clique no ícone Configurações e ative Colunas. Todas as texturas agora estão listadas em colunas no Navegador de Conteúdo.
Pesquise qualquer ativo que não esteja usando o dimensionamento na potência de dois na coluna Dimensões.
Selecione todas as texturas que não estejam em conformidade com a regra da potência de dois.
Clique com o botão direito no Navegador de Conteúdo e selecione Ações de Ativos, Editar Seleção na Matriz de Propriedades. Assim, você abre a ferramenta de edição em massa, onde todas as texturas selecionadas serão discriminadas na aba Editor de Componentes.
Selecione todos os nomes de arquivos de textura na seção Raiz.
Clique na imagem para ampliar.
Abra a opção Textura na aba Colunas Fixadas.
Selecione Preenchimento na potência de dois no menu suspenso Preenchimento e redimensionamento. Uma barra de progresso aparece na parte inferior da janela do editor.
As texturas foram todas convertidas na potência de dois e agora funcionarão em várias plataformas.
Opção B
Clique duas vezes na textura para abrir o Editor de Texturas.
Na barra de pesquisa, na parte superior do painel Detalhes, digite o nome do arquivo fonte. O resultado mostrará o caminho do arquivo no seu PC que será usado como arquivo de origem original da textura.
Clique na imagem para ampliar.
Redimensione a textura para o tamanho com potência de dois mais próximo usando um editor de imagens, como o GIMP ou Paint.NET 5. Você pode até mesmo usar o Paint se a textura não apresentar uma camada alfa.
Um tamanho com potência de dois inclui 256, 512, 1024, e assim por diante.
Por exemplo, uma textura de 500x500 deve ter 512x512 e uma textura de 600x256 pode ter 512x256.
Alterações na proporção não devem ter efeitos adversos na sua ilha.
Clique com o botão direito na textura no Navegador de Conteúdo e selecione Reimportar.
Se a imagem da textura original não estiver presente nos seus arquivos:
Clique com o botão direito do mouse na textura no Navegador de Conteúdo e selecione Ações de Ativos, Exportar para criar uma nova cópia.
Redimensione a textura para o tamanho com potência de dois mais próximo. Em seguida, no Navegador de Conteúdo, clique com o botão direito na textura e selecione Reimportar com novo arquivo. Quando o arquivo for importado, clique duas vezes na textura para abrir o Editor de Texturas.
Na barra de pesquisa de Detalhes, digite Nunca transmitir e defina a opção como False. Se não for possível definir como False, certifique-se de que a especificação Importado na parte superior mostra que sua imagem tem um tamanho com potência de dois.
No painel Detalhes, procure a opção Configurações de Geração de Mip. Em seguida, no menu suspenso, selecione Do grupo de texturas.
No painel Detalhes, procure a opção Configurações de compactação e selecione Padrão (DXT1/5) no menu suspenso.
Depois de concluir essas etapas, verifique se conseguiu remover a textura restrita pesquisando NeverStream==true&&TextureGroup!=UI na barra de pesquisa do Navegador de Conteúdo novamente. Os ativos que você atualizou não aparecerão mais.
Como alterar uma textura individual
Use as instruções abaixo se você tiver apenas uma textura que não segue a regra da potência de dois.
Clique duas vezes na textura para abrir o Editor de Texturas.
Clique na imagem para ampliar.
Na barra de pesquisa Detalhes, digite Modo Potência de Dois. Em seguida, no menu suspenso Preenchimento e redimensionamento, selecione Preencher para quadrado.
Procure a opção Nunca transmitir e defina-a como False.
Procure a opção Configurações de Geração de Mip. Em seguida, no menu suspenso, selecione Do Grupo de Texturas.
Procure a opção Configurações de compactação e, no menu suspenso, selecione Padrão (DXT1/5).
Depois de concluir essas etapas, verifique se conseguiu remover a textura restrita pesquisando NeverStream==true&&TextureGroup!=UI na barra de pesquisa do Navegador de Conteúdo. Os ativos que você atualizou não estarão mais na lista.
Como deixar texturas inválidas em conformidade
A melhor maneira de corrigir texturas inválidas importadas de arquivos externos é editá-las no aplicativo original usado para criá-las, e depois reimportar o ativo. Você também pode usar outro aplicativo de edição de imagens dedicado para editar as texturas antes de reimportá-las para o UEFN.
Certifique-se de que as dimensões de cada imagem sejam menores do que as dimensões máximas definidas acima. Se estiver usando a imagem para a IU, faça com que a altura e a largura sejam potências de dois. A imagem não precisa ser quadrada, desde que cada dimensão seja uma potência de dois.
Alternativamente, o UEFN oferece uma maneira integrada para fazer com que os tamanhos das texturas sigam automaticamente os requisitos do UEFN. Para fazer isso:
No Navegador de Conteúdo, selecione uma ou mais texturas inválidas.
Clique com o botão direito na miniatura de uma textura e escolha Conformar textura no menu contextual.
O editor tenta ajustar as propriedades das texturas selecionadas para evitar problemas de validação e grava seus resultados no Log de Saída.
Essa operação tem os seguintes efeitos:
Se a textura estiver no grupo de texturas da interface de usuário e suas dimensões forem maiores que o máximo permitido, a configuração Compactação, Avançada, Tamanho máximo de textura é ajustada para limitar a resolução máxima da textura que pode ser carregada no tempo de execução.
Se a textura não estiver no grupo de texturas da interface de usuário e suas dimensões forem maiores que o máximo permitido, a configuração Tendência de LOD da textura é ajustada de forma que os mipmaps maiores da textura sejam descartados. Essa ação limita efetivamente a resolução máxima da textura que pode ser carregada no tempo de execução.
Se a textura não estiver no grupo de texturas da interface de usuário e suas dimensões não forem potências de dois, a configuração Preenchimento e redimensionamento da textura será definida como Estender à potência de dois.
Se a textura não estiver no grupo de texturas da interface de usuário, a configuração Nunca transmitir é desabilitada.