O plugin Impostor Baker oferece uma maneira de criar representações simplificadas de geometria complexa para uso em renderização de longa distância como malhas de nível de detalhe (LOD). Há três tipos principais de impostores que você pode gerar usando o Imposter Baker:
Impostor de esfera completa para capturar e renderizar visualizações de todos os ângulos ao redor do objeto.
Impostor de hemisfério superior para capturar e renderizar apenas visualizações acima do terreno. Essa opção oferece melhor qualidade para objetos que normalmente ficam em um terreno e não podem ser vistos por baixo de uma distância muito grande. Isso economiza recursos de processamento ao não renderizar exibições que não são usadas.
O LOD de billboards tradicionais usa a técnica mais antiga de capturar imagens em ângulos horizontais fixos e uma única imagem de cima para representar a vista superior. Cada uma dessas imagens é colocada em seu próprio cartão de sprite com base no ângulo de visão. Os cartões voltados para o lado oposto desaparecem usando um efeito de pontilhamento.
Os dois primeiros tipos de impostor se baseiam na mesma técnica. A ferramenta captura um número específico de visualizações ao redor do objeto. Ao renderizar, o material impostor encontra os três quadros capturados mais próximos da visualização atual da câmera e os mescla para criar uma representação que se aproxime mais do ângulo de visualização real. Esses três quadros são renderizados em um único plano de sprite.
Impostores proporcionam uma simulação mais suave e realista da geometria 3D, sempre renderizando um único quadro de sprite mesclado da perspectiva do visualizador, em comparação com billboards, que usam planos específicos de sprite com perspectiva fixa que não parecerão totalmente corretos a partir de alguns ângulos. O vídeo abaixo demonstra essa diferença.
À esquerda: Impostor; à direita: Billboards.
No Fortnite Battle Royale (FNBR), usamos Impostores de hemisfério superior para todas as nossas árvores quando o Nanite está desabilitado, o que proporciona melhor qualidade para nossas árvores espalhadas pela ilha que são vistas de longe.
Comparação entre Impostores e Billboards
A diferença entre Impostores e Billboards é que os primeiros usam um cartão de sprite que contém 8 triângulos com 9 vértices, enquanto Billboards usam 8 cartões que contêm 72 triângulos com 81 vértices no total. Isso significa que as representações de Billboard têm oito vezes mais vértices e triângulos para representar do que as de um Impostor.
Em geral, a renderização de impostores é muito mais rápida do que a de billboards, porque contêm menos vértices, embora o sombreador de pixels seja mais caro para impostores devido à mesclagem dos três quadros mais próximos: a renderização de impostores para dispositivos móveis reverte para uma amostra de um único quadro. Os billboards ainda têm overdraws piores para seus materiais mascarados. A principal vantagem de usar billboards é que você pode obter mais resolução na textura, pois apenas nove visualizações são capturadas (em uma grade de 3x3).
Para folhagens distantes, usamos um valor de 12 para a distribuição de quadros XY do impostor. Fazemos isso para a maioria dos ativos no Fortnite Battle Royale. Isso resulta em 12 quadros por 12 quadros, em um total de 144 quadros usados.
Como ativar o plugin Imposter Baker
Antes de começar, ative o plugin ImposterBaker na Unreal Engine para seu projeto. Você pode fazer isso abrindo o navegador de Plugins no menu Editar. O plugin está localizado na categoria INTEGRADOS > Malha.
Alterações no plugin Impostor Baker na Unreal Engine 5.5 e versões posteriores
Há novas funcionalidades no Impostor Baker que o tornam mais fácil de usar, além de abranger mais casos de uso. Essas melhorias incluem:
O Impostor Baker agora pode renderizar usando o GBuffer sem precisar de uma opção de material colocada em ativos de material.
O Impostor Baker agora pode renderizar todos os mapas de cores e mapas escalares que os materiais utilizam, além de agrupar os mapas escalares em qualquer combinação que você especificar.
O Impostor Baker agora inclui um editor de ativos completo para renderização e ajuste de valores que podem ser salvos automaticamente em ativos de dados como 'Predefinições'.
Agora, você pode salvar automaticamente dados de textura e malha diretamente no ativo de origem com um clique.
O Impostor Baker agora inclui um renderizador em lote que pode renderizar impostores para várias malhas usando a predefinição especificada e salvar todos eles.
Agora, você pode alternar entre Sem paralaxe, Paralaxe única BumpOffset e Paralaxe de iteração completa diretamente no Editor de impostores ou na instância do material resultante.
Usando o Editor de Impostores
As seções abaixo descrevem as várias seções do editor do Impostor Baker.
Widget Editor de Impostor
O widget Editor de impostores oferece controle total para personalizar e criar seu impostor.
Widget de predefinição
A geração de impostores usando o widget Predefinição oferece uma maneira de gerar e salvar vários impostores de uma só vez.
Para acessar qualquer um desses widgets, clique com o botão direito do mouse em qualquer ativo de Malha Estática no Navegador de Conteúdo e selecione a opção Ações de Ativos com Script > Impostor Baker.
DataAsset de predefinição
O Ativo de dados de predefinições contém todos os padrões inicializados quando você abre o Editor de impostores. Isso economiza tempo quando você renderiza repetidamente vários impostores ao manter as configurações consistentes (veja abaixo as descrições das configurações individuais).
Você pode alterar sua Predefinição de configurações atual usando os botões acima dela, como segue:
Carregar configurações: aplica as configurações do Ativo de dados ao Editor de impostores.
Aplicar ao ativo de dados: aplica as configurações atuais do Editor de impostores ao Ativo de dados.
Novo Ativo de Dados: cria um novo Ativo de Dados no caminho especificado em Salvar Ativo.
Você pode especificar qual Ativo de dados será usado por padrão ao iniciar o Editor de impostores ou o Renderizador de predefinições no DefaultEditor.ini do seu projeto (localizado em \(Raiz do projeto)\config\DefaultEditor.ini). Inclua as seguintes informações no .ini:
[/ImpostorBaker/BP/EUW_Impostor_Editor.EUW_Impostor_Editor_C]
DefaultSettingsAssetPath=/Game/ImpostorPresets
[/ImpostorBaker/BP/EUW_Generate_Impostor_using_Preset.EUW_Generate_Impostor_using_Preset_C]
DefaultSettingsAssetPath=/Game/ImpostorPresetsEm seguida, altere o DefaultSettingsAssetPath para apontar para um ativo de dados que você criou no seu projeto (ou o padrão instalado com o plugin).
Configurações de incorporação
A seção Configurações de incorporação contém as principais configurações que afetam a geração de impostores.
| Configurações de incorporação | Descrição |
|---|---|
Malha Estática | Determina para qual ativo de malha estática gerar um impostor. |
FramesXY | Determina quantos subquadros em cada eixo devem ser gerados. Por exemplo, um valor de 16 criaria 16x16=256 subquadros. |
Mapas de cores para renderizar | Determina quais mapas de cores o Impostor Baker renderizará para o seu impostor. A maioria dos impostores requer apenas BaseColor e Normal. A lista completa de opções de saída de mapas de cores é a seguinte:
|
Máscaras compactadas de canal | Fornece a renderização de mapas escalares personalizados e a compactação dos resultados em diferentes canais de cores em uma única textura. As opções são:
|
Tipo de Impostor | Determina o tipo de impostor a ser incorporado. As opções são:
|
Resolution | A resolução de textura a ser usada para as texturas resultantes. A Epic Games usa uma resolução de 2048 para seus projetos, como o Fortnite Battle Royal. |
Configurações de material
A seção Configurações de material contém as configurações de qual material seu impostor usará e várias configurações para aplicar ao material resultante.
| Configurações de material | Descrição |
|---|---|
Material do hemisfério | Determina qual material pai usar para seu impostor. Geralmente, não é necessário que você altere isso. A configuração mostra o padrão correto para cada tipo com base no tipo de impostor selecionado nas configurações de Incorporar. |
Sharing Model substitui | Fornece uma maneira de alterar o modelo de compartilhamento atual para qualquer modelo de sombreamento disponível. |
Modo Parallax | Alterna entre três modos:
|
Especular Constante | Define o valor a ser usado para especular quando não há nenhum mapa Especular sendo renderizado na matriz de máscaras compactadas em canal. Essa opção fica oculta quando um mapa Especular é renderizado. |
Rugosidade Constante | Define o valor a ser usado para rugosidade quando não há nenhum mapa de rugosidade sendo renderizado na matriz de máscaras compactadas em canal. Essa opção fica oculta quando um mapa de Rugosidade é renderizado. |
Opacidade Constante | Define o valor a ser usado para Opacidade quando não há nenhum mapa de Opacidade sendo renderizado nas máscaras compactadas em canal. Essa opção fica oculta quando um mapa de Opacidade é renderizado. |
Cor da subsuperfície | Define o valor a ser usado para a cor de subsuperfície quando não há nenhum mapa de cores da subsuperfície sendo renderizado. Essa cor será multiplicada em relação a BaseColor, bem como mascarada usando o campo de distância alfa (que é armazenado na máscara de opacidade, em BaseColor Alfa). Essa opção fica oculta quando um mapa de cores de Subsuperfície é renderizado. |
Mín. da máscara de dispersão | Isso define o valor mínimo no qual a dispersão entra em vigor, permitindo que o campo de distância alfa seja usado como uma máscara de dispersão de subsuperfície para este impostor. Isso tem o benefício adicional de trazer de volta algumas sombras próprias que, de outra forma, não estariam presentes na dispersão. |
Comprimento da máscara de dispersão | Isso define o valor da largura do gradiente da borda para a máscara de dispersão criada usando o alfa do campo de distância. Isso tem o benefício adicional de trazer de volta algumas sombras próprias que, de outra forma, não estariam presentes na dispersão. |
Deslocamento da máscara | Esse valor expande ou reduz o deslocamento da máscara criada usando o alfa do campo de distância. |
### Configurações do billboard
As Configurações do Billboard apenas são exibidas quando o Tipo de Impostor (localizado em Configurações de Incorporação) está definido como Billboards Tradicionais. O Tipo de impostor fornece algumas configurações para ajustar especificamente os billboards.
| ### Configurações do billboard | Descrição |
|---|---|
Centralizar XY no pivô da malha | Essa configuração está desabilitada por padrão. Quando desabilitada, a Malha estática é capturada com a câmera girando em torno do centro de seus limites. Isso geralmente garante que o objeto permaneça dentro dos quadros capturados. Em alguns casos, especificamente para árvores, o centro real dos limites pode não estar exatamente no pivô, que geralmente é onde está o tronco da árvore. Isso pode resultar em um artefato em que você vê brevemente o fantasma de troncos ligeiramente deslocados juntos à medida que a câmera gira em torno dos billboards resultantes. A habilitação dessa configuração força a captura a se centralizar em torno do pivô da malha na posição XY, o que corrige esse artefato. Essa configuração pode causar problemas se for usada em malhas cujo pivô não esteja próximo do centro. |
Superior do plano de referência | Desloca o plano de referência do cartão virado para cima. O valor é normalizado de 0 a 1, em que 0,5 representa o ponto médio da malha. Quando você modificar essa configuração, posicione o cartão superior na parte mais larga da malha estática. Neste exemplo, usando um pinheiro, o cartão superior é empurrado para baixo, o que ajuda a reduzir os artefatos. |
Lados do plano de referência | Essa configuração funciona de forma semelhante à parte superior do plano de referência, mas, em vez disso, desloca os planos laterais ao longo da normal. Normalmente, não há razão para ajustar essa configuração, a menos que você esteja capturando um objeto muito denso que ocupe a maior parte dos limites em todos os lugares e tenha habilitado as opções de paralaxe. |
Usar Shader de Vértice de Sprite | Essa configuração apenas deve ser habilitada quando as opções de Paralaxe estiverem habilitadas. Ela faz com que os UVs sejam deslocados para além dos limites da geometria, o que mostrará recortes. O exemplo abaixo demonstra um caso extremo em que você pode ver recortes na parte inferior da malha. Use essa configuração com moderação, pois seus efeitos pioram o overdraw mascarado. |
Há valores adicionais de instância de material de billboard que controlam configurações adicionais que não são expostas ao Blueprint, mas essas configurações ainda podem ser ajustadas em casos mais avançados. As principais categorias são as configurações de Pontilhamento, que definem o quanto a transição deve ser pontilhada, e as configurações de Sombreador de vértices, que definem o limite para remover cartões quando eles começam a se afastar da câmera.
Configurações de salvamento de ativos
As Configurações de salvamento de ativos definem onde os ativos são salvos.
| Configurações de salvamento de ativos | Descrição |
|---|---|
Novo caminho do ativo | O local da pasta para texturas e materiais. Por padrão, o caminho é relativo à malha estática. Quando o caminho é relativo, você pode iniciá-lo com |
New Asset textura prefixo | Este é o prefixo anexado ao nome dos novos ativos de textura. |
Novo prefixo MIC de ativo | É o prefixo anexado ao nome dos ativos da constante de instância de Material. |
Usar caminho relativo | Define o caminho em relação à malha de origem. Quando isso for falso, o caminho deve começar com |
O nome do ativo de malha estática sempre será anexado ao prefixo especificado, seguido pelo nome de cada mapa. Por exemplo, se você tiver uma malha estática chamada S_Tree_01, a BaseColor resultante será T_Impostor_S_Tree_01_BaseColor com base nos valores mostrados na imagem acima.
Configurações avançadas
As configurações avançadas contêm valores que você não precisa editar com frequência.
| Configurações avançadas | Descrição |
|---|---|
Capture Using GBuffer | Quando habilitado, o GBuffer será usado para capturar os dados do impostor. Isso funciona para todos os materiais opacos e com máscara, mas não funciona com translucidez. Se a malha de origem contiver algum material translúcido, o Editor de impostores avisará você com um texto vermelho na janela de visualização. As versões anteriores desse plugin exigiam que você colocasse a função de material "Opção de captura de impostor" em cada material primeiro. Isso não é mais necessário, mas ainda pode ser desejável em alguns casos. Um exemplo de caso de uso seria como usamos isso no Fortnite Battle Royale para modificar um material e remover determinados efeitos de coloração baseados no mundo, de modo que o material do impostor possa ser colorido dinamicamente após a geração. |
Ortográfico | Quando verdadeiro, a captura é feita usando renderização ortográfica. Essa configuração quase nunca deve ser alterada. A renderização da perspectiva quase nunca é necessária, pois o material com paralaxe recria a perspectiva precisa posteriormente. No entanto, há certos efeitos de materiais, como o fresnel, que não podem ser capturados adequadamente usando a renderização ortográfica e, portanto, essa configuração pode ser desabilitada nesses casos. |
Distância da câmera | Usado somente quando a opção Ortográfica está desabilitada. Define a distância da captura. |
Resolução de captura de cena | A resolução na qual capturar cada subquadro. O valor dessa configuração é arredondado automaticamente para a potência de 2 mais próxima, pois determinadas partes do processo exigem uma cadeia de mips e mapas das texturas de captura de cena (especificamente, a geração dos recortes de geometria do sprite no final). Defina esse valor como pelo menos duas vezes a resolução de cada subquadro na textura final, para que o resultado seja superamostrado. Por exemplo, se a textura final for 4096 com 16 quadros XY, cada subquadro terá 256x256. A resolução padrão de captura de cena de 512 significa que os subquadros serão renderizados em uma porcentagem de 200% da tela, o que produzirá melhores resultados com suavização de serrilhado. |
Show Floor In Preview cena | Alterna a exibição de uma malha de chão na janela de visualização. Não tem impacto nos resultados. |
Impostor projeta sombras | Alterna se o impostor projeta sombras na janela de visualização prévia. Não afeta o processo de captura ou os ativos criados resultantes. |
Modo de depuração do sombreador | Ativa uma sobreposição de depuração no material que mostra a grade de todos os quadros capturados e aponta a localização do raio da câmera por meio dessa grade, tanto para a câmera quanto para a luz do sol (visualizando uma sombra pontilhada). O "triângulo" atual que contém os 3 quadros de visualização mais próximos também é mostrado e é colorido pelo peso da mistura nessa posição. |
Mostrar valores de depuração | Exibe uma nova categoria de configurações de detalhes chamada Depuração que mostra uma variedade de informações de depuração internas ao Editor de Impostores (como a dinâmica da Instância de Material que está sendo usada, várias estatísticas sobre limites e pivôs e assim por diante). Útil apenas para depuração de problemas. |
Mostrar destinos de renderização | Exibe uma nova categoria de configurações de detalhes chamada Alvos de renderização, mostrando todas as várias matrizes de alvos de renderização para os diferentes mapas e mips de captura de cena. Potencialmente útil para inspeção ocasional. |
Manual S RGB Retainer Box | O Editor de Impostores atualmente renderiza a FPreviewScene sem uma curva gama devido a um bug. Essa caixa de seleção possibilita uma solução alternativa que usa um widget de retenção UMG para aplicar uma curva sRGB e está habilitada por padrão. |
Modos de visualização
Você pode controlar a janela de visualização de várias maneiras para pré-visualizar seus impostores. Por padrão, a janela de visualização alterna entre a malha de origem e o impostor renderizado de acordo com o valor configurável Alternar por distância, mas você também pode configurá-la para mostrar ambos em uma visualização Lado a lado e forçar Somente impostor:
A visualização lado a lado é útil em combinação com as configurações de Modo de exibição, que você pode usar para localizar e exibir quaisquer diferenças entre a malha de origem e o impostor. Essa visualização é especialmente útil quando se está tentando aproximar um valor especular ou de rugosidade constante sem capturar esses valores.
Abaixo está um exemplo da janela de visualização que mostra as normais para a malha de origem original e o impostor juntos:
Você pode girar a luz solar mantendo pressionada a tecla L e clicando e arrastando com o mouse. É possível orbitar a câmera clicando com o botão esquerdo e arrastando, ou movê-la para frente e para trás clicando com o botão direito e arrastando ou usando a roda do mouse:
Materiais pais
Você pode encontrar o material pai básico para impostores no Navegador de Conteúdo, em Engine/Plugins/ImposterBaker Content/Materials/Parents. Abra o arquivo chamado M_Imposter para inspecioná-lo.
O núcleo do comportamento do impostor, incluindo um conjunto de Máscaras compactadas em canal, é montado em uma função aqui:
A seção que passa os valores para a constante especular está à direita da função mostrada na imagem anterior, conforme mostrado abaixo. Essa função também lida com a dispersão de subsuperfície integrada que é mascarada pelo alfa do campo de distância:
Mapas de cores opcionais
Os mapas de cores opcionais adicionais que você pode renderizar (Emissivo, Subsuperfície e Tangente) já estão conectados ao material usando essa função. A ferramenta aciona automaticamente uma opção estática para habilitar os corretos quando eles são renderizados:
Você pode adicionar mapas de cores adicionais, como a textura Iluminável (que não está conectada em nenhum lugar no momento), ou mapas escalares adicionais além dos quatro que você obtém com a textura Compactada em canal incluída, ao material usando a função mostrada abaixo (que está presente no material abaixo das funções descritas nas imagens acima, apenas desconectada):
Mapas escalares
Os mapas escalares adicionais que você pode renderizar, como Rugosidade, Especular e Revestimento transparente, entre outros, já estão conectados por meio dessa função de material, que também alterna automaticamente as opções estáticas para habilitar as texturas que são renderizadas junto com o canal de cor correspondente.
O material pai dos Billboards tradicionais está localizado no Navegador de conteúdo, em Engine/Plugins/ImposterBaker Content/Materials. Abra M_Billboard_01_Inst.
/Script/Engine.Material/ImpostorBaker/Materials/Parents/M_Billboard_01_Inst
Ele é configurado exatamente da mesma forma que o material de Impostor acima. Você pode consultar essas imagens para entender o layout do material dos Billboards tradicionais. As funções de material são nomeadas da mesma forma, mas incluem _Billboard no nome. A lógica também é essencialmente semelhante, apenas os detalhes internos das funções são diferentes.
Renderização sem GBuffer
Para capturar a translucidez ou para casos especiais em que você precisa desabilitar determinados funcionalidades durante a captura, é necessário desativar Capturar usando GBuffer e colocar a função de material ImpostorCaptureSwitch no final do gráfico que a malha utiliza:
Se você desabilitar Capturar usando GBuffer, mas não incluir a função de material ImposterCaptureSwitch, o impostor capturado será renderizado incorretamente com muitos artefatos. Isso ocorre porque o material interpretará a cor de base e a iluminação como profundidade, o que aplicará paralaxe à saída e produzirá muitos erros de renderização.
Para contextualizar a gravidade desse problema, considere que a citação direta do desenvolvedor é a seguinte:
"Se você desmarcar Capturar usando GBuffer, mas NÃO incluir a função acima nos materiais, o impostor capturado basicamente parecerá uma bola fumegante de tristeza de artefato, porque o material interpretará a cor base e a iluminação como profundidade e prosseguirá paralaxe em uma sopa de pixels de esquecimento destruído.
O Sad Impostor tem um caso grave de síndrome do impostor hoje; suas configurações nem sequer são válidas."
Geração de vários impostores usando as predefinições
Você pode gerar impostores para várias malhas estáticas selecionando-as, clicando com o botão direito do mouse e escolhendo Ações de ativos com script > Impostor Baker > Gerar impostor usando predefinição no menu de contexto.
Depois de definir a Predefinição de configurações e decidir qual ação tomar se uma malha estática já tiver um impostor no último LOD, clique em Gerar e salvar impostores.
Se você tiver definido Diálogo Presente, o processo será pausado se um impostor pré-existente for detectado. Esse processo permanecerá pausado até que você faça uma seleção na caixa de diálogo pop-up e escolha uma ação a ser executada, seja para substituir o último LOD, adicionar um novo LOD ou pular totalmente essa etapa. Isso também pode ocorrer no Editor de impostores.
Modo Paralaxe Iterativa Completa
O modo Paralaxe iterativa completa é capaz de produzir uma renderização que é quase indistinguível da malha original, desde que o impostor capture os dados de todos os canais usados pelo original. Ele escolhe o melhor resultado de raio para cada pixel de um quadro vizinho para, essencialmente, rastrear os cantos dos vizinhos. Essa opção é chamada de Pesos Derivados da Profundidade.
Aqui está um exemplo que compara a paralaxe única com a paralaxe iterativa usando o calibrador de cores enquanto captura os mapas especular, de rugosidade, de revestimento transparente e metálico em uma textura compactada em canal. Esse é um teste muito exigente que amplia os artefatos de mesclagem.