Configuração
Por padrão, o Unreal Engine usa uma projeção em perspectiva. Entretanto, esse modelo de projeção cria distorções da geometria ao trabalhar com um amplo campo de visão. Isso é muito perceptível, por exemplo, aqui com uma esfera e um CDV = 120.
Portanto, o Unreal Engine fornece uma passagem de pós-processamento opcional que tenta corrigir esse problema usando uma projeção Panini. A ideia desse pós-processamento é deslocar o pixel renderizado no local onde ele deveria estar, usando a projeção panini em vez da projeção em perspectiva. Para configurar, a única coisa que você precisa fazer a configuração
r.LensDistortion.Panini.D > 0
. Esse efeito de pós-processamento é feito na passagem de Upscaling. Isso significa que esta passagem será usada se r.ScreenPercentage != 100 ou
r.LensDistortion.Panini.D > 0
. Para melhor compreensão deste parâmetro, você pode consultar diretamente o artigo de pesquisa original referenciado no final desta página.
r.LensDistortion.Panini.D > 0 enfatiza diretamente o efeito. Entretanto, este não é o único parâmetro, r.LensDistortion.Panini.S lerp com a compressão forte do papel. E se alguma esfera ainda parecer eclipsada nos cantos, esse parâmetro também pode ser ajustado. Entretanto, para r.LensDistortion.Panini.S < 0, ele começa a mostrar pixels pretos não renderizados nos cantos.
Para entender melhor como esse efeito funciona, r.LensDistortion.ScreenFit também pode ser modificado. Uma coisa a ter em mente é que alguns dos pixels projetados em perspectiva não são exibidos na tela, perto das partes superior e inferior.
Linhas retas
A projeção do panini traz diversas garantias nas linhas. Primeiramente, as linhas verticais devem permanecer retas para qualquer r.LensDistortion.Panini.D e r.LensDistortion.Panini.S. Em segundo lugar, as linhas que passam pelo centro da tela também têm garantia de permanecer retas para qualquer r.LensDistortion.Panini.D, mas r.LensDistortion.Panini.S = 0. Essa propriedade matemática é, portanto, ideal em jogos de tiro em primeira pessoa porque a projeção panini de uma arma direcionada para o centro da tela manterá suas linhas retas em direção ao centro.
Desfoque central
Um problema desse efeito de pós-processamento é que um fenômeno de desfoque no centro da tela ocorre conforme
r.LensDistortion.Panini.D
aumenta. A projeção panini foi implementada na passagem de alta escala especialmente para aproveitar o filtro de nitidez para lutar contra esse fenômeno. No entanto, isso pode rapidamente deixar de ser suficiente para resolver o problema. Portanto, talvez seja necessário aumentar r.ScreenPercentage para ajudar a corrigir esse problema, mas isso terá um custo em todo o seu desempenho de renderização, pois aumentará o número de pixels a serem desenhados. Você pode considerar escolher uma negociação melhor, escolhendo então um valor menor de
r.LensDistortion.Panini.D
em hardware que não pode arcar com uma porcentagem de tela maior e ainda ter esse efeito confiando apenas no filtro de nitidez do passe de alta resolução.
Outra maneira de usar a projeção panini é por meio de uma função Material que emite um deslocamento da posição mundial a ser conectado ao pino de entrada de deslocamento da posição mundial do material. Na verdade, é isso que o Unreal Tournament usa em vez de renderizar a arma em um campo de visão diferente para corrigir as distorções de projeção de perspectiva. Talvez você queira dar uma olhada no repositório github da UT.