3D 오픈 월드 롤플레잉 게임에 모드(Mod)를 적용해 즐길 때, 유저를 가장 당혹스럽게 만들고 원인 규명이 어려운 현상 중 하나는 바로 '실내 문을 열자마자 튕기는 현상'이나 '필드 경계선을 넘는 순간 발생하는 강제 종료'입니다. 수십 시간 동안 아무런 문제 없이 모험을 즐기던 유저가 새롭게 개조된 여관 문을 열거나, 추가 던전에 진입하려 할 때 어떠한 경고창도 없이 즉시 바탕화면으로 튕기는(Crash to Desktop, 이하 CTD) 사태가 발생하곤 합니다.
이러한 셀 이동(Cell Transition) 직후의 급작스러운 강제 종료는 텍스처 누락이나 그래픽카드 VRAM 부족이 아니라, 게임의 근간을 이루는 **네비메시(Navigation Mesh / 이동 경로 메시)**의 손상이나 모드 간 충돌로 인해 발생하는 경우가 대다수입니다. 네비메시는 인공지능(AI)이 이동 경로를 계산하고, 엄폐물을 찾으며, 문을 통해 다른 공간으로 이동할 수 있도록 게임 세계 전체에 깔아둔 보이지 않는 지면 기하학 데이터입니다. 모드 제작자가 실수로 원본 네비메시를 삭제하거나 상호 호환되지 않는 네비메시를 동일 구역에 덮어씌울 경우, 게임 엔진의 길찾기 스레드는 치명적인 메모리 접근 위반 에러를 일으킵니다.
네비메시의 개념과 게임 엔진의 경로 처리 방식
베데스다의 크리에이션 엔진(Creation Engine)과 같은 최신 3D 게임 엔진에서 NPC나 몬스터들은 눈에 보이는 물리 충돌 메시(Collision Mesh)를 일일이 계산하며 이동하지 않습니다. 시야 내에 존재하는 수십 명의 캐릭터를 대상으로 실시간 물리 충돌을 계산하면 CPU 연산 자원이 순식간에 고갈되기 때문입니다.
이를 방지하고 인공지능이 가볍고 신속하게 이동할 수 있도록, 개발자와 모더들은 이동 가능한 바닥, 계단, 지형 표면에 눈에 보이지 않는 2D 다각형 그물망을 펼쳐 놓습니다:
- 삼각형 노드 네트워크: 네비메시는 지형 굴곡을 따라 배치된 수많은 삼각형 폴리곤으로 구성됩니다. 각 삼각형은 시스템이 공인한 '이동 가능한 안전 평면'을 나타내며, 고유 좌표와 속성 플래그(수영 구역, 위험 지역, 우선 경로 등)를 가집니다.
- 길찾기 그래프 알고리즘: NPC가 특정 목표 지점으로 이동할 때, 인공지능은 복잡한 물리 계산을 생략하고 인접한 네비메시 삼각형들 사이에서 A-star 길찾기 알고리즘을 수행하여 최적의 경로 노드를 즉각 산출합니다.
- 엣지 링크(경계 결합)와 도어 텔레포트 마커: 야외 필드에서는 인접한 셀(Cell) 경계선에서 네비메시 간에 녹색 '엣지 링크'를 연결하여 NPC가 로딩 단위를 자연스럽게 넘나들 수 있도록 합니다. 실내 공간에서는 노란색 도어 텔레포트 마커(
DOORTeleport Marker)를 네비메시 삼각형 위에 고정하여, 공간 이동 후 NPC가 어느 좌표에 출현해야 하는지를 엔진에 전달합니다.
치명적인 '삭제된 네비메시(Deleted Navmesh)'의 위험성
숙련된 모드 커뮤니티에서 'Deleted Navmesh'라는 단어는 게임을 망가뜨리는 치명적인 CTD의 주범으로 통합니다. 이 문제가 왜 발생하는지 이해하려면 엔진이 메모리 상에서 레코드 포인터를 어떻게 참조하는지 살펴봐야 합니다.
널 포인터 역참조와 메모리 접근 위반
모드 플러그인 내의 모든 요소는 고유한 16진수 식별자(FormID, 예: 00021A4B)를 부여받습니다. 바니라 원본 게임의 네비메시에는 수많은 퀘스트 로직, 일상 AI 패키지, 동료 추적 코드, 다른 서드파티 모드들이 해당 FormID를 참조 대상으로 등록해 둡니다.
만약 모드 제작자가 특정 실내 공간을 리모델링하면서 불필요해진 원본 네비메시를 에디터에서 단순히 Delete 키로 삭제해 버리면, 해당 모드 파일의 헤더에는 Record Flags: Deleted 플래그가 기록됩니다. 플레이어가 해당 구역에 진입하거나 NPC가 해당 좌표로 이동 경로를 산출하려 할 때 치명적인 단계가 전개됩니다:
- 엔진은 마스터 데이터가 요구하는 FormID의 네비메시 데이터를 메모리에서 호출합니다.
- 그러나 호출된 레코드는 '삭제됨' 상태로 플래그가 지정되어 있어, 정점 배열이나 삼각형 인덱스가 메모리에 전혀 할당되어 있지 않습니다.
- 길찾기 스레드가 할당되지 않은 주소(널 포인터)를 역참조하려 시도하면서 복구 불가능한
0xC0000005 Access Violation메모리 예외가 발생하고, 게임은 즉시 튕겨버립니다.
일반 정적 오브젝트(상자, 의자 등)는 모드 정리 도구의 '삭제 취소 및 비활성화(Undelete and Disable)' 기능으로 손쉽게 자동 복구할 수 있지만, 네비메시는 서로 맞물린 입체 위상 구조를 가지고 있어 자동화 툴이 임의로 복원할 수 없으므로 수동 정리가 필수적입니다.
네비메시 덮어쓰기 충돌과 NPC 이상 행동
원본 네비메시를 직접 삭제하지 않았더라도, 동일한 장소를 수정하는 복수의 모드를 동시에 설치하면 엔진의 **단일 규칙(Rule of One / 후순위 우선 원칙)**에 의해 심각한 길찾기 오류가 발생합니다.
덮어쓰기로 인한 이동 데이터 유실
예를 들어 Mod A가 특정 여관을 확장하여 손님방을 증축하고 새 구역에 네비메시를 생성했습니다. 반면 Mod B는 같은 여관의 기존 로비에 벽난로와 장식용 테이블을 추가하고 해당 셀의 네비메시를 다시 생성했습니다.
게임 엔진은 실행 중에 두 개의 서로 다른 네비메시 레코드를 자동으로 병합하지 못합니다. 배열 순서(Load Order)의 가장 마지막에 위치한 모드가 앞선 모드의 NAVM 레코드를 통째로 덮어씁니다:
- Mod B가 배열상 뒤에 위치할 경우, Mod A가 증축한 객실 구역의 네비메시 정보는 완전히 사라집니다. NPC의 시각에서 그 방은 진입 불가능한 허공이 되며, 동료는 방에 들어오기를 거부하거나 투명한 벽을 향해 멈추지 않고 뜀박질하게 됩니다.
- Mod A가 뒤에 위치할 경우, Mod B가 새로 배치한 벽난로와 기둥 아래에 여전히 이동 가능한 바닥 메시가 남아 있게 됩니다. NPC는 장애물을 인식하지 못하고 벽난로를 향해 무작정 직진하며 끼어버리는 참사가 일어납니다.
경계 링크 단절과 도어 마커 불일치
야외 필드에서 네비메시 문제가 발생할 경우 동료 분실이나 무한 로딩 형태로 증상이 나타납니다:
- 단절된 셀 경계선 링크: 지형 모드가 셀 경계 부근의 고도를 수정하고 저장 시 경계선 재결합(Finalize)을 거치지 않으면, 그 경계선은 AI에게 보이지 않는 절벽이 됩니다. 동료는 경계선 앞에서 발걸음을 멈추고 수 킬로미터를 우회하거나, 빠른 이동을 하기 전까지 플레이어를 따라오지 못합니다.
- 분리된 도어 텔레포트 마커: 인테리어 모드가 문의 위치를 옮기면서 노란색 도어 텔레포트 마커를 유효한 네비메시 삼각형 위에 다시 올려놓지 않으면, NPC는 문 앞에서 멈춰 서거나 진입 벡터 계산 오류로 인해 게임이 무한 로딩에 빠지게 됩니다.
체계적인 진단 및 복구 절차
네비메시 충돌을 해결하기 위해서는 모드 진단 및 에디터 툴을 체계적으로 다룰 줄 알아야 합니다.
1. xEdit을 통한 에러 자동 검사
xEdit(SSEEdit, FO4Edit 등)을 실행하여 전체 모드 목록을 불러온 뒤 에러 검사를 실행합니다:
- 불러온 모든 플러그인을 선택하고 마우스 우클릭 후
Check for Errors를 실행합니다. - 출력 로그 중에서
NAVM레코드를 필터링합니다. Record marked as deleted나Could not be resolved로 표시된 항목을 집중적으로 색출합니다. 이 항목들이 셀 이동 튕김을 유발하는 핵심 원인입니다.
2. 삭제된 네비메시를 위한 '지하 매립(Sinking)' 기법
특정 모드에 삭제된 바니라 네비메시가 포함되어 있다면, 표준 수정 기법인 매립법을 적용해야 합니다:
- xEdit에서 해당
NAVM레코드를 찾아Deleted플래그를 해제하여 레코드 헤더를 정상 상태로 복구합니다. - 공식 에디터인 Creation Kit으로 해당 모드를 불러옵니다.
- 해당 네비메시를 다시 삭제하지 말고, 모든 정점을 선택하여 지형의 까마득한 지하 깊은 곳(통상 Z축 좌표를
-30,000으로 설정)으로 끌어내립니다. - 지하에 묻힌 삼각형들을 매우 작은 크기로 축소하고 주변과의 엣지 링크를 모두 끊어버립니다. 이렇게 하면 엔진은 메모리에서 정상적인 FormID를 인식하면서도, 지상의 NPC가 절대 그 메시를 밟을 일이 없으므로 널 포인터 CTD를 완벽하게 차단할 수 있습니다.
실내 문을 열거나 지역 경계를 넘을 때 발생하는 급작스러운 바탕화면 튕김 현상을 진단할 때, 365Finds 게임 모드 가이드에서는 그래픽 드라이버나 메모리 누수를 의심하기에 앞서 모드 배열 내에 삭제되거나 단절된 네비메시가 존재하는지 우선적으로 점검할 것을 권장합니다.
네비메시 자가 진단 및 예방 체크리스트
- LOOT 경고 태그 확인: 로드 오더 최적화 툴(LOOT)의 마스터리스트를 업데이트하여 'Contains deleted navmeshes' 경고가 붙은 플러그인이 있는지 확인한다.
- 새 모드 적용 시 xEdit 사전 검사: 도시 리모델링, 하우징 모드, 던전 추가 모드를 설치한 경우 게임 시작 전에 xEdit에서 반드시 에러 검사를 거친다.
- 크래시 로그 분석: Crash Logger 등의 크래시 로그 분석 모드를 사용 중이라면 튕김 직후 로그 파일에서
PathingCell,NavMesh,BSPathing키워드가 존재하는지 검색한다. - 호환 패치 제작: 동일 셀을 수정하는 다수의 모드를 병용할 때는 공식 에디터를 열어 양쪽 배치를 반영한 연결 네비메시를 작도하고 셀 경계를 재정리한 패치를 제작한다.