환경설정
기본적으로 언리얼 엔진은 원근 투영을 사용합니다. 그러나 이 투영 모델은 넓은 FOV(필드 오브 뷰)로 작업할 때 지오메트리의 왜곡을 발생시킵니다. 예를 들어, 아래와 같이 FOV = 120에서 스피어와 같은 물체를 볼 때, 원근 투영으로 인한 왜곡이 매우 두드러지게 나타납니다.
따라서 언리얼 엔진에서는 파니니 투영을 사용하여 이 문제를 해결할 수 있는 포스트 프로세싱 패스를 옵션으로 제공합니다. 이 포스트 프로세싱의 아이디어는 원근 투영 대신 파니니 투영을 사용하여 렌더링된 픽셀을 있어야 할 위치에 옮겨 놓는 것입니다. 이렇게 설정하려면
r.LensDistortion.Panini.D > 0을 설정하기만 하면 됩니다.
. 이 포스트 프로세스 이펙트는 업스케일링 패스에서 이루어집니다. 즉, 이 패스가 사용되는 경우는 r.ScreenPercentage != 100 또는
r.LensDistortion.Panini.D > 0을 설정하기만 하면 됩니다.
. 이 파라미터에 대한 자세한 내용은 이 페이지 하단에 언급된 원본 연구 논문을 직접 참조할 수 있습니다.
r.LensDistortion.Panini.D > 0은 이 이펙트를 직접적으로 강조합니다. 그러나 이 파라미터만 사용할 수 있는 것은 아니며, 논문의 하드 압축과 함께 r.LensDistortion.Panini.S lerp를 사용할 수도 있습니다. 일부 스피어가 여전히 모서리에서 가려져 보이는 경우 이 파라미터를 미세조정할 수도 있습니다. 하지만 r.LensDistortion.Panini.S <0의 경우 모서리에 렌더링되지 않은 검은색 픽셀이 표시되기 시작합니다.
이 이펙트의 작동 원리를 더 자세히 이해하려면 r.LensDistortion.ScreenFit을 수정할 수도 있습니다. 한 가지 염두에 두어야 할 점은 투시 투영된 픽셀 중 일부가 화면 상단과 하단 부근에서 표시되지 않는다는 점입니다.
직선
파니니 투영은 선에 대해 몇 가지 보장을 제공합니다. 첫째, r.LensDistortion.Panini.D 및 r.LensDistortion.Panini.S에 관계없이 수직선이 직선을 유지하도록 보장됩니다. 둘째, 화면 중앙을 통과하는 선도 r.LensDistortion.Panini.D에 관계없이 직선을 유지하도록 보장됩니다. 단, r.LensDistortion.Panini.S = 0인 경우에만 해당됩니다. 이 수학적 성질은 FPS(1인칭 시점 슈팅 게임)에서 매우 이상적입니다. 왜냐하면 파니니 투영을 적용한 무기가 화면 중앙을 향해 있을 때, 그 무기의 선들이 중앙을 향해 계속 직선으로 유지되기 때문입니다.
중앙 흐림 현상
이 포스트 프로세싱 이펙트의 한 가지 문제는
r.LensDistortion.Panini.D가 증가함에 따라
화면 중앙에 블러 현상이 발생한다는 것입니다. 파니니 투영은 특별히 샤프닝 필터를 활용하여 이 현상을 방지하기 위해 업스케일 패스에서 구현되었습니다. 그러나 이 방법만으로는 이 문제를 해결하기에 충분하지 않을 수 있습니다. 따라서 r.ScreenPercentage를 늘려 이 문제를 해결해야 하지만, 그렇게 하면 그려야 할 픽셀 수를 증가시켜 전체 렌더링 퍼포먼스 비용이 높아지게 됩니다. 따라서 더 높은 스크린 퍼센티지를 지원하지 않는 하드웨어에서는
r.LensDistortion.Panini.D가 증가함에 따라
더 낮은 값을 선택하고 업스케일 패스의 샤프닝 필터만으로 이 이펙트를 유지하는 것이 더 나은 방법이 될 수 있습니다.
파니니 투영을 사용하는 또 다른 방법은 머티리얼 함수에서 월드 포지션 오프셋을 출력하여 머티리얼의 월드 포지션 오프셋 입력 핀에 연결하는 것입니다. 실제로 언리얼 토너먼트에서는 원근 투영 왜곡을 수정하기 위해 무기를 다른 FOV에서 렌더링하는 대신 이 방법을 사용합니다. 자세한 내용은 UT의 GitHub 저장소를 살펴보는 것이 좋습니다.