← 기술 지식

기술 지식 / 게임 서버 / 공간·충돌

연속 충돌·TOI·수치 여유와 관통 순서

endpoint tunneling·점/부피 sweep·상대 운동·보수 broad phase를 설명하고 최초 접촉·남은 시간·동점·시작 내부·반복 상한·사건 dedup을 구분합니다.

게임 서버 · 원리·구현·운영
기술 지식 트리

연속 충돌은 tick 끝의 위치를 비교하는 대신 한 tick 동안 두 형상이 만나는 최초 시각을 찾는 모델입니다. broad phase는 후보를 놓치지 않도록 넓게 고르고, narrow phase는 공통 시간 매개변수의 TOI를 계산하며, 접촉 후 남은 시간과 반복 상한까지 포함해야 결과가 안정적입니다.

이동 양 끝점과 중간 벽 교차

점 투사체가 x=0에서 x=10으로 한 tick에 움직이고 벽이 [4,5]에 있으면 끝점 overlap은 둘 다 false입니다. 이동 구간을 보지 않아 생기는 tunneling입니다. tick을 올려도 최대 속도·최소 벽 두께에 대한 보장이 없으면 완전히 사라지지 않습니다.

점에 가까운 투사체는 이동 경로에 맞춰 ray 또는 유한한 segment를 검사하고, 반경이 있는 구·캡슐·박스는 그 형상을 이동시키는 shape sweep을 사용합니다. 중심선만 따라가면 중심은 벽을 피하더라도 몸체 옆면이 벽에 닿는 경우를 놓칠 수 있습니다. 먼저 선형 병진 전체를 감싼 swept AABB로 넓게 후보를 고른 다음, narrow phase에서 형상과 장애물이 실제로 처음 만나는 시점인 TOI를 계산합니다. 회전이나 곡선 이동은 중간 형상까지 포함하는 별도 bound가 필요합니다.

TOI 비교와 공통 시간 매개변수

위 점 예시의 정적 벽 진입은 정규화 구간 t∈[0,1]에서 t=0.4입니다. 반경 r=0.5인 원/구를 적절한 축 방향 벽과 검사하면 중심이 x=3.5에서 접촉하므로 t=0.35입니다. 이는 단순 평면 접촉 예이며 일반 모서리는 정확한 Minkowski/shape 검사가 필요합니다.

대상도 움직이면 상대 위치·상대 속도와 양쪽 형상·기준 시각을 사용합니다.

상대 운동을 p(t)=p0+v·t로 두면 투사체와 대상이 각각 움직여도 같은 t∈[0,1]에서 처음 만나는지를 비교해야 합니다. A가 t=.2, B가 t=.6에 닿는 예에서는 A의 반응으로 속도나 관통 가능성이 바뀐 뒤 남은 구간 [.2,1]을 다시 검사해야 B를 놓치지 않습니다. 계산 결과가 t≈0으로 반복되면 최소 진행량을 요구하고, 그래도 상한에 닿으면 안전 정지·소멸을 반환하되 충돌 없음으로 기록하지 않습니다.

재현 실습은 얇은 벽과 고속 점 투사체, 반경 있는 투사체, 움직이는 대상, 시작 내부를 각각 입력으로 두고 끝점 검사와 sweep 결과를 비교하는 것입니다. 예상 결과는 끝점 검사에서 miss인 얇은 벽이 sweep에서는 hit가 되고, projectile+tick만 dedup key로 사용한 구현에서는 같은 tick의 B 피해가 사라지는 것입니다. 현재 투사체와 옛 대상 등 서로 다른 tick을 무심코 섞지 않습니다. 시작부터 내부면 새 진입과 달라서 depenetration·마지막 안전 위치·소멸 같은 정책을 적용합니다.

