안녕하세요 펭귄 교수입니다.
언리얼 엔진 5 소식으로 세상을 떠들썩한 지 2년이 지난 지금, 언리얼의 경쟁 플랫폼 유니티 6의 소식으로 다시 떠들썩해졌습니다.
많은 업데이트가 되었고, 공부해볼 것들이 많이 생겼습니다.
그런 업데이트 요소 중에 이번에는 렌더링 향상 관련 소식에 대해 이야기해보고자 합니다.
1. 렌더링 파이프
유니티 6에서는 Universal Render Pipeline(URP)과 High Definition Render Pipeline(HDRP) 시스템이 추가되었습니다.
이는 렌더링하는 파이프 과정입니다.
해당 파이프로 어떤 과정에서는 CPU와 GPU의 작업 부하를 50%까지 감소시키는 데 성공했다고 합니다.
또한 새로운 GPU Resident Drawer 를 도입하였습니다.
해당 Drawer를 사용해 URP, HDRP 에셋을 활성화할 수 있습니다.
이 Drawer를 통한 성능 개선은 다음과 같습니다.
스트레스 테스트에서는 4배 이상의 속도 개선이 있었습니다.
꽤 놀라운 테스트 결과입니다.
2. Split Jobs Threading Mode
CPU 처리 개선을 위해 Split Jobs Threading Mode를 도입했습니다.
해당 쓰레딩 모드는 저레벨의 API를 사용하여 내부적으로는 복잡하지만 더 최적화된 방식으로 쓰레딩을 컨트롤 할 수 있게 됩니다.
언리얼엔진의 C++보다 고레벨이었던 C# 언어에서 저레벨 수준으로 컨트롤 하는 것은 큰 메리트가 있어보입니다.
참고로 DX12 및 Vulkan에서만 지원됩니다.
3. GPU Occlusion Culling
GPU Resident Drawer와 함께 작동하는 기능으로, 각 프레임의 오버드로우의 정점의 양을 줄이는 기능입니다.
간단하게 말하자면 렌더러가 보이지 않은 오브젝트는 그리지 않는 방식입니다.
마치 양자역학같은 기능입니다. 관측되지 않은 것은 확률적으로 존재할 뿐이다.
GPU 기반 접근 방식을 사용하는 GPU 오클루전 컬링은 장면에서 보이지 않는 것을 렌더링하지 않도록 보장합니다.
4. STP(Spatial-Temporal Post-Processing)
직역하자면, 공간-시간적 전처리 입니다.
이 기능을 사용하면 GPU 성능을 최적화하고 시각적 품질과 런타임 성능을 크게 향상시킬 수 있습니다.
낮은 해상도의 프레임을 가져와 업스케일링해서 다양한 수준의 렌더링을 보여주는 기능입니다.
낮은 해상도의 프레임은 비교적 적은 자원을 소모하여 가져올 수 있기 때문에 가져오는 속도가 빠를 것이고, 이를 업스케일링하면 그런 적은 자원에 비해 시각적으로 풍부하게 표현할 수 있기 때문입니다.
다만 이 업스케일링의 기술이 어느정도 인지가 제일 중요한 포인트가 될 거 같습니다.
5. Render Graph Viewer
Render Graph Viewer를 통해 엔진 렌더 패스 성능이나 프레임 리소스 사용량 등을 직접 분석해 파이프 라인 디버깅이나 최적화를 할 수 있게 됩니다.
6. Foveated Rendering API
이 기능의 이름 유래는 인체의 눈(eye) 안에 있는 중심와(fovea)를 따왔습니다.
간단하게 말하자면 시선의 중심이 되는 곳은 고화질로 렌더링하고, 그 외각은 낮은 화질로 렌더링을 하여 성능을 개선시키는 기능입니다.
이 기능은 VR, XR 플랫폼에서 더 빛을 보일 것으로 보이며, 타겟팅 자체도 해당 플랫폼을 겨냥한 것으로 보입니다.
아래와 같은 코드를 통해 설정할 수 있습니다.
public void SetFRLevel(XRDisplaySubsystem xrDisplaySubsystem, float strength)
{
// 중심 포비션 수준을 설정하는 코드
xrDisplaySubsystem.foveatedRenderingLevel = strength;
}
Foveated Rendering API는 Sony PlayStation®VR2 플러그인 및 Oculus XR 플러그인을 통한 Meta Quest와 호환되며, 곧 OpenXR 플러그인도 지원할 예정입니다.
기타 사항
HDRP와 URP의 Volume 프레임워크 개선은 모든 플랫폼에서 CPU 성능을 최적화하여 저사양 하드웨어에서도 실행 가능하게 만들었습니다.
또한, Ray Tracing API와 HDRP 기능은 미리보기에서 제외되었습니다. DirectX 12와 레이 트레이싱의 안정성과 성능을 개선했으며, 엔진의 기존 기능 세트(레이 트레이싱이 있는 데칼과 VFX 그래프, 패스 트레이싱을 위한 데칼과 디스크+튜브+박스 조명) 및 콘솔 지원과의 호환성을 높였습니다.
Solid Angle Culing 과 같은 새로운 최적화는 레이 트레이싱 CPU 오버헤드를 크게 줄이는 데 도움이 됩니다.
HDRP 설정을 통해 컬링 모드를 설정할 수 있습니다 .
다양한 최적화가 도입되어 레이 트레이싱 메모리 사용량이 크게 줄어들었고 이제 프레임 디버거를 사용하여 추적할 수 있습니다.
이를 통해 Ray Tracing API와 HDRP의 레이 트레이싱 효과(레이 트레이싱 그림자, 반사, AO, 전역 조명, 경로 추적, 재귀적 렌더링 등)가 공식적으로 미리 보기에서 제외되었습니다.
마무리
이렇게 유니티 6의 추가 사항 중 렌더링 관련 소식들에 대해 정리해보았습니다.
이 외에도 다양한 요소 추가, UX/UI의 개선 등의 소식들이 있습니다. 해당 소식들은 다음에 정리해서 다시 찾아오도록 하겠습니다.
요즘 대부분의 게임 회사들이 언리얼 엔진 5로 전환하는 추세인데, 이러한 경쟁 구도에서 유니티 6의 릴리즈가 새로운 바람을 일으켜 더 큰 게임 발전이 되었으면 좋겠습니다.
'게임 프로그래밍 > 유니티' 카테고리의 다른 글
[유니티 소식] 유니티 6, 멀티 플레이 게임 더 만들기 쉬워졌다! (2) | 2024.10.21 |
---|