Configuración
De forma predeterminada, Unreal Engine usa una proyección en perspectiva. Sin embargo, este modelo de proyección crea distorsiones de la geometría cuando se trabaja con un campo de visión amplio. Se nota mucho, por ejemplo, aquí con una esfera y un FOV de 120.
Por lo tanto, Unreal Engine proporciona un pase de posprocesamiento opcional que intenta solucionar este problema mediante una proyección Panini. La idea de este posprocesamiento es desplazar el píxel renderizado a la posición correcta usando la proyección Panini en lugar de la proyección en perspectiva. Para la configuración, lo único que tienes que hacer es configurar
r.LensDistortion.Panini.D > 0
. Este efecto de posprocesamiento se realiza en el pase de mejora de escala. Significa que este pase se usará si r.ScreenPercentage != 100 o
r.LensDistortion.Panini.D > 0
. Si quieres saber más sobre este parámetro, puedes consultar el artículo de investigación original al que se hace referencia al final de esta página.
r.LensDistortion.Panini.D > 0 enfatiza directamente el efecto. Sin embargo, no es el único parámetro, r.LensDistortion.Panini.S lerp con la compresión fuerte del papel. Y si alguna esfera sigue apareciendo eclipsada en las esquinas, este parámetro también puede modificarse. Sin embargo, para r.LensDistortion.Panini.S < 0, empieza a mostrar píxeles negros sin renderizar en las esquinas.
Para entender más cómo funciona este efecto, también puedes modificar r.LensDistortion.ScreenFit. Una cosa que hay que tener en cuenta es que algunos de los píxeles proyectados en perspectiva al final no se muestran en la pantalla cerca de la parte superior y la parte inferior de la pantalla.
Líneas rectas
La proyección Panini ofrece varias garantías sobre las líneas. En primer lugar, se garantiza que las líneas verticales permanezcan rectas para cualquier r.LensDistortion.Panini.D y r.LensDistortion.Panini.S. En segundo lugar, se garantiza que las líneas que pasan por el centro de la pantalla permanezcan rectas también para cualquier r.LensDistortion.Panini.D, pero r.LensDistortion.Panini.S = 0. Por lo tanto, esta propiedad matemática es ideal en los Shooters en primera persona, ya que la proyección Panini de un arma dirigida hacia el centro de la pantalla mantendrá sus líneas rectas hacia el centro.
Desenfoque del centro
Un problema de este efecto de posprocesamiento es que aparece un fenómeno de desenfoque en el centro de la pantalla a medida que
r.LensDistortion.Panini.D
aumenta. La proyección Panini se ha implementado en el pase de mejora de escala especialmente para aprovechar el filtro de nitidez y luchar contra este fenómeno. Sin embargo, es posible que rápidamente deje de ser suficiente para solucionar este problema. Por lo tanto, puede que tengas que aumentar r.ScreenPercentage para ayudar a solucionar ese problema, pero eso tendrá un coste en todo el rendimiento de renderizado, ya que aumentará el número de píxeles que habrá que dibujar. Puedes optar por un equilibrio mejor seleccionando un valor más bajo de
r.LensDistortion.Panini.D
en hardware que no puede permitirse un mayor porcentaje de pantalla y seguir teniendo este efecto dependiendo únicamente del filtro de nitidez del pase de mejora de escala.
Otra forma de usar la proyección Panini es mediante una función de material que genera un desfase de la posición del mundo que se conecta al pin de entrada de desfase de la posición del mundo del material. Esto es lo que usa Unreal Tournament en lugar de renderizar el arma con un FOV diferente para corregir las distorsiones de la proyección en perspectiva. Puedes echarle un vistazo en el repositorio de GitHub de UT.