첫 접촉 뒤 남은 시간만 다시 검사합니다권위 시작 상태·전체 이동 sweep. 최초 TOI·안정 동점 선택. 정지·반사·관통·피해 사건. 남은 시간·갱신된 상태 재검사. 종료 또는 반복 상한의 안전 처리보수 후보→정밀 판정접촉 규칙시간·속도 갱신진행량·횟수 제한권위 시작 상태·전체 이동 sweep최초 TOI·안정 동점 선택정지·반사·관통·피해 사건남은 시간·갱신된 상태 재검사종료 또는 반복 상한의 안전 처리
첫 접촉 뒤 남은 시간만 다시 검사합니다 화살표는 한 tick 안의 순차 처리입니다. 모든 TOI를 동일 기준에 연결하고 반복 상한에서 명시적인 안전 결과를 반환합니다.
그림을 글로 읽기
  • 권위 시작 상태·전체 이동 sweep
  • 최초 TOI·안정 동점 선택
  • 정지·반사·관통·피해 사건
  • 남은 시간·갱신된 상태 재검사
  • 종료 또는 반복 상한의 안전 처리
  1. 권위 시작 상태·전체 이동 sweep → 최초 TOI·안정 동점 선택: 보수 후보→정밀 판정
  2. 최초 TOI·안정 동점 선택 → 정지·반사·관통·피해 사건: 접촉 규칙
  3. 정지·반사·관통·피해 사건 → 남은 시간·갱신된 상태 재검사: 시간·속도 갱신
  4. 남은 시간·갱신된 상태 재검사 → 종료 또는 반복 상한의 안전 처리: 진행량·횟수 제한

접촉 여유와 단위·형상 크기

수치 오차로 계산 위치가 표면 안쪽일 수 있어 마지막 확인된 안전 위치·보수 TOI·법선 방향 여유를 사용할 수 있습니다. 큰 임의 epsilon은 작은 틈을 막거나 물체를 밀어내 게임 규칙을 바꿉니다. world 단위·형상 크기·속도·정밀도에 맞춰 오차 bound와 접촉 등호를 정의합니다.

접촉 직후 t≈0에서 같은 표면이 반복되면, 수치 재접촉을 새 피해로 계속 세지 않도록 최소 시간 또는 공간 진행량을 요구합니다. 그래도 반복될 수 있으므로 최대 iteration과 접촉 manifold·대상별 재접촉 정책을 두고, 상한에 닿으면 안전 정지·소멸처럼 정해 둔 결과를 반환합니다. 이 경우 예산이 끝났다는 사실을 충돌 없음으로 바꾸지 않습니다.

관통 사건과 유효 피해 Dedup 기준

한 tick에 대상 A(t=.2),B(t=.6)를 만나면 TOI 순으로 처리하고 관통/반사 후 남은 경로를 다시 계산합니다. 같은 TOI의 동점은 안정 대상 ID 등으로 고정합니다. 동일 target 재접촉을 허용할지는 공격 규칙입니다.

식별 역할
projectile ID+generation 재사용된 투사체 구분
기준 tick·contact ordinal 한 tick의 여러 사건 구분
target ID+generation 대상 재생성 구분
event ID 같은 사건 재전달 제거

projectile+tick만 dedup key로 쓰면 B의 유효 피해도 사라질 수 있습니다. tick 경계 접촉은 반열린 구간 등 일관된 귀속이나 안정 event ID로 두 번 세지 않게 합니다. 최종 위치·충돌 시각은 client 시각 효과와 구분해 보냅니다.

끝점 검사·정밀 판정 기준과 강건성 시험

얇은 벽·고속·낮은 tick·움직이는 대상·평행/모서리·시작 내부·연속 반사·관통·t=0/1을 시험합니다. miss·중복 효과·반복 상한·CPU를 함께 봅니다. 이 노트는 충돌 설계이며 실제 물리 엔진의 수치 강건성을 시험한 결과는 아닙니다.

후속·관련 개념

함께 읽을 문서

전체 기술 지식
선택 연습 · 관련 질문 3개

질문은 이해를 확인하는 보조 자료입니다. 학습 경로와 문서의 범위는 질문 수와 독립적입니다.