Mapa de Sombras Virtuais (VSMs) é o novo mapeamento de sombras usado para fornecer sombreamento consistente e de alta resolução que funciona com ativos com qualidade de filme e um mundo aberto grande e dinamicamente iluminável usando Nanite geometria virtualizada, Lumen iluminação global e reflexo, da Unreal Engine 5, e World Partition.
Objetivos dos Mapas de Sombras Virtuais
Mapas de Sombras Virtuais foram desenvolvidos com os seguintes objetivos:
Aumente significativamente a resolução de sombras para corresponder à geometria Nanite altamente detalhada
Sombras suaves plausíveis com custos de desempenho controláveis e razoáveis
Fornecer uma solução simples que funcione por padrão com quantidades limitadas de ajuste necessário
Substitua as várias técnicas de sombreamento de Luz Estacionária por um caminho único e unificado
Conceitualmente, mapas de sombras virtuais são apenas mapas de sombras em resolução muito alta. Em sua implementação atual, têm uma resolução virtual de 16k x 16k pixels. Clipmaps são usados para aumentar a resolução para além das Luzes Direcionais. Para manter o alto desempenho a um custo razoável de memória, VSMs dividem o mapa de sombras em quadrados (ou páginas) com até 128x128 cada um. Páginas são controladas e renderizadas apenas conforme o necessário para sombrear pixels na tela com base numa análise do buffer de profundidade. As páginas são armazenadas em cache entre os quadros a menos que sejam invalidadas por objetos ou luzes móveis, aumentando mais o desempenho.
O Nanite não é compatível com muitas técnicas de sombreamento de Luz Estacionária, como pré-sombras e sombras por objeto (inserida). Apesar de algumas das partes mais dinâmicas do sombreamento de Luz Estacionária poderem funcionar — como Mapas de Sombras em Cascata perto do visualizador da câmera —, o Nanite e as Luzes Estacionárias com mapas de sombras convencionais não são compatíveis. Se você estiver usando o Nanite no seu projeto, é preciso usar Luzes Móveis ou usar Mapas de Sombras Virtuais.
Habilitando Mapas de Sombras Virtuais
Nas configurações do projeto, em Engine > Renderização na seção Sombras, você pode definir qual Método de Mapa de Sombras seu projeto oferece suporte, seja Mapas de Sombras Virtuais ou os Mapas de Sombras convencionais que foram usados em versões anteriores do Unreal Engine.
Os projetos existentes precisarão optar entre o uso desta configuração de projeto, ou a variável de console r.Shadow.Virtual.Enable. Novos projetos usam Mapas de Sombras Virtuais por padrão.
O que acontece com os métodos de sombreamento existentes quando os VSMs estão habilitados?
Quando os VSMs estiverem habilitados, substituirão uma variedade de métodos de sombras existentes na Unreal Engine:
Sombras estacionárias pré-computadas, inclusive Campo de Distância 2D e o fator de sombra "mapas de sombra"
Pré-sombras
Sombras inseridas/por objeto
Mapas de Sombras em Cascata (CSMs)
* Sombras dinâmicas móveis para luzes locais
Sombras totalmente incorporadas de Luzes Estáticas ainda funcionarão como antes (quando não usar o Lumen). Suas contribuições são totalmente representadas nos mapas de iluminação incorporados e não há nenhuma iluminação de tempo de execução avaliada. Luzes estacionárias usarão a contribuição de difusão indireta de qualquer mapa de iluminação incorporado, mas suas sombras e iluminação indireta são avaliadas dinamicamente (igual às Luzes Móveis) quando VSMs estiverem habilitados.
Sombras de Campo de Distância não são substituídas e podem ser usadas em conjunto com Mapas de Sombras Virtuais para luzes direcionais. Sombras de Campo de Distância substituem a geometria sem Nanite além da distância de sombreamento dinâmico de Luzes Móveis — defina em uma Luz Direcional usando a propriedade Mapas de Sombras em Cascata Luz Móvel de Distância de Sombra Dinâmica. Usar Sombras do Campo de Distância fornece uma ferramenta útil para reduzir os custos de tempo de execução em cenas complexas, como aquelas com muita folhagem que não é Nanite.
A geometria do Nanine sempre é renderizada para o Mapa de Sombras Virtual, seja qual for a distância, pois é a opção com melhor desempenho e fornece a qualidade mais alta. É possível fazer com que a geometria não Nanite se comporte da mesma forma que Nanite pela variável de console r.Shadow.Virtual.UseFarShadowCulling 0.
Luzes locais (Pontos e Holofotes) não são afetados, e a seleção de sombras de Campo de Distância para eles continua substituindo o método do mapa de sombras ativo.
Devido à precisão e alta resolução do VSM, a propriedade de tamanho do recurso Sombra de Contato do espaço da tela não é mais necessária para obter sombras de contato nítidas. Ainda assim, pode ter um valor ao ser usada para escolher sombras mais baratas dos objetos definidos para não serem renderizados e formar mapas de sombras, mas isso não é recomendável, pois a exatidão será menor do que a das sombras criadas pelo VSM.
Sombras com traçados de raios ainda têm preferência sobre VSMs, pois geralmente fornecem a solução de qualidade mais alta.
Sombras suaves com Traçado de Raios de Mapa de Sombras
Traçado de Raios de Mapas de Sombras (SMRT) é um algoritmo de amostragem usado com mapas de sombras virtuais para produzir sombras suaves mais plausíveis e endurecimento do contato. Objetos que projetam sombras mais longe terão que usar sombras mais suaves do que objetos lançando sombras mais perto para uma superfície receptora de sombras. Por exemplo, a malha ilustrada abaixo é alta e projeta sua sombra a uma longa distância. Sombras próximas da base são mas nítidas do que as distantes.
Métodos anteriores baseados na Filtragem mais Próxima por Porcentagem (PCF) iria desfocar demais e diminuir o impacto visual de sombras e geometria de alta resolução.
O algoritmo SMRT funciona disparando uma quantidade de raios na direção da fonte de luz. Mas, em vez de avaliar interseções com geometria — como faz o traçado de raios convencional —, um número de amostras ao longo do raio são projetadas e testadas em relação ao mapa de sombras virtual para obter sombreamento suave e endurecimento de contato. Raios de sombra são distribuídos com base na iluminação usando Raio de Origem nas luzes locais ou Ângulo de Origem nas luzes direcionais.
Luzes locais não têm Raio de Origem por padrão, em comparação com Luzes Direcionais que começam com um baixo Ângulo de Origem. Quando alguma opção estiver definida com um valor apropriado, SMRT produz sombreamento suave em tempo real com endurecimento de contato, como o exemplo abaixo usando um Ponto de Luz com Raio de Origem de 10.
Controlando a Qualidade da Sombra de Penumbra
A qualidade e a suavidade da sombra de penumbra são definidas pelas variáveis de console para as luzes locais e direcionais. Estão inclusas suas próprias configurações de dimensionamento, que geralmente são boas para a maioria das cenas.
O ruído na penumbra é influenciado pelo número de raios que estão sendo usados, e as luzes locais e direcionais usam oito raios por padrão quando a escalabilidade de Sombras é definida como Épica.
Use as variáveis de console r.Shadow.Virtual.SMRT.RayCountLocal e r.Shadow.Virtual.SMRT.RayCountDirectional para ajustar a quantidade de raios. Menos raios mostram ruído visível na penumbra. Definir a variável de console associada para 0 desabilita o SMRT e reverte para sombras únicas duras e simples.
Além disso, a quantidade de amostras de sombras obtidas na trajetória de cada raio pode ser definida para luzes direcionais e locais para controlar a suavidade máxima. Menos amostras de mapa de sombras são mais baratas de renderizar, mas limitam a suavidade da penumbra possível de ser alcançada pelas sombras da luz.
Para um controle mais apurado do que as configurações de escalabilidade de Sombra, e as variáveis de console r.Shadow.Virtual.SMRT.SamplesPerRayLocal e r.Shadow.Virtual.SMRT.SamplesPerRayDirectional para ajustar o número de amostras usadas. Usar valores entre 4 e 8 amostras funciona bem.
Arrastar o controle deslizante mostrará o que acontece quando uma Luz direcional com um Ângulo de origem de 5,0 usa Amostras de mapa de sombras de número 0, 2 e 8 (padrão).
Limitações do Traçado de Raios de Mapa de Sombras
Geralmente a qualidade do SMRT é boa com a configuração padrão, mas há limitações inerentes ao uso dos dados de uma única projeção de mapa de sombras em vez do teste em relação à geometria real.
Limites de tamanho da penumbra
A penumbra da sombra é fixa para luzes direcionais e locais para evitar divergência de amostras da origem dos raios que podem se tornar cada vez mais “curvados” em comparação com o teste ideal ao longo do próprio raio. Usar valores razoáveis para Raio de Origem nas luzes locais, e Ângulo de Origem nas Luzes Direcionais, evitará resultados extremos demais, limitando o alcance com que o raio possa divergir de várias maneiras. Valores muito elevados podem afetar o desempenho e causar distorções visuais nas penumbras das sombras à medida que a câmera se aproxima.
Luzes direcionais e locais podem usar as variáveis de console r.Shadow.Virtual.SMRT.MaxRayAngleFromLight e r.Shadow.Virtual.SMRT.RayLengthScaleDirectional para aumentar ou diminuir as extensões fixas.
Penumbra inconsistente
Já que o Mapa de Sombras Virtual armazena apenas a primeira camada de profundidade na qual interações simples excluem interseções com oclusores atrás da primeira, uma variedade de artefatos com luz vazando pode ocorrer nas sobreposições os oclusores. Esses tipos de vazamento de luz são solucionados usando uma heurística para preencher lacunas que extrapola as profundidades atrás do primeiro oclusor, com base nas profundidades vistas antes do ponto de oclusão.
Isso funciona bem para resolver vazamentos de iluminação, mas faz com que as penumbras nas superfícies paralelas com a luz encolham em tamanho. Atualmente não há um modo direto de cancelar esse efeito, exceto manter os tamanhos de penumbra razoáveis.
### Artefatos da penumbra
Por padrão, os Mapas de Sombras Virtuais garantem apenas que as amostras em torno da origem dos raios (o pixel do receptor) estarão presentes. Ao atravessar o raio, o algoritmo pode encontrar páginas não mapeadas em que não existem dados de sombra. Uma variedade de técnicas é usada para reduzir o impacto disso, inclusive a dilatação dos mapeamentos da página e vários fallbacks posicionados durante a iteração. Ainda assim, ainda pode haver artefatos ocasionais surgindo das páginas que faltam, principalmente ao redor das bordas da tela ao ampliar na penumbra suave. Esses artefatos se manifestarão como vazamentos de luz ruidosos nas áreas sombreadas. Como em outras limitações com VSMs, a maior parte dos problemas pode ser evitada mantendo razoáveis os tamanhos de penumbra das sombras e ampliando no ponto em que abrangem porções grandes da tela.
Clipmaps para luz direcional
Um único mapa de sombras virtual não proporciona resolução suficiente para abranger áreas grandes. Luzes direcionais usam uma estrutura de clipmap de alcances em expansão ao redor da câmera, com cada nível de clipmap tendo seu próprio VSM 16K. Cada nível de clipmap tem a mesma resolução, mas abrange o dobro do raio do anterior.
Por padrão, níveis de clipmap de 6 a 22 recebem tabelas de página de mapa de sombras virtual alocadas. Isso significa que as configurações padrão têm o clipmap mais detalhado abrangendo 64 cm (2^6 cm) a partir da posição da câmera e o clipmap mais amplo abrangendo cerca de 40 quilômetros (2^22 cm). O custo dos níveis de clipmap virtual é insignificante se nada estiver presente neles, então os valores padrão funcionam bem para abranger cenas muito largas com resolução razoavelmente alta perto da câmera.
O primeiro e o último níveis podem ser ajustados usando as variáveis de console r.Shadow.Virtual.Clipmap.FirstLevel e r.Shadow.Virtual.Clipmap.LastLevel.
A resolução alocada para um certo pixel é uma função da distância longe da origem do clipmap — a câmera. Isso é definido pela escalabilidade da Sombra com a variável de console r.Shadow.Virtual.ResolutionLodBiasDirectional. Um valor de 0 escolhe a resolução necessária com base na projeção de perspectiva da câmera.
Serrilhado projetivo — quando uma sombra é projetada numa superfície quase paralela com a direção da luz — ainda é possível mesmo em altas resoluções, mas pode ser reduzido ao polarizar a resolução. Como a polarização de Mip em texturas, diminuir o valor em -1 dobra a resolução das sombras com as desvantagens de desempenho associadas. O valor padrão de -1.5 no dimensionamento de Sombra Épica proporciona um equilíbrio razoável para muitas cenas.
Luzes locais
Holofotes usam um único VSM 16k com cadeia de mip em vez de clipmaps para manipular o Nível de detalhes de sombra. Similarmente, Luzes de Ponto usam um cubemap de VSMs 16k, um para cada face.
Luzes locais fornecem um aumento considerável na resolução comparado com mapas de sombras tradicionais. É possível ficar sem resolução virtual com luzes locais muito grandes, e é preciso ter cuidado para usar Luzes Direcionais onde for possível nesses casos.
Níveis de mip apropriados são escolhidos ao projetar o tamanho dos pixels da tela no espaço de mapa de sombras. Igual a luzes direcionais, é possível polarizar a resolução com as configurações de dimensionamento de sombras ou usando a variável de console r.Shadow.Virtual.ResolutionLodBiasLocal.
Controles de resolução por luz não estão disponíveis, mas podem ser incluídos numa versão futura.
Movendo luzes
As luzes estacionárias são amplamente armazenadas em cache e, como resultado, podem usar uma resolução muito maior do que as luzes móveis. Para levar em conta essa diferença entre luzes estacionárias e móveis, a iluminação móvel deve ter uma Tendência de LOD diferente da das luzes estacionárias. Quando uma luz para de se mover, ela faz uma transição gradual ao desvio original. Você pode controlar a tendência de LOD para luzes em movimento com a seguinte variável de console de escalabilidade:
r.Shadow.Virtual.ResolutionLodBiasLocalMovingr.Shadow.Virtual.ResolutionLodBiasDirectionalMoving
Superfícies translúcidas
O Mapa de Sombras Virtuais é compatível com filtro de sombra de alta qualidade para superfície translúcida com Substrate e legado caminho. Essa é uma funcionalidade global opcional que você pode habilitar com a variável de console r.Shadow.Virtual.TranslucentQuality. Esta variável de console controla a qualidade das sombras para Iluminável, superfície translúcida. Isso é aplicado em toda superfície translúcida e tem um alto impacto no desempenho. Configurações para r.Shadow.Virtual.TranslucentQuality:
Qualquer valor maior que 1: sombras de alta qualidade para Iluminável superfície translúcida.
0: (padrão) Normal Quality Shadows for Iluminável Translúcida Superfície.
Páginas Grosseiras
Análise de buffer de profundidade é usada como método primário para marcar páginas necessárias para renderizar. Há alguns sistemas que precisam amostrar sombras em locais mais arbitrários, como Neblina Volumétrica e transluscência renderizada frontalmente. A maioria dos sistemas só precisa de dados de sombra de baixa resolução que são filtrados e desfocados por outras estruturas de dados.
Para acomodar o sombreamento nestas situações, Páginas Grosseiras são marcadas para garantir que pelo menos dados de sombra de baixa resolução estejam disponíveis em todo o domínio para amostragem. Luzes locais simplesmente marcam a página de mip raiz, e Luzes direcionais podem marcar uma série de páginas em vários níveis de baixos detalhes para formar alguns clipmaps grosseiros. Dependendo da cena, páginas grosseiras podem causar problemas de desempenho. Isso é particularmente verdadeiro para geometria dinâmica sem o Nanite, já que estão renderizando efetivamente sombras de baixa resolução em grandes regiões de espaço, o que pode causar gargalos de drawcall.
É recomendável experimentar desabilitar a renderização de objetos sem o Nanite em páginas grosseiras usando a variável de console r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0.
Muitas cenas — principalmente aquelas que consistem principalmente em geometria do Nanite — não precisam objetos sem o Nanite projetando sombras na Névoa Volumétrica e coisas parecidas. Desabilitar isso pode proporcionar uma melhoria considerável de desempenho.
Páginas grosseiras de luz local podem ser desativadas com r.Shadow.Virtual.MarkCoarsePagesLocal, se não forem necessárias.
Páginas grosseiras de luz direcional podem ser desativadas com r.Shadow.Virtual.MarkCoarsePagesDirectional, ou o alcance dos níveis de clipmap em que as páginas grosseiras estão marcadas pode ser modificado com r.Shadow.Virtual.FirstCoarseLevel e r.Shadow.Virtual.LastCoarseLevel.
Numa versão futura, uma solução mais elegante seria uma em que alguns desses efeitos pudessem ser marcados para páginas localizadas direto com antecedência em vez das páginas grosseiras exageradamente conservadoras sendo usadas.
"Visualization"
Opções de visualização para Mapas de Sombras Virtuais são acessíveis na Janela de Visualização de Nível usando o menu suspenso Modos de Visualização e selecionando Mapa de Sombras Virtuais.
As opções de visualização incluem:
| Nome da visualizan | Descrição |
|---|---|
Máscara de sombra | A máscara de sombra final que é usada pelo sombreamento. |
Nível de clipmap/mip | O nível de clipmap escolhido (para luzes direcionais) ou mip (para Luzes Locais). |
Página virtual | Visualização do endereço da página virtual. |
Página em cache | Páginas armazenadas em cache são tingidas de verde, e páginas não armazenadas em cache em vermelho. As páginas em que apenas a página estática é armazenada em cache (dinamicamente fora de cache) são azuis. |
Por padrão, as visualizações de Mapa de Sombras Virtual exibem resultados para a Luz Direcional. Ao selecionar uma luz no Organizador, você poderá ver visualizações para a luz.
Você também poderá habilitar visualização usando o console (exceto em compilações de envio), o que é útil para criar perfil e depurar um jogo em tempo real Se alguma dessas opções estiver definida no editor, qualquer seleção de modo feita pela interface do usuário do editor será substituída.
| Nome da visualizan | Descrição |
|---|---|
| Quando a exibição do modo de visualização for definida para Mapa de Sombras Virtual por meio da Janela de Visualização de Nível ou comando de console, este comando especifica quais canais exibir. Use os nomes abaixo no lugar de "[modo]" para habilitar essa visualização. Cache e vpage são dois comuns usados para visualização e nenhum visualização vsm desabilitado.
|
| Habilita a visualização de Mapa de Sombras Virtuais quando um modo de visualização for especificado. |
| Escolha um layout para a visualização do Mapa de Sombras Virtual.
|
| Gera uma lista das luzes atuais com o Mapa de Sombras Virtuais para o console. Em algumas configurações de compilação Modo Criativo: construir / tempo de execução, os nomes das luzes podem ser diferentes dos nomes no editor. |
| Especifique uma luz pelo nome. São aceitas correspondências parciais ou completas. Para limpar a seleção de uma luz usando esta variável de console, especifique um nome de luz que não tenha um nome correspondente. Usar aspas duplas (") é uma forma aceitável de redefinir para nenhuma luz especificada. |
Habilitar modos de visualização tem um efeito pequeno, mas mensurável, no desempenho de Mapas de Sombras Virtuais. Verifique se a visualização foi desabilitada antes da criação de perfil do desempenho
Armazenamento em cache
Reutilizar páginas de mapa de sombra de quadros anteriores é a chave para manter alto desempenho com Mapas de Sombras Virtuais, principalmente em cenas complexas. O armazenamento em cache é habilitado por padrão, mas pode ser desabilitado para fins de depuração usando a variável de console r.Shadow.Virtual.Cache 0. Os Mapas de Sombras Virtuais respeitam a Distância de renderização do Nanite quando o cache está habilitado.
Já que as páginas são renderizadas apenas para pixels na tela, alterar a visibilidade da câmera devido a movimentos de desoclusão pode revelar as novas páginas que precisam ser renderizadas. Via de regra, contanto que o movimento da câmera seja relativamente suave, não é uma fonte considerável de páginas novas. Por outro lado, você deve ter cuidado com movimentos muito rápidos perto de objetos, desoclusões largas e cortes de câmera.
Na maioria das cenas, a maior fonte de trabalho vem de páginas de mapas de sombra que precisam ser redesenhadas devido a mudanças na geometria da cena. Fontes comuns de invalidações de página de cache incluem:
* Qualquer movimento ou rotação de luz invalidará todas as páginas em cache para essa luz
A geometria que projeta sombras em movimento ou que está sendo adicionada ou removida da cena invalidará todas as páginas que se sobrepõem à sua caixa delimitadora da perspectiva da luz.
Isso pode incluir objetos como propriedades de configuração de Blueprints em componentes primitivos que acionam invalidação de estado de renderização ainda que não se mova de verdade.
Geometria usando materiais que podem modificar as posições da malha, como Deslocamento da Posição Mundial (WPO) ou Deslocamento da Profundidade de Pixel (PDO)
Em instâncias nas quais você tem uma luz se movendo lentamente, ou uma Luz Direcional oscilante mudando a hora do dia, páginas VSM não serão armazenadas em cache. Em situações como mudanças de hora do dia, é recomendável quantizar as alterações em uma pequena quantidade para permitir que páginas em cache aproveitem alguns quadros, já que as diferenças minúsculas de direção não serão perceptíveis.
Numa versão futura, o armazenamento em cache deverá melhorar com a adição de um sistema de prioridades e reservas de atualização por quadro para permitir um controle mais apurado do custo de renderização de sombras. Por exemplo, permitir que a resolução de sombra diminua temporariamente em casos em que muitas páginas precisem de atualizações.
Gerenciando invalidações de cache
A melhor forma de diminuir invalidações de cache é primeiro visualizando as invalidações e, em seguida, encontrando e reduzindo o que as tiver causando. A Visualização da Página em Cache é um bom ponto de partida.
Nesta visualização, as páginas que forem totalmente armazenadas em cache serão sombreadas em verde. Páginas que forem novas ou invalidadas serão sombreadas em vermelho. À medida que move a câmera, você deve esperar ver pequenos anéis vermelhos perto das bordas da tele, contornos de clipmaps e geometria desoclusa. Com uma câmera estática, a maioria das novas páginas terão origem em invalidações de cache.
Se o armazenamento em cache estático separado estiver habilitado (ver abaixo), as páginas que estiverem parcialmente em cache (onde apenas a parte estática é válida) serão exibidas em azul.
Assim que as áreas problemáticas tiverem sido encontradas, geralmente também é útil ativar uma visualização dos limites do objeto que estão orientando as invalidações usando a variável de console r.Shadow.Virtual.Cache.DrawInvalidatingBounds 1. Inspecione esses objetos e contornos para verificar se realmente são os objetos esperados para invalidar sombras e que seus contornos são os mais justos possíveis. Já que todas as páginas que um objeto de invalidação poderia substituir dentro de seus contornos devem ser invalidadas, até os contornos moderadamente mais inflados combinados com ângulos de pouca luz poderiam causar muitas invalidações desnecessárias.
Invalidações que estão totalmente na sombra de objetos do Nanite podem ser ignorados, mas isso não é verdadeiro para objetos sem o Nanite. Por isso, é especialmente importante garantir que objetos grandes que projetam sombras — como construções — usem o Nanite.
Você pode disparar o Mapa de Sombras Virtuais invalidação on Nanite LOD streaming Changes com a variável de console r.Nanite.VSMInvalidateOnLODDelta. Clusters que não são transmitidos em LOD correspondente à invalidação computada de gatilhos de estimativa de LOD do Nanite, de modo que sejam renderizados novamente na transmissão. Esta funcionalidade é experimental. Não recomendamos enviar projetos com recursos experimentais, e esse recurso está sujeito a alterações.
Em cenas complexas, às vezes pode ser difícil indicar o que está causando invalidações mesmo com as visualizações. Outra ferramenta que pode ajudar é o modo de visualização Desenhar apenas geometria que causa invalidação VSM encontrado na janela de visualização de nível, em Mostrar > Visualizar.
Quando ativado, geometrias que não causarem invalidações de cache serão ocultas.
Devido aos detalhes de implementação, o modo **Desenhar apenas geometria que causa invalidação VSM** mostra ocasionalmente objetos não relacionados ao sombreamento (como efeitos visuais e de partículas) que passam por uma passagem de renderização separada e são desenhados na parte superior.
Estatísticas não são confiáveis ao usar esta visualização porque renderizar a cena principal de maneira diferente afeta quais páginas são mapeadas e invalidadas. É melhor começar com outros modos de visualização e usar este para conferir novamente.
Há um problema conhecido com os Componentes de Captura de Cena que podem causar a invalidação de todo o cache.
Você pode substituir o comportamento padrão da engine por invalidações de sombra pelo comportamento de invalidação de Cache de sombras da classe de enumeração per-primitiva. Isso é útil para evitar invalidações de estático deslocamento de posição no mundo (WPO). As opções incluem:
Auto: (padrão) invalida com base no material "Shift de posição no mundo" e nas alterações de transformação.
Sempre: Sempre invalidar sombras, pode ser usado para sinalizar uma primitiva que esteja usando algum método de animação desconhecido pelo sistema.
Rígido: Suprime invalidações que seriam geradas, por exemplo, pelo Deslocamento de posição no mundo.
Estático: Além do comportamento Rígido, também suprime as invalidações devido a alterações de transformação. Adicionar/remover ainda aciona invalidações. Se a primitiva for movida ou animada, o resultado visual ficará indefinido.
Folhagem e deformação sem Nanite
Geometria que pode ser deformada usando animação esquelética ou materiais usando Deslocamento de Posição de Mundo ou Deslocamento de Profundidade de Pixel sempre invalida páginas em cache em todos os quadros. Por definição, esses casos também devem ser sem o Nanite — que é mais caro — e, por isso, é extremamente importante assegurar que esse recursos são usados com cuidado e que os vínculos são mantidos sob controle.
Em alguns casos, como grama e às vezes folhagem, usar apenas Sombras de Contato é um substituto suficiente para mapas de sombras de alta resolução. Em casos nos quais sombras em alto detalhe são necessárias em primeiro plano, considere fazer o seguinte para mitigar o custo de desempenho:
Objetos sem o Nanite ainda respeitam as configurações de seleção de CPU de sombra regular, como
r.Shadow.RadiusThreshold. Use as opções para ajudar a controlar o custo de renderização desse objetos para Mapas de Sombras Virtuais.Em cenas com muitas folhagens, é altamente recomendável desabilitar objetos sem o Nanite em páginas grosseiras com
r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0. Ou considere desabilitar totalmente páginas grosseiras se não forem necessárias.Use LODs de Malha para alternar para materiais que não utilizam WPO/PDO a distâncias em que o efeito não é mais óbvio. Em alguns casos, poderá ser possível desabilitar a projeção de sombras dinâmicas para estes objetos distantes e depender totalmente das Sombras de Contato no espaço de tela.
Para Luzes Direcionais, há opções adicionais disponíveis:
Sombras de Campo de Distância substituem geometria sem Nanite fora da distância de Luz Móvel de Distância de Sombreamento Dinâmico definida pela seção Mapas de Sombras em Cascata da Luz. Alternar para Sombras de Campo de Distância para elementos sem Nanite a distância pode resultar num grande aumento de desempenho, já que esta geometria não tem dimensionamento de LOD de grão fino que o Nanite proporciona.
Armazenamento em cache estático separado
Este recurso é considerado experimental.
Muitas cenas consistem em uma grande quantidade de geometria estática que nunca se move, além de quantidades menores consideráveis de geometria dinâmica (ou móvel). Por padrão, isso significa que a geometria dinâmica relativamente barata invalida páginas que, em seguida, fazem com que a geometria estática cara seja renderizada outra vez, apenas para atualizar a porção dinâmica.
Para otimizar melhor nesses casos, um modo opcional de Armazenamento Estático Separado pode ser habilitado usando r.Shadow.Virtual.Cache.StaticSeparate 1. Esse modo duplica o tamanho da reserva de página física para que a geometria estática numa página determinada possa ser armazenada em cache separadamente da geometria dinâmica. Até quando a geometria se move, não é preciso redesenhar a geometria estática. Em vez disso, a página estática em cache pode ser composta em cima a um custo baixo. Em casos, como o projeto de amostra Valley of the Ancients, poderá haver uma otimização considerável de desempenho, pois o terreno estático é muito caro enquanto os elementos dinâmicos são relativamente baratos.
Enquanto utilizar este modo, é importante definir com precisão a Mobilidade dos Atores na cena. Em particular, se um ator que estiver definido para Mobilidade Estática se mover — ou até usar um material com Deslocamento de Posição de Mundo ou materiais similarmente incompatíveis —, as páginas em cache estáticas e dinâmicas serão invalidadas, resultando em sobrecarga para nenhum ganho. Em contrapartida, se uma parte considerável da geometria cara estiver definida para Mobilidade Móvel, poderá haver poucos benefícios em armazená-la em cache separadamente.
As estatísticas de Mapa de Sombras Virtual são uma boa maneira de obter uma visão geral de algo nível de como o armazenamento em cache estático está funcionando. Em particular, o número de páginas estáticas "invalidadas" deve ser próximo de 0. Achar as instâncias que estão invalidando o cache estático frequentemente e alterná-las para Móvel é uma maneira importante para garantir que o cache estático permaneça válido.
O Nanite inclui um modo de visualização avançado para ajudar a determinar a mobilidade do objeto no mundo, o que também é útil para Mapas de Sombras Virtuais.
Este modo de visualização pode ser habilitado de uma de duas maneiras:
Habilite as opções de visualização avançadas do Nanite com
r.Nanite.Visualize.Advanced 1e, em seguida, use a Janela de Visualização de Nível para selecionar o Modo de Exibição > Visualização do Nanite e escolha Mapa de Sombras Virtuais Estático na lista de opções de visualização.Como alternativa, você pode habilitar a visualização estática de mapa de sombras virtuais com o comando
r.Nanite.Visualize vsmstatic.
Otimização e criação de perfil da GPU
A Unreal Engine fornece ferramentas que ajudam você a verificar o desempenho nos seus projetos, e o GPU Profiler (ou ferramenta específica da plataforma) é um bom ponto de partida para solucionar e depurar problemas de desempenho.
Há dois buckets de desempenho principais em que os custos VSM aparecerão: Profundidades de Sombra e Projeção de Sombra (em Luzes). As compensações em cada uma de suas categorias são relativamente independentes uma da outra.
Saiba que os comandos usados para listar estatísticas, como gpu stat e contadores associados, podem fornecer tempos não confiáveis, principalmente se o desempenho do seu projeto estiver vinculado à CPU.
Profundidades de Sombra
A categoria de **Profundidades de Sombras** se refere ao custo de renderização de geometria em mapas de sombras.
RenderVirtualShadowMaps(Nanite) contém todas as renderizações da geometria do Nanite em VSMs. Todas as luzes direcionais são renderizadas num único passe do Nanite, e todas as luzes locais são realizadas num segundo passe.
RenderVirtualShadowMaps(Non-Nanite) manipula a renderização da geometria sem o Nanite. Cada luz visível tem um passe separado com draw calls individuais para vários objetos e instâncias, igual à renderização de mapas de sombras convencionais.
Atlas e Cubemap, com outros passes similares, seguidos dos passes VSM, estão renderizando mapas de sombras convencionais. Ainda é alguns poucos tipos de geometria que ainda são incompatíveis com o caminho de Mapas de Sombras Virtuais, seguindo o caminho antigo. Se não houver sombras de projeção de geometria incompatíveis, os passes não serão executados nem alocarão espaço para armazenamento de mapa de sombras. Esses passes e a sobrecarga associada podem ser desabilitados totalmente com a variável de console
r.Shadow.Virtual.ForceOnlyVirtualShadowMaps 1. Nesse caso, os tipos de geometria incompatíveis não projetarão sombras.
O custo do passe Profundidade de Sombra com VSMs está diretamente relacionado à quantidade de páginas de sombras que precisam ser renderizadas, além da quantidade de geometria que precisa ser renderizada nelas. A geometria sem o Nanite é muito mais cara para renderizar em VSMs do que a geometria com o Nanite. Por esse motivo, recomendamos habilitar o Nanite em todas as geometrias suportadas, incluindo a baixa contagem de polígonos malha. A única exceção são as funcionalidades ainda não suportadas pelo Geometria virtualizada do Nanite.
Entendendo o número de páginas que estão sendo desenhadas
Os atributos na tela para páginas VSM usadas podem dar uma ideia de quantas páginas estão sendo usadas e onde procurar para solucionar possíveis problemas.
Use as seguintes variáveis de console seguidas para habilitar atributos:
r.ShaderPrintEnable 1r.Shadow.Virtual.ShowStats 1(ou 2 para mostrar apenas as estatísticas da página)
| Nome do Atributo | Descrição |
|---|---|
Páginas Físicas | O número máximo de páginas físicas que os mapas de sombras virtuais podem usar. |
Alocado | O número total de páginas de mapa de sombras solicitadas pela visualização atual. Deve ser sempre menos do que o máximo de páginas, senão os arquivos podem ser corrompidos. (Veja a seção Problemas e limitações abaixo.) |
Limpo | O número de páginas novas que foram removidas no quadro atual. |
Em cache | A quantidade de páginas que já estão no cache de página do mapa de sombras virtuais e que não precisam ser renderizadas no quadro atual. Páginas em cache tem custo muito baixo e praticamente não afetarão o desempenho. Quando o armazenamento em cache estático separado está habilitado, ele é dividido ainda mais por Páginas Estáticas em cache e Páginas Dinâmicas em cache. |
Anulado | O número de páginas em cache que foram invalidadas por geometria dinâmica no quadro anterior. Essas páginas precisam ser renderizadas novamente porque algo que as cobre se moveu. Ao usar armazenamento em cache estático separado, o número de invalidações de páginas estáticas deve ser idealmente zero ou perto disso. Se números grandes de páginas estáticas estiverem sendo invalidadas, os atores que causarem as invalidações devem ser alterados para Móvel. |
Mesclado | Quando o armazenamento em cache estático separado está habilitado, este é o número de páginas em que as páginas dinâmicas e estáticas foram mescladas (devido a uma ou outra não serem armazenadas em cache). |
As contagens de páginas totais são uma função do número médio de luzes que afetam cada pixel da tela. Elas podem ser reduzidas ao diminuir a resolução da tela, resolução de sombra (usando as variáveis de console para polarização LOD de resolução), extensões de luz, ou a quantidade de luzes que projetam sombras.
O baixo desempenho nas profundidades de sombra geralmente é associado ao algo número de páginas sendo usadas e muita invalidação dinâmica acontecendo, resultando em armazenamento em cache ruim de VSMs. Consulte a seção Armazenamento em Cache para obter mais detalhes sobre diagnóstico e redução de invalidações de cache.
Melhorando o desempenho sem o Nanite
Além de melhorar o armazenamento em cache, há várias maneiras de melhorar o desempenho de renderização de sombras sem o Nanite.
Considere o seguinte para melhorar o desempenho de objetos sem o Nanite:
Habilite o Nanite no máximo de geometrias possível para o seu projeto.
A geometria do Nanite é renderizada com muito mais eficiência em Mapas de Sombras Virtuais e deve receber preferência em todos os casos aplicáveis, independentemente das contagens de polígonos.
A geometria do Nanite pode obstruir a geometria sem o Nanite e evitar invalidações de cache espúrias. Então, os únicos objetos sem o Nanite devem ser aqueles que não são compatíveis com o próprio Nanite, como objetos deformados (malhas esfoladas) ou materiais que usam o Deslocamento de Posição de Mundo (WPO) e Deslocamento de Profundidade de Pixel (PDO).
Objetos sem o Nanite devem ter configuração de hierarquias LOD de Malha completas.
É importante que as malhas não Nanite tenham configurações de LODs, caso contrário, elas se tornarão extremamente caras para renderizar em páginas pequenas.
Quando possível, é aconselhável trocar para malhas sem deformação (nenhum material de WPO/PDO) fora de uma distância em que o efeito é óbvio.
Variáveis de console de seleção de CPU ainda são úteis para malhas sem o Nanite serem renderizadas em Mapas de Sombras Virtuais
Ajuste os valores de seleção de CPU na renderização de objetos sem o Nanite em Mapas de Sombras Virtuais com a variável de console
r.Shadow.RadiusThreshold. Pode ser útil controlar o custo de pequenos objetos na distância.
Uso de sombras de campo de distância para sombreamento distante de objetos não Nanite
Para luzes direcionais, geralmente é necessário mudar para Sombras de Campo de Distância além de um certo alcance, o mesmo que Mapas de Sombras em Cascata. Com Mapas de Sombras Virtuais, apenas a geometria sem o Nanite trocará para o uso de Sombras de Campo de Distância enquanto a geometria do Nanite continua a ter sombras totalmente detalhadas.
Desabilitar a geometria sem o Nanite em Páginas Grosseiras pode aumentar o desempenho
Desabilitar a geometria sem o Nanite em páginas grosseiras geralmente pode conceder um ganho enorme de desempenho, já que a geometria sem o Nanite costuma não ter eficiência para renderizar em páginas maiores.
As estatísticas de Mapas de Sombras Virtuais podem fornecer informações sobre contagem de instâncias sem o Nanite:
| Nome do Atributo | Descrição |
|---|---|
Total | Número total de entradas de instâncias sem o Nanite para a seleção de GPU. Instâncias são selecionadas separadamente para cada nível de mip/clipmap de mapa de sombras virtuais. Por exemplo, uma única instância de Malha Estática pode resultar em 48 instâncias (8 níveis de mip * 6 faces de cubemap) para cada luz de ponto que for interceptada, 17 instâncias para cada Luz Direcional (na configuração padrão, há 17 níveis de clipmap) e assim por diante. |
Drawn | Quantidade de instâncias desenhadas atualmente em todos os mapas de sombras virtuais após a seleção. |
HZB Culled | Quantidade de instâncias removidas devido à obstrução (pela geometria Nanite) da perspectiva da luz. |
Page máscara Culled | Quantidade de instâncias removidas por não sobrepor nenhuma página necessária. Isso, por exemplo, representa Malhas Estáticas que são descartadas ao serem desenhadas em áreas já armazenadas em cache. |
Empty Rect Culled | Quantidade de instâncias removidas por não sobrepor nenhuma página necessária. Por exemplo, isso representa Malhas Estáticas que são descartadas ao serem desenhadas em áreas já armazenadas em cache. |
Seleção de Frustum | Número de instâncias que estavam fora do tronco de visualização. |
Projeção de sombras
A categoria Projeção de Sombras é o custo de fazer amostragem de mapas de sombras usando Traçado de Raios de Mapas de Sombras. Esses passes estão localizados em Luzes | DirectLighting | UnbatchedLights e haverá tipicamente um passe de projeção VSM por luz associada. O passe mais caro geralmente é o loop principal SMRT em VirtualShadowMapProjection. O resto deve ter um custo relativamente baixo.
Se o passe de projeção estiver rotulado como RayCount:Static em vez de RayCount:Adaptive, um caminho lento está sendo tomado.
O passe de projeção VSM descrito nesta seção é diferente da Projeção de Um Passe descrita na próxima seção.
A projeção de sombra é puramente uma função do número total de amostras de mapas de sombras que estão sendo tomadas na tela, e o desempenho não depende do número de páginas ou armazenamento em cache.
Quando SMRT estiver sendo usado, passa a ser:
Média de luzes por pixel
Quanto mais luzes tocando porções largas da tela, mais cara a renderização será. Luzes cobrindo pequenos números de pixels na tela são mais baratas, mesmo que ainda há custos fixos por luz.
É preciso ter cuidado para evitar que a maioria dos pixels na tela seja ocupada por várias luzes grandes.
Raios por pixel
A suavidade visível das sombras afeta o desempenho devido à contagem de raios adaptativa. Tente reduzir o Raio de Origem de luzes locais ou Ângulo de Origem de Luzes Direcionais antes de reduzir as contagens de amostras e de raios.
Amostras por raio
Essas configurações são definidas pela configuração de escalabilidade de Sombra, mas podem ser ajustadas ainda mais, se necessário. Consulte a seção de Traçado de Raios do Mapa de Sombras desta página para obter mais detalhes.
Geralmente, os custos de projeção de sombras são bem mais fáceis de controlar (compensação com qualidade e barulho) do que custos de profundidade de sombras.
Projeção de um passe
Este recurso é considerado experimental. Os nomes das variáveis de console nesta seção provavelmente mudarão.
Ainda que luzes menores têm um custo mais baixo, ainda têm algumas sobrecargas de passe fixo. Isso será tratado com o desenvolvimento de uma solução de projeção de sombra de passe único, na qual a maioria das luzes locais numa cena podem avaliar efetivamente seu sombreamento num passe. A contribuição sombreada dessas luzes poderá ser aplicada totalmente usando sombreamento clusterizado.
Este caminho é habilitado usando as variáveis de console r.UseClusteredDeferredShading 1 e r.Shadow.Virtual.OnePassProjection 1. Para cenas com muitas luzes locais pequenas, isso pode resultar em melhorias consideráveis no desempenho.
O uso de certos recursos de luz impedirá a luz de ser armazenada em lote mesmo quando a Projeção de Um Passe estiver habilitada:
Perfis de textura
Funções da Luz
Canais de iluminação
Luzes Retangulares
Luzes direcionais (não há benefício em armazená-las em lote, pois cobrem a tela inteira)
Nas capturas abaixo, a esquerda mostra um passe de projeção de sombra acontecendo por luz em comparação com a projeção do passe do lado direito.
Clique na imagem para ampliar.
No caminho padrão à esquerda, cada luz local é acumulada uma por uma com vários passes por luz. Isso é ineficiente para luzes pequenas que abrangem uma pequena área na tela.
No novo caminho à direita, todas as luzes locais sombreadas são armazenadas em lotes juntas no único passe de sombreamento clusterizado (BatchedLights). A Luz Direcional ainda é feita num passe separado, abrangendo a tela inteira e, por isso, armazená-la em lotes não é benéfico.
Cada luz local ainda é injetada no volume de transluscência separadamente. Isso não é um problema tão grande para o desempenho tanto quanto é para a projeção, mas provavelmente serão armazenados em lote juntos no futuro.
Quando a Projeção de Um Passe está habilitada, é possível limitar o número de luzes sombreadas que são totalmente filtradas por pixel ajustando r.Shadow.Virtual.OnePassProjection.MaxLightsPerPixel do padrão de 16. Isso é útil para controlar o desempenho e pode economizar uma pequena quantidade de memória de gráficos transitórios.
Se houver mais luzes sombreadas do que o máximo em um dado pixel (ou, na prática, um ladrilho de sombreamento deferido), luzes adicionais serão sombreadas usando uma pesquisa de sombra dura única e barata. Isso pode causar descontinuidades visuais se o valor for definido muito agressivamente, mas em geral é melhor do que desativar as sombras por completo para luzes que excederem a contagem.
Este passe ainda está em desenvolvimento e não está habilitado por padrão. A condição primária é, nos casos em que a luz local tiver um mapa de sombras virtual e um mapa de sombras clássico (devido a algum tipo de geometria incompatível na cena), este será ignorado pelas Projeções de Um Passe, fazendo com que as sombras desapareçam.
Se você já estiver usando r.Shadow.Virtual.ForceOnlyVirtualShadowMaps, deverá ser seguro também habilitar a Projeção de Um Passe. Assim que as limitações atuais forem tratadas, provavelmente este caminho será o padrão.
Plataformas compatíveis
No momento, Mapas de Sombras Virtuais são compatíveis com PlayStation 5, Xbox Series S|X e PCs com placas de vídeo que atendem a essas especificações, usando os drivers mais recentes com DirectX 12:
NVIDIA: cartões da geração Maxwell ou mais recentes.
AMD: cartões da geração GCN ou mais recentes.
Todas as versões mais recentes do Windows 10 (mais recentes que a versão 1909.1350) e do Windows 11 com suporte para DirectX 12 Agility SDK são compatíveis.
Windows 10 versão 1909 — O número da revisão deve exceder ou ser igual a 0.1350.
Windows 10 versão 2004 e 20H2 — O número da revisão deve exceder ou ser igual a 0.789.
DirectX 12 (com atômicos do Shader Model 6.6) ou Vulkan (VK_KHR_shader_atomic_int64)
Apple Silicon M2 ou mais recente.
Linux com NVIDIA GeForce 2080 ou mais recente.
Drivers de vídeo mais recentes
Para obter mais informações sobre as especificações de hardware e software recomendadas pela Epic Games, consulte Especificações de hardware e software.
Problemas e limitações
Mapas de Sombras Virtuais ainda estão sendo desenvolvidos. Há diversos problemas e limitações conhecidas para usá-las atualmente, que estão sendo tratados por enquanto em desktops de topo de linha e consoles da próxima geração.
Desempenho de várias luzes
O desempenho nas cenas com poucas luzes locais ainda é um trabalho em andamento. Por enquanto, a melhor estratégia é habilitar a projeção de passagem única e ter muito cuidado com as invalidações para manter o máximo possível de páginas em cache. Várias luzes locais funcionarão bem melhor com a geometria do Nanite do que com a geometria sem o Nanite, então selecionar ou desabilitar agressivamente a projeção de sombras na geometria se o Nanite a distância pode ajudar muito. Em alguns casos, talvez seja recomendável desabilitar totalmente a projeção de sombras dinâmicas em luzes distantes e depender apenas do espaço da tela Contact Shadows.
Futuramente, controles melhores estarão disponíveis para realizar compensações algorítmicas e de qualidade, bem como atualizações de limitação de processamento nessas situações.
Geometria com baixa contagem de polígonos
Geometria com baixa contagem de polígonos, alta curvatura e normais suaves podem exibir artefatos. Isso é conhecido como "problema no terminador de sombras." Também ocorre no traçado de raios e outra consultas de visibilidade altamente precisas. O problema é causado pela incompatibilidade entre a geometria real com baixa contagem de polígonos e as normais de sombreamento "suaves". Na área perto do terminador, algumas dessas faces estão geometricamente na sombra, mas as normais de sombreamento não geométrico estão voltadas um pouco para a luz. É normal lidar com este artefato com polarização baseada na normal para a pesquisa de sombras. Este artefato específico pode ser mais do que perceptível com Mapas de Sombras Virtuais, pois são definidos por padrão para fornecer sombras altamente detalhadas da geometria do Nanite.
A melhor maneira de tratar isso é aumentar a contagem de polígonos nestes objetos/regiões. Limitar a divergência entre as normais de sombreamento e geométricas diminui ou elimina esses artefatos sem afetar negativamente a qualidade de sombra em outros locais. Com o Nanite, adicionando mais polígonos é direto e geralmente barato. Se os objetos ofensores não puderem usar o Nanite, adicionar um nível de detalhe mais alto (LOD) geralmente também funciona bem, pois os artefatos costuram ser visíveis quando objetos estiverem perto da câmera.
Se não for possível adicionar mais geometria, a polarização normal do Mapa de Sombras Virtuais pode ser aumentada usando r.Shadow.Virtual.NormalBias (padrão 0,5). Observe que isso deve ser considerado apenas quando ajustes de conteúdo não forem possíveis, já que afetarão negativamente a qualidade das sombras na cena, além de áreas altamente detalhadas.
Nos exemplos abaixo, os artefatos estão visíveis numa esfera com baixa contagem de polígono perto da câmera com geometria altamente detalhada no plano de fundo. Adicionar polígonos à esfera melhora o artefato sem afetar negativamente a paisagem detalhada no plano de fundo.
Ajustar a polarização também melhora os artefatos, mas detalhes de alto nível são visivelmente perdidos na geometria do plano de fundo.
Realidade virtual
A realidade virtual ainda não é totalmente compatível com Mapas de Sombras Virtuais. Provavelmente serão artefatos com Luzes Direcionais no olho direito.
Tela dividida
A tela dividida recebeu testagem mínima e pode apresentar baixo desempenho.
Estouro do Pool de Páginas Físicas
Com Mapas de Sombras Virtuais, todos os dados das sombras na cena para todas as luzes são restaurados em um único pool grande de texturas. O tamanho padrão do pool é afetado pela configuração de escalabilidade de Sombra, mas pode ser necessário ajustá-lo em cenas com muitas luzes usando sombras de alta resolução.
Por outro lado, talvez sejas necessários ajustes em hardwares com poucos recursos para economizar memória de vídeo.
O tamanho do pool de páginas pode ser ajustado usando r.Shadow.Virtual.MaxPhysicalPages. Habilitar os atributos de Mapa de Sombras Virtuais com r.ShaderPrintEnable 1 e r.Shadow.Virtual.ShowStats 2, sucessivamente, exibirá estatísticas sobre o uso do pool de páginas atual.
Se o número de Páginas exceder o Máx. de Páginas, ocorrerá corrupção, que às vezes se manifesta visualmente como um padrão de tabuleiro de xadrez ou sombras corrompidas ou ausentes. Se houver estouro no pool de páginas de sombras, um aviso será exibido na tela e no log.
Se isso acontecer, aumente tamanho do pool de páginas ou diminua a resolução de sombra ou a quantidade de luzes projetadas de mapa de sombra virtual.
Captura de cena
Em alguns casos, componentes de Captura de Cena podem invalidar todo o cache de Mapa de Sombras Virtual. Os sintomas disso geralmente se manifestam como as Invalidações estarem baixas nas estatísticas de Mapa de Sombras Virtuais, bem como as páginas em cache também estarem baixas (até zero algumas vezes) e a visualização de Página em Cache ser uniformemente vermelha.
Se isso acontecer, tente ocultar/remover atores de Captura de Cena na cena para verificar se eles são a causa do problema.
Atualmente não há solução alternativa, exceto desabilitar a Captura de Cena quando isso ocorrer.
Materiais
Apenas materiais de superfície simples são compatíveis. Transmissão e perfil de subsuperfície ainda não foram implementados. Se estiverem sendo usados por um material, este não será sombreado como se fossem opacos.
Resolução da Sombra
Mapas de Sombras Virtuais fornecem resolução consideravelmente mais altas em comparação com mapas de sombras convencionais, mas ângulos de luz superficial (ou serrilhado projetivo) e luzes locais muito grandes podem esgotar a resolução virtual disponível. Isso poderá se apresentar como sombras parecidas com caixas e problemas de polarização dependendo da superfície da geometria.
Clipmaps de luz direcional são bem menos suscetíveis a ficar sem resolução, mas campos de visão de câmera estreitos também podem acabar esgotando-os.
Não existe solução simples para resolver problemas de serrilhado projetivo com mapas de sombras. Mesmo com mapas de sombras, é preciso ter algum cuidado para evitar os piores casos e equilibrar resolução com desempenho.
Avisos de verificação de mapa
Mapas de Sombras Virtuais causam alguns alertas de verificação de mapa imprecisos:
A mensagem A iluminação precisa ser recompilada não aparece quando Mapas de Sombras Virtuais estão habilitados, mesmo que a iluminação possa realmente precisar ser recompilada quando os recursos de Reflexos e Iluminação Global do Lumen não estiverem sendo usados. Apesar de a iluminação direta estacionária ser dinâmica com Mapas de Sombras Virtuais habilitados, a iluminação indireta estacionária ainda está sendo incorporada.
Avisos sobre pré-sombras podem ser ignorados, pois não são relevantes ao usar Mapas de Sombras Virtuais.