결과물

일반적으로 프레임을 120 정도로 확보했습니다. 하지만, CCTV를 켜는 경우 프레임이 다시 60까지 드랍돼서 CCTV의 최적화 방법을 연구해봐야 할 것 같습니다.
구현내용
1. vr.PixelDensity 조정
VR 헤드셋에서 렌더링할 때 실제 해상도 대비 렌더 타겟의 배율을 조정하는 콘솔 명령어입니다. 기본 값이 1.0으로 설정되어 있는데, 0.8로 설정해주시면 다운 스케일이 발생하면서 프레임을 확보할 수 있습니다.

2. Foveation 활성화
Foveation은 인간의 눈 구조에서 착안한 VR 렌더링 최적화 기술입니다. 사람의 눈은 중심부는 선명하게 보이지만, 주변부는 흐릿하게 인식한다는 점을 활용한 기술인데요. 중심부는 높은 해상도로 렌더링하고, 주변부는 낮은 해상도로 렌더링함으로써 프레임을 확보하는 기술입니다.
Foveation에는 2종류가 있습니다. Fixed 방식과 EyeTracking 방식입니다. Fixed는 VR 기기를 착용하고 사람이 어디를 쳐다보는지에 관계없이 중심부를 고정하는 방식이구요. EyeTracking은 사람의 시선을 추적해서 실제 눈이 보는 곳을 중심부로 설정하는 방식입니다. 아쉽게도 EyeTracking은 Meta Quest Pro 같은 좋은 하드웨어만 지원해준다고 해서, 저는 어쩔 수 없이 Fixed를 활용하기로 했습니다.

3. Forward Shading 활성화
언리얼 엔진의 기본 렌더링 방식은 Deferred Shading입니다. G-Buffer에 정보를 저장한 뒤 나중에 계산하는 방식으로, 메모리 대역폭을 많이 잡아먹습니다. VR에서는 Forward Shading 방식을 사용함으로 메모리 대역폭을 절약합니다. Forward Shading은 G-Buffer에 저장없이 라이팅을 계산하는 시점에 바로 렌더링을 합니다. 추가로, Forward Shading을 사용하면 MSAA를 사용할 수 있게 됩니다. TAA에 비해 렌더링 성능은 떨어지지만, 비용은 효율적입니다.



4. Bloom 및 Ambient Occlusion 비활성화
Post Process 효과로, Bloom은 밝은 빛이 주변으로 번지는 효과입니다. 렌더링 비용을 절약하고, VR 멀미 방지를 위해 비활성화해줍니다. Ambient Occlusion은 오브젝트가 맞닿거나 좁은 틈에 빛이 덜 들어오는 현상을 표현하는 효과인데요. 예를 들어, 구석, 틈색, 접촉면 등에 주변 광이 차단됨으로 사실적인 렌더링이 가능해집니다. 하지만 렌더링 비용을 절약하기 위해 비활성화해줍시다.



5. Instanced Stereo
PC 그리고 VR 기기의 양쪽 눈에 각각 렌더링을 진행하지 않고, 하나의 프레임의 인스턴스로 모두 처리하는 방식입니다.

6. Round Robin Occlusion Queries 활성화
다이내믹 오클루전 쿼리 메서드 중 하나로, 양쪽 프레임 둘 다가 아닌 한 쪽 눈에 한 프레임씩 번갈아 렌더링하여 스테레오 렌더링 퍼포먼스를 향상시킵니다. 오클루전 데이터에 프레임 지연시간이 추가되므로 주변 장치의 렌더링이 잘못될 수 있다는 단점이 있지만, 그만큼 라운드 로빈 오클루전이 전체 프레임의 쿼리 시간을 절약한다는 장점이 있습니다. 이렇게 절약되는 부분은 드로 콜이나 가시성 제약을 받는 씬에 큰 도움이 될 수 있습니다.

7. Custom Depth 비활성화
특정 오브젝트를 별도의 DepthBuffer에 다시 렌더링하는 기능입니다. 외곽선 효과, X-Ray 효과 등 보통 후처리에서 활용을 하는데, 프로젝트 특성상 활용할 일이 없으니 비활성화 하겠습니다.
Jitter는 Custom Depth 렌더링시 TAA의 Jitter를 적용할지에 대한 여부를 묻는 옵션입니다. TAA Jitter는 매 프레임마다 카메라를 서브픽셀 단위로 미세하게 이동(Jitter)시켜 여러 프레임을 누적해서 앨리어싱을 제거하는 방식입니다. Custom Depth를 사용하지 않기 때문에 이 옵션도 비활성화 해줍시다.

8. Separate Translucency 비활성화
반투명 오브젝트를 별도의 렌더 패스로 분리해서 렌더링하는 기능인데요. 보통 Post Process 효과가 씬 전체에 적용이 되는데, 반투명 오브젝트가 Post Process 패스에 포함되지 않도록 하기 위해 사용하는 것 같습니다. VR 환경에서는 반투명을 활용하지 않는게 좋습니다. 따라서, 이 옵션도 비활성화 합니다.

9. Fully Rough 활용
모든 머티리얼을 완전히 거친(Roughness = 1.0) 상태로 강제하는 렌더링 최적화 옵션입니다. 완전 난반사가 되기 때문에 Specular 계산을 생략하므로 렌더링 비용을 절약할 수 있으나, 다소 밋밋해보이는 현상이 발생합니다. 주된 오브젝트를 제외하고 Fully Rough을 적용하여 렌더링 비용을 절약하는 것을 고려해보려고 합니다.


마무리
덕분에 프레임을 2배 정도 확보했습니다.. 약 100 정도 프레임이 나오는 상황입니다. 하지만, CCTV 모니터를 켜서 다른 장소도 렌더링 하는 경우에는 다시 50 프레임 정도까지 떨어집니다 .. Render Target의 해상도 같은 속성을 건드려봐야겠습니다 !
'Unreal Engine 프로젝트 > VR 공포게임' 카테고리의 다른 글
| [언리얼엔진] 7. CCTV 기능 구현 (0) | 2026.04.09 |
|---|---|
| [언리얼엔진] 6. VR Hand 애니메이션 제작 (0) | 2026.04.09 |
| [언리얼엔진] 4. VR 레버 구현 (2) | 2026.04.08 |
| [언리얼엔진] 3. VR Hand 물리 효과 구현 (0) | 2026.04.04 |
| [언리얼엔진] 2. VR 버튼 구현 (0) | 2026.04.04 |