언리얼 클라의 스레드와 렉
이 영상에 나오는 용어 15개.
- 게임 스레드
- 언리얼에서 입력 처리, 게임 로직 틱, 패킷 적용을 하는 메인 스레드다. 액터를 바꿀 수 있는 유일한 스레드라 여기가 느려지면 모든 것이 느려진다.
- 동기 로딩
- 에셋을 디스크에서 읽는 동안 게임 스레드가 기다리는 로딩 방식이다. 비동기 로딩은 백그라운드에서 읽어 멈춤을 피한다.
- 러버밴딩
- 화면 속 캐릭터가 멈췄다가 실제 위치로 끌려가듯 튀거나 빨리 움직이는 현상이다. 밀린 이동을 한꺼번에 적용할 때 생긴다.
- 렌더 스레드
- 게임 스레드가 넘긴 장면 정보를 받아 그리기 명령을 만드는 스레드다. 게임 스레드보다 한 프레임 뒤에서 돈다.
- 리시브 스레드 · 센드 스레드
- 소켓 입출력만 맡도록 게임 스레드와 따로 둔 스레드다. 게임 스레드가
recv()·send()에서 블록되지 않게 해준다. 언리얼 기본 NetDriver는 게임 스레드에서 소켓을 읽고 보내며, 이 영상의 두 스레드는 자체 소켓 모듈 기준이다. - 보간 버퍼
- 받은 위치를 잠깐 모아두고 타임스탬프에 맞춰 사이 값을 채워 재생하는 버퍼다. 패킷 간격이 고르지 않아도 움직임이 매끄럽게 보인다.
- 수신 큐 · 송신 큐
- 네트워크 스레드와 게임 스레드 사이에 패킷을 넘기는 대기열이다. 수신 큐 길이가 늘어난다는 것은 게임 스레드가 받는 속도를 못 따라간다는 신호다.
- 액터 (UObject)
- 언리얼에서 캐릭터, 몬스터, 이펙트처럼 월드에 놓이는 객체다.
UObject는 그 기반 클래스이며 게임 스레드에서만 안전하게 다룰 수 있다. - 예측 이동
- 서버 응답을 기다리지 않고 클라가 입력을 바로 자기 캐릭터에 반영하는 것이다. 서버 결과가 오면 차이를 보정한다.
- 틱 (Tick)
- 게임 로직을 한 번 갱신하는 단위다. 서버는 고정 간격(예: 20Hz, 50ms)으로 돌고, 이 영상에서 클라의 틱은 게임 스레드의 한 프레임이다.
- 프레임 · FPS
- 화면 한 장을 만드는 한 바퀴와, 1초에 그 바퀴를 몇 번 도는지다. 1프레임 시간은 1000 ÷ FPS ms로, 60fps는 16.7ms, 15fps는 67ms다.
- 핸들러
- 패킷 종류별로 실행되는 처리 함수다. 이동 패킷이면 액터 위치를 바꾸고, 스폰 패킷이면 액터를 만든다.
- 히치 (Hitch)
- 평소보다 훨씬 긴 프레임 하나가 튀는 현상이다. GC, 동기 로딩, 대량 스폰이 흔한 원인이다.
- GC (가비지 컬렉션)
- 쓰지 않는 객체 메모리를 회수하는 작업이다. 언리얼 GC는 게임 스레드를 잠시 멈추므로 객체가 많을수록 멈춤이 길다.
- RHI · GPU
- RHI(Rendering Hardware Interface)는 그리기 명령을 DirectX, Vulkan 같은 그래픽 API로 넘기는 층이고, GPU가 실제로 그린다. 영상에서는 렌더 스레드보다 또 한 프레임 뒤에 처리된다.