게임 렉 백서 › 증상별로 찾기
안 보임·유령 개체: 원인 20가지와 담당
다른 말: NPC가 안 보임, 투명 캐릭터, 이미 죽은 몬스터가 서 있음
그림이 있는 원본 증상 사전으로 열기 →
있어야 할 NPC·몬스터·플레이어가 내 화면에만 없거나, 이미 사라진 개체가 내 화면에만 남아 있습니다.
다른 사람은 NPC와 대화하는데 나는 빈 땅을 봅니다. 이름표만 있고 캐릭터 모델이 없거나, 때려도 반응 없는 몬스터가 서 있습니다.
속도 문제보다는 패킷 하나가 빠졌거나 그리기에 실패한 상태입니다. 채널·페이즈 차이, 등장·퇴장 알림 유실, 로딩 중 폐기, 에셋 로딩 실패를 봅니다. 시야를 벗어났다 돌아오면 보이는지가 가장 분명한 단서입니다.
이 증상을 만드는 원인
L1 클라이언트 게임 프로세스
- 저장장치가 느려 에셋 스트리밍이 밀림: HDD처럼 느린 저장장치에서는 오픈월드의 텍스처·모델을 읽는 속도가 이동을 따라가지 못해, 개체가 늦게 뜨거나 게임이 읽기를 기다리며 끊깁니다. (게임개발팀·클라이언트 개발)
L8 소켓과 프로토콜
- keepalive 기본값 2시간: 상대가 종료 신호 없이 사라지면 TCP는 한참 뒤에야 감지합니다. keepalive(유휴 연결이 살아 있는지 확인하는 TCP 기능)는 기본으로 꺼져 있고, 켜도 2시간 동안 유휴 상태여야 확인을 시작합니다. (게임개발팀·서버 개발)
- 유휴 후 슬로 스타트: TCP는 한동안 유휴 상태면 혼잡 윈도우(한 번에 보낼 수 있는 양)를 다시 줄여, 갑자기 큰 데이터를 보낼 때 여러 번에 나눠 보냅니다. (인프라팀·서버 인프라)
일부에게만 생기는 문제
- 채널·인스턴스·페이즈 차이: 두 캐릭터가 다른 채널이나 인스턴스에 있거나, 퀘스트 진행도에 따라 보이는 NPC가 다른 “페이즈”에 있으면 서로 다른 세상을 봅니다. (게임개발팀·서버 개발)
- 로딩 중 도착한 등장 알림 폐기: 존에 들어가자마자 서버가 주변 NPC 등장 알림을 보내는데 클라이언트가 아직 맵을 불러오는 중이라 그 알림을 버립니다. (게임개발팀·클라이언트 개발)
- 시야 등록 순서 꼬임: 캐릭터가 시야 격자에 등록되는 순간과 NPC가 격자를 옮기는 순간이 겹치면, 그 NPC의 등장 알림이 누락될 수 있습니다. (게임개발팀·서버 개발)
- 기준 스냅샷 유실: 서버가 “지난번과 달라진 것만” 보내는 방식에서, 처음 한 번 보내는 전체 정보(기준)를 잃으면 그 뒤 변화분을 적용할 수 없습니다. (게임개발팀·서버 개발)
- 퇴장 알림 유실 (유령 개체): “사라졌다”는 알림을 놓치면, 이미 죽었거나 떠난 NPC·플레이어가 내 화면에만 남습니다. (게임개발팀·서버 개발)
- 입장 직후 몰리는 등장 정보 유실: 존에 들어서는 순간 서버는 주변 개체 수십~수백 개의 등장 정보를 한꺼번에 보냅니다. 이 정보를 비신뢰(unreliable) 채널로 보내거나, 로딩 중이라 소켓을 못 읽는 사이 수신 버퍼가 넘치면 일부가 사라지고 다시 오지 않습니다. (게임개발팀·서버 개발)
- 개체 ID 재사용 혼동: 죽은 NPC가 다시 나타날 때 서버가 같은 개체 ID를 다시 쓰면, 그 사이 퇴장 알림을 놓친 클라이언트는 새 NPC를 옛 NPC로 오인합니다. (게임개발팀·서버 개발)
- 고정 UDP 포트 충돌: 클라이언트가 정해진 로컬 포트를 쓰도록 만들어져 있으면, 같은 PC의 두 번째 클라이언트는 포트를 못 쓰거나 첫 번째와 패킷을 나눠 받습니다. (게임개발팀·클라이언트 개발)
- IP·기기 기준 세션 구분 버그: 서버나 중간 서버가 연결을 IP나 기기 ID로 구분하면, 같은 PC(같은 공인 IP)의 두 클라이언트를 한 사람으로 인식합니다. (게임개발팀·서버 개발)
- 멀티 클라이언트 제한: 보안 모듈이나 서버 정책이 한 PC의 여러 클라이언트를 제한하면, 두 번째 클라이언트는 실행·접속이 막히거나 먼저 켠 쪽의 접속이 끊깁니다. 일부 게임은 추가 클라이언트의 기능만 막습니다. (게임개발팀·클라이언트 개발)
- 백그라운드 창의 처리 제한: 클라이언트 창이 백그라운드에 있으면 게임·엔진·OS가 그 클라이언트의 프레임과 처리를 줄입니다. 받은 패킷을 제때 처리하지 못해 밀리거나 넘칩니다. (게임개발팀·클라이언트 개발)
- 캐시·에셋 파일 동시 접근 충돌: 두 클라이언트가 같은 캐시 폴더에 동시에 쓰거나 파일을 잠그면, 한쪽이 NPC 모델·텍스처를 못 불러옵니다. (게임개발팀·클라이언트 개발)
- 메모리·VRAM 부족으로 스트리밍 실패: 클라이언트 두 개가 그래픽 메모리를 나눠 쓰면, 새로 필요한 모델·텍스처를 올릴 자리가 없어 일부가 안 그려집니다. (게임개발팀·클라이언트 개발)
- 표시 옵션 차이: 표시 인원 제한, NPC 이름표·모델 숨김, 저사양 모드 같은 옵션이 두 클라이언트에서 다르면 보이는 것이 다릅니다. (게임개발팀·클라이언트 개발)
- 클라이언트 버전·데이터 불일치: 두 번째 클라이언트가 다른 설치본이거나 패치가 덜 되었으면, 서버가 보낸 새 NPC ID를 몰라 조용히 무시합니다. (게임개발팀·클라이언트 개발)
- 연결별 전송 예산·우선순위: 서버가 연결마다 보낼 양에 한도를 두고 가까운 것부터 보내면, 한도가 낮게 잡힌 쪽은 멀리 있는 NPC를 늦게 받거나 못 받습니다. (게임개발팀·서버 개발)
- 시계 추정 오차로 개체 보류: 클라이언트가 추정한 서버 시각이 틀리면, 막 도착한 개체 정보를 “아직 미래”라며 보류하거나 “너무 옛날”이라며 버립니다. (게임개발팀·클라이언트 개발)
그림이 있는 원본 증상 사전 보기