한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L1 클라이언트 게임 프로세스

메인 스레드 동기 로딩·셰이더 컴파일 Synchronous asset load, shader compile

원인 ID cg-sync-load · 주 담당 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

처음 보는 지역·몬스터·이펙트를 그리기 직전에 파일을 읽고 셰이더를 만드느라 멈춥니다.

왜 새 지역 진입, 처음 보는 스킬·장비·몬스터 등장 → 그러면 메인 스레드가 파일 읽기와 셰이더 컴파일을 기다림 → 화면에서는 처음 한 번만 0.1~1초 멈춤, 두 번째부터는 괜찮음

증상
멈춤, 뚝뚝 끊김
요인
정체
누가 겪나
나만
언제
이동 중·지역 전환 때, 특정 행동을 할 때
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
비동기 로딩, 미리 불러두기(프리워밍), 셰이더를 로딩 화면이나 첫 실행 때 미리 컴파일, 로딩 화면 활용.
수치 감각
셰이더 하나 컴파일에 수십 ms, 길면 100ms 이상. 텍스처 로딩은 저장장치 속도에 따라 수십~수백 ms.
그래프에서는
접속·점검 직후 폭증 · 프레임 스파이크 수(패치·드라이버 업데이트 직후)
확인할 곳
PresentMon으로 같은 경로를 두 번 녹화해 첫 방문과 두 번째를 비교. 개발 빌드는 언리얼에서 r.PSOPrecache.Validation을 켜고 stat PSOPrecache와 로그의 “PSO PRECACHING MISS”를, 유니티는 프로파일러 Timeline에서 튄 프레임의 로딩·셰이더 구간을 봄
이러면 맞음
처음 가는 곳·처음 쓰는 스킬에서만 0.1~1초 튀고 두 번째에는 사라짐. 패치나 그래픽 드라이버 업데이트 직후 제보가 몰렸다가 줄어듦
이러면 아님
같은 곳에서 매번 튀면 셰이더 캐시 문제가 아님. 저장장치가 느린 PC에서만 이동할 때마다 반복되면 “저장장치가 느려 에셋 스트리밍이 밀림”, 전용 GPU 메모리가 꽉 찼으면 “그래픽 메모리(VRAM) 부족”
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
PC에서 한 번 만든 셰이더는 그래픽 드라이버가 셰이더 캐시에 저장해 두었다가 다시 씁니다. 그래픽 드라이버를 업데이트하거나 게임 패치가 나온 직후에는 이 캐시가 무효화되어, 괜찮던 사람도 한동안 다시 끊깁니다. “패치 후 처음 가는 곳마다 멈칫”이라는 제보가 전형입니다.

출처

  1. Shader loading Unity
    셰이더 변형을 처음 쓸 때 그래픽 드라이버가 GPU용으로 만드느라 눈에 띄게 멈출 수 있고, 한 번 만든 것은 캐시해 다시 멈추지 않음
  2. Optimizing Rendering With PSO Caches in Unreal Engine Epic Games
    파이프라인 상태(PSO)를 필요한 순간에 만들면 100ms 이상 걸릴 수 있어 미리 만들어 둬야 함
  3. Direct3D 12 Return Codes Microsoft
    D3D12_ERROR_DRIVER_VERSION_MISMATCH: 다른 드라이버 버전에서 만든 PSO 캐시는 다시 쓸 수 없음(드라이버 업데이트 후 재컴파일)
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    FrameTime(프레임 사이 CPU 시간)으로 프레임별 시간을 녹화
  5. PSO Precaching for Unreal Engine Epic Games
    r.PSOPrecache.Validation을 켜면 stat PSOPrecache로 놓친 PSO 통계를 보고 로그에 “PSO PRECACHING MISS”를 남김, 런타임 PSO 생성이 기본 20ms를 넘으면 히치로 셈

함께 보면 좋은 원인

같은 층: L1 클라이언트 게임 프로세스

같은 증상(멈춤)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기