게임은 대체로 부드러운데 처음 보는 폭발이나 새 재질이 등장할 때만 잠깐 멎는 경우가 있다. GPU가 장면을 얼마나 빨리 그리는지와 별개로, 그 장면을 그릴 프로그램의 준비가 늦었을 가능성이 있다. 셰이더 컴파일 스터터링이 그런 현상이다. 좋은 그래픽카드를 쓴다는 사실만으로 모든 첫 사용 지연이 사라지는 것은 아니다. 다만 특정 이용자의 끊김을 증상만 보고 이 원인으로 확정할 수는 없다.
다운로드한 파일이 모든 GPU의 완성 코드인 것은 아니다
셰이더는 변형·조명·그림자·후처리처럼 화면을 만드는 일을GPU에서 수행하는 프로그램이다. PC에는 서로 다른GPU와 세대가 있으므로 게임은 중간 형태의 코드를 배포하고, 드라이버가 실제 장치에서 실행할 코드로 바꾸는 과정을 거친다. 화면에 처음 써야 하는 순간까지 이 작업이 남아 있으면 그리기가 기다린다. 짧은 순간이라도 한 프레임이 길어지면 플레이어는 끊김으로 느낄 수 있다.
이 준비를 묶어 다루는 것이 파이프라인 상태 객체,PSO다. 셰이더와 렌더링 설정을 함께 묶어 실제로 그리기 전에 만들 수 있게 한다. 그래서 로딩 화면의 ‘셰이더 준비’가 단순한 대기가 아니라 플레이 중 해야 할 일을 앞당기는 과정일 수 있다. 재질·메시·그래픽 설정의 조합이 많아 가능한 모든 경우를 무조건 미리 만드는 것도 시간과 메모리 면에서 어렵다.
두 번째 실행이 빠른 이유, 캐시를 지우면 되돌아갈 수도
드라이버는 준비한PSO를 디스크에 저장해 다음 실행에서 재사용할 수 있다. 새 드라이버 설치로 캐시가 비워지면 첫 실행이나 첫 로딩이 다시 길어질 수 있다는 게 에픽의 설명이다. 캐시를 무작정 삭제하면 언제나 빨라진다는 조언과는 반대다. 개발 문서가 테스트 때 캐시를 비우라고 권하는 이유도 최적화 마법이 아니라, 처음 실행하는 플레이어의 조건을 재현하기 위해서다.
현재 언리얼 문서는 로딩 화면이 남아 있는 사전 컴파일 요청을 고려하도록 안내한다. 요청만 해놓고 준비 전에 해당 효과를 그리면 늦은 항목 때문에 지연이 생길 수 있다. 공식 진단 사례에는117밀리초PSO 지연이 보이지만, 같은 그래프의 다른 큰 지연은PSO 원인이 아니라고 명시돼 있다. 평균 프레임 수 하나만으로 원인을 가를 수 없는 이유다. 새 효과의 첫 등장과 반복 시 차이, 드라이버 변경 전후 같은 조건을 나눠 보는 편이 하드웨어 부족이나 캐시 문제를 성급히 단정하는 것보다 정확하다.