A texturização virtual de transmissão (SVT) é uma alternativa à transmissão de texturas no seu projeto a partir do disco. A SVT tem várias vantagens, e também algumas desvantagens, quando comparada com a Texture Streaming (transmissão de texturas) baseada em mips na Unreal Engine.
A transmissão de texturização baseada em mips tradicional realiza uma análise off-line do uso de UV do material e, em seguida, no tempo de execução, decide quais níveis de mip de uma textura carregar com base na visibilidade e na distância do objeto. Esse processo pode ser limitante, pois os dados de transmissão considerados são os níveis de mip de textura totais.
Ao usar texturas de alta resolução, carregar um nível de mip mais alto de uma textura pode sobrecarregar significativamente o desempenho e a memória. Além disso, a CPU toma decisões de transmissão de textura baseadas em mips usando a visibilidade e a seleção de objetos baseadas em CPU.
A visibilidade é mais conservadora, o que significa que é mais provável que seu sistema carregue algo, para evitar que objetos surjam na visualização. Então, se até uma pequena parte do objeto estiver visível, todo o objeto será considerado visível. O objeto carregado incluindo toda textura associada que possa ser necessária para transmissão.
Por outro lado, o sistema de texturização virtual apenas transmite partes da textura que a UE exige que estejam visíveis. Isso é feito dividindo todos os níveis de mips em ladrilhos de um tamanho fixo pequeno. A GPU determina quais dos ladrilhos visíveis são acessados por todos os pixels visíveis na tela. Isso significa que quando a UE considera um objeto visível, ele é comunicado à CPU que carrega os ladrilhos necessários em um cache de memória de GPU. Independentemente do tamanho da textura, o tamanho fixo do ladrilho das SVTs considera aqueles que estão visíveis. A GPU calcula a visibilidade usando buffers de profundidade padrão, fazendo com que as solicitações de SVT aconteçam apenas para as partes visíveis que afetam os pixels.
Como habilitar a texturização virtual
Em Configurações de Projeto, em Engine, Renderização, Texturas virtuais, marque a caixa ao lado de Enable virtual texture support** (Habilitar suporte de textura virtual).
[
] Clique na imagem para ampliar.
Na categoria Editor, Importação de textura, Textura virtual, nas Configurações de Projeto, você pode especificar um tamanho mínimo de textura para considerar texturas recém-importadas para a SVT. Se uma textura atender a esse tamanho mínimo, a texturização virtual de transmissão será habilitada automaticamente para esse ativo de textura.
Consulte mais informações sobre essas configurações na página Virtual Texturing Reference.
Como converter texturas e materiais
Habilitar a texturização virtual para o seu projeto significa que texturas e materiais exigem alguma configuração para funcionar corretamente; a textura deve habilitar o suporte a Virtual Texture Streaming, e a Texture Samples do material são necessários para usar um tipo de amostrador Virtual em vez de um não virtual.
Escolha dentre as opções abaixo para configurar adequadamente suas texturas e materiais para uso com a SVT.
Opção do menu de conversão
-
Selecione qualquer ativo de textura no Navegador de Conteúdo que você deseja converter para use a SVT.
-
Clique com o botão direito para abrir o menu de contexto e selecione Convert to Virtual Texture (Converter para textura virtual).
Essa opção de menu também permite converter uma textura virtual em uma textura normal.
-
A janela Convert To (Converter em) lista as texturas que você selecionou e os materiais que fazem referência a elas.
-
Clique em Ok para iniciar o processo de conversão.
Durante o processo de conversão, o ativo da textura terá a Virtual Texture Streaming (textura virtual de transmissão) habilitada para si nas configurações do Editor de Texturas. Materiais que façam referência às texturas selecionadas converterão os nós Texture Sample para usar o tipo de amostrador Virtual em vez do tipo de amostrador não virtual.
Conversão manual
- Abra o Editor de Texturas para um determinado ativo de textura clicando duas vezes nele no Navegador de Conteúdo.
-
No painel Detalhes, em Textura, habilite Virtual Texture Streaming (textura virtual de transmissão).
Habilitar essa opção sem usar a opção do menu de conversão acima invalidará imediatamente quaisquer materiais existentes que façam referência a uma textura convertida. Você deve abrir qualquer material que faça referência à textura ofensiva e definir o nó Texture Sample para usar o tipo de amostrador Virtual correto. Por exemplo, uma textura virtual deve usar um tipo de amostrador de Virtual Color em vez de Color.
Quando você encontrar um nó Texture Sample que não está usando o tipo de amostrador correto, a UE exibirá uma mensagem de erro no painel Stats e ao longo da parte inferior do nó, como esta:
- A mensagem de erro identifica o tipo de amostrador errado para a expressão VT Texture Sample.
- Altere o tipo de amostrador de Texture Sample para ser um dos tipos Virtual.
- VT Texture Sample é renderizada corretamente, o que é indicado pelo "VT" no canto inferior direito da expressão.
Ao adicionar uma textura virtual a um gráfico de material, a UE atribui o tipo de amostrador virtual automaticamente. Porém, você deve tornar a expressão um Texture Sample Parameter que você pode usar nas instâncias de material, lembre-se de que o material de base aplica o tipo amostrador virtual a todas as instâncias filhas. Lembre-se de que você não pode atribuir uma textura virtual a um espaço de parâmetro de textura que ainda não seja do tipo virtual no material de base.
Suporte a UDIM
U-Dimension (ou "UDIM") é uma convenção de nomenclatura de texturas que permite que várias imagens de textura sejam mapeadas para regiões UV separadas em um modelo de malha estática ou malha do esqueleto. Ao usar a convenção de nomenclatura UDIM, a UE importará grupos de arquivos de imagens como um único ativo de textura virtual.
O suporte de texturização virtual para UDIMs é útil por alguns motivos:
- Funciona com muitas texturas separadas menores em vez de texturas extremamente grandes.
- Cada imagem UDIM pode ter uma resolução diferente habilitando texturas virtuais com densidade de pixels não uniforme.
Por exemplo, se você importar uma textura virtual UDIM composta de quatro arquivos de imagens, dois de 2048x2048 e dois texturas de 128x128, organizados em um padrão 2x2, a textura virtual amostrará logicamente essas imagens como uma única textura de 4098x4098. A UE estenderá as imagens menores de 128x128 para preencher a mesma área que as imagens maiores de 2048x2048 sem o uso de disco ou de memória de tempo de execução afetado. Fazer com que a textura menor de 128x128 preencha uma resolução de textura de 2048x2048 não consome nenhuma memória neste caso.
Consulte informações adicionais sobre os fluxos de trabalho do UDIM no tutorial The Foundry's UDIM Workflow.
Comece a usar textura UDIM com textura virtual nos seus próprios projetos usando esta convenção de nomenclatura:
BaseName.####.[Support Image Format]
Por exemplo:
MyTexture.1001.png
Quando a UE importa uma imagem correspondente a esta convenção de nomenclatura, ele analisa a pasta de origem em busca de quaisquer imagens adicionais correspondentes ao mesmo BaseName seguidas por um número de coordenada diferente. Para cada imagem localizada, o número de quatro dígitos define a posição em que a UE deve mapear a imagem. Importar o mapa de texturas tradicional para UVs de malha no intervalo de 0-1, no entanto, a imagens UDIM mapeia para um espaço UV 0-1 com base em suas coordenadas UV padrão.
Durante a importação, a textura UDIM é invertida verticalmente porque ao amostrar UV na Unreal Engine, as coordenadas superiores esquerdas são (0,0). Os UV das malhas que usam texturas UDIM também são ajustados na importação para funcionar corretamente com a orientação da textura UDIM importada. Então, depois de importado para a engine, o UV para amostragem de UVs como a textura acima em um material ficaria assim:
Desempenho e custo
Meça o desempenho e o custo da texturização virtual no seu projeto usando as seções abaixo:
Texturização virtual de atributo
Abra o console usando a tecla de acento grave (`) e digite os seguintes comandos para habilitar suas informações estatísticas:
Use stat virtualtexturing para ver os detalhes sobre o custo da cena de texturização virtual em milissegundos (ms) e contadores para as tabelas de páginas.
Use stat virtualtexturememory para exibir os contadores de memória relevantes relacionados ao uso de texturização virtual na cena atual.
Visualização de texturização virtual de transmissão
Use o comando do console r.VT.Borders 1 para desenhar uma grade de visualização mips nos materiais que usam as texturas virtuais de transmissão.
Use r.VT.Borders 0 para ocultar a grade quando não for mais necessária.
Pesquisas e pilhas de materiais
A amostragem de uma textura virtual nos seus materiais é mais custosa do que a amostragem de uma textura tradicional. Você pode dividir o custo da texturização virtual em duas categorias:
- Pesquisas: acontecem para cada textura virtual que seu projeto amostra no gráfico de material.
- Pilhas: combinam texturas virtuais quando o seu projeto usa os mesmos UVs e origem de amostrador.
As texturas virtuais sempre serão mais custosas do que a amostra de texturas tradicional. Sempre haverá pelo menos duas buscas de textura e algumas instruções matemáticas. Porém, parte desse custo é amortizado combinando-se as pilhas (até 8) para as amostras de textura virtual que usam os mesmos UVs e origem de amostrador.
Neste exemplo de material simples, a UE está amostrando duas expressões de VT Texture Sample usando UVs padrão. Uma Virtual Texture Lookup (Pesquisa de textura virtual) é adicionada para cada pesquisa dessa amostra de textura e, como ambas estão usando um único UV, são combinadas em uma única pilha de texturas virtuais:
No entanto, se o seu projeto usar UVs diferentes, o custo aumentará com duas buscas de pilha de texturas virtuais:
O primeiro exemplo usa três buscas de textura no total: duas pesquisas e uma pilha. Como a amostra virtual usa os mesmos UVs, a UE combina suas pilhas para economizar uma busca de textura. No segundo exemplo, há um total de quatro buscas de textura: duas pesquisas e duas pilhas. A amostra de textura virtual usa UVs diferentes para as amostras de cor de base e de textura normal, o que significa que não podem ser combinadas em uma única pilha.
Observações adicionais sobre materiais
- A UE divide as texturas virtuais de transmissão em ladrilhos de tamanhos fixos para cada textura, independentemente de seu tamanho. Ela também limita o mip de resolução mais baixa pelo tamanho do ladrilho. Em muitos casos, isso não será um problema; porém, texturas com muito ruído ou altos detalhes podem exibir efeito serrilhado ou Moiré devido à falta de mips de baixa resolução. Lembre-se de que isso também representa custo potencial de desempenho para a GPU, embora possa ser difícil de medir na prática.
Limitações
Em geral, texturas virtuais são intercambiáveis com texturas normais, porém, existem algumas limitações e custos adicionais:
- As dimensões da textura devem ser uma potência de 2, mas a UE não exige que elas sejam quadradas por natureza. No entanto, elas utilizam a memória com mais eficiência na implementação atual.
- O suporte para filtro trilinear entre mips é feito de uma maneira estocástica. Ao usar o antisserrilhado temporal (TAA), é quase indistinguível do filtro trilinear normal, mas pode introduzir algum ruído visível em alguns casos.
- A UE limita o suporte para filtragem anisotrópica pelo tamanho da configuração de Tile Border (borda do ladrilho). O valor padrão de 4 permite menos filtragem anisotrópica do que o típico para texturas, mas aumentar esse valor aumenta o uso de memória.
- A transmissão virtual é reativa por natureza, o que significa que a CPU não sabe que precisa carregar um determinado ladrilho virtual até já tenha sido exigido por um quadro renderizado. Portanto, conforme a câmera se move pela cena, podem ocorrer alguns surgimentos visíveis, especialmente quando ladrilhos virtuais de maior resolução são carregados.