에픽 라이브 | 언리얼 엔진 | 셰이더 끊김 현상: 언리얼 엔진이 문제를 해결하는 방법
- 쉐이더 끊김(Shader stuttering)은 GPU가 쉐이더를 사용하기 직전 컴파일하며 발생하며, 이는 게임 성능에 부정적인 영향을 미침 😫
- GPU는 CPU와 달리 하드웨어 아키텍처가 다양하여 쉐이더를 중간 표현(Intermediate Representation)으로 배포하고 런타임에 컴파일함 🔀
- 과거에는 런타임 쉐이더 컴파일이 큰 문제가 아니었지만, 쉐이더 복잡성이 증가하면서 문제가 부각됨 😥
- 최신 그래픽스 API는 PSO(Pipeline State Object)를 도입하여 쉐이더와 스테이트를 미리 준비하지만, 언리얼 엔진의 머티리얼 시스템은 PSO의 수를 폭발적으로 증가시킴 💥
- 언리얼 엔진은 PSO 탐색을 통해 실제로 사용되는 PSO만 기록하고, 이를 활용하여 번들된 PSO 캐시를 생성함 📦
- 언리얼 엔진 5.2에서는 렌더링 가능성이 높은 PSO 서브셋을 결정하여 로딩 시 컴파일하는 기술을 도입함 ⚙️
- 로드 시점과 렌더 시점의 차이를 이용하여 PSO를 미리 캐시하고, 스트리밍되는 머티리얼에 대해서는 렌더링을 대기시키거나 기본 머티리얼을 사용함 ⏳
- 드라이버 캐시를 활용하여 PSO를 디스크에 저장하고 재사용하며, 언리얼 엔진은 이를 통해 메모리 사용량을 최적화함 💾
- 글로벌 쉐이더에 대한 PSO 프리캐싱 커버리지를 확대하고, 하드웨어 및 소프트웨어 공급 업체와 협력하여 드라이버 및 그래픽스 API를 개선하는 노력을 기울임 🤝
- 언리얼 엔진은 PSO 프리캐싱을 통해 쉐이더 끊김 현상을 근본적으로 해결하고자 하며, 개발자는 프로젝트에 맞는 PSO 프리캐싱 전략을 수립해야 함 🎯
- 언리얼 엔진 문서 페이지에서 PSO 프리캐싱에 대한 자세한 정보와 기술적인 디테일을 확인할 수 있음 📚