격자나 NavMesh에서 찾은 경로의 코너를 직선으로 줄일 때 캐릭터 반경·경사·동적 장애물을 어떻게 재검증하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
경유점을 줄이면 지그재그가 사라지고 경로가 짧아질 수 있지만, 원래 격자나 NavMesh 탐색이 보장한 통과 가능성을 자동으로 보존하지는 않습니다. 중심점 사이가 보인다는 점 raycast와, 반경·높이·경사·일방 통행 조건을 가진 캐릭터가 실제로 그 선분을 지나갈 수 있다는 검사는 다릅니다. 따라서 후보 선분마다 캐릭터의 footprint와 이동 규칙을 다시 적용하고, 동적 장애물은 이동 직전 또는 짧은 구간마다 재검증해야 합니다. 이 과정을 경로 스무딩 검증(validated path smoothing)이라고 부릅니다.
격자와 NavMesh의 차이
격자에서는 두 경유점 사이 선분이 통과하는 셀을 구하고, 캐릭터 반경만큼 확장한 장애물과 선분 또는 swept volume이 겹치지 않는지 확인합니다. 선분의 끝점만 확인하면 중간에 얇은 벽을 통과할 수 있습니다. NavMesh에서는 인접 다각형 사이 portal들의 양쪽 경계를 사용해 funnel로 불필요한 꺾임을 제거할 수 있지만, funnel 결과가 에이전트가 실제로 머물 수 있는 corridor 안에 있는지와 portal 폭이 반경을 만족하는지 확인해야 합니다. 중심선은 비어 있어도 몸체가 벽 모서리에 걸릴 수 있습니다. 스무딩 후보가 통과해야 할 조건은 단순 시야가 아닙니다. 캐릭터의 반경·높이, 계단·낙하 가능 여부, 경사 한계, 지형 가중치, 일방 통행, 동적 문과 다른 캐릭터 점유를 모두 유지해야 합니다. 직선으로 줄였더니 거리만 짧아지고 가중 지형을 가로질러 비용이 커질 수 있으므로, 거리 최소화와 이동 비용 최소화를 구분합니다. 움직이는 장애물이 있는 긴 선분은 검증 후 실행 전에 상태가 바뀔 가능성이 커서 선분을 짧게 나누거나 다음 waypoint 근처에서만 확정합니다.
적용과 실패 처리
후보 선분 검사가 실패하면 가장 먼 통과 가능한 경유점까지만 합치고 나머지는 원래 경로를 사용하거나 지역 재탐색을 요청합니다. 스무딩을 클라이언트에서 먼저 해도 서버가 같은 반경·충돌·틱 규칙으로 승인해야 하며, 불일치하면 서버 위치를 권위로 보정합니다. 큰 에이전트와 작은 에이전트가 같은 스무딩 결과를 공유할 수 있는지는 corridor 폭과 clearance가 충분한지에 달려 있습니다. 테스트는 좁은 모서리, 한 칸 통로, NavMesh 층 경계, 큰 반경, 동적 문, 다른 캐릭터, 가중 지형, 긴 선분을 포함합니다. waypoint 수가 줄었는지만 보지 않고 실제 이동 성공률, 충돌 위반 0건, 재검증 CPU, 재탐색률, 총 이동 비용을 봅니다. 스무딩은 장식적인 선 그리기가 아니라 실행 가능성 보존 변환(feasibility-preserving transformation)입니다.
가장 먼 경유점까지 합치는 탐욕적 스무딩에서 후보가 실패하면 더 가까운 후보를 다시 시험해야 합니다. 후보 선분의 지형 비용을 누적해 원래 경로보다 비싸면 단순화하지 않고, portal이나 높이 변화가 있으면 각 구간의 규칙을 확인합니다. 긴 선분은 동적 장애물 변화가 잦은 영역과 정적인 영역에서 재검증 정책을 달리하겠습니다. 서버가 승인한 뒤에도 다른 캐릭터가 통로를 차지할 수 있으므로 예약 기반 이동이라면 선분 전체를 예약하거나 짧은 시간 창만 확정해야 합니다. 실패 후보를 반복하면 CPU가 낭비되므로 에이전트·맵 버전별 실패 캐시와 재시도 쿨다운을 둘 수 있습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 중심선 raycast와 반경 있는 캐릭터의 실제 통과 검사를 구분한다.
- portal·funnel, 경사·높이·가중 지형·동적 장애물을 함께 검증한다.
- 실제 이동 성공률과 충돌 위반을 스무딩의 성공 기준으로 둔다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 직선으로 보이면 모든 크기의 캐릭터가 통과한다고 말한다.
- 거리만 줄이면 지형 비용과 이동 규칙도 보존된다고 가정한다.
- 클라이언트의 시각 결과만으로 서버 이동 안전성을 확정한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 경로의 코너를 직선으로 줄였더니 비싼 지형을 통과합니다. 거리 단축과 이동 비용 감소는 어떻게 구분하나요?
- swept-volume과 점 raycast의 모서리·속도 차이를 어떤 반례로 검증하나요?
- 긴 선분의 재검증 주기를 줄이면서 동적 장애물에 대한 안전 여유를 어떻게 정하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.