복셀 맵에서 광선이 통과하는 셀을 빠짐없이 검사하려 합니다. 3D DDA는 다음 셀을 어떻게 고르며 광선이 셀의 면·모서리에 걸리면 어떻게 처리하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
3D DDA는 광선을 작은 고정 간격으로 샘플링하지 않고, 현재 복셀에서 각 축의 다음 셀 경계까지 도달하는 매개변수 값을 계산해 가장 먼저 넘는 경계의 셀로 이동합니다. 따라서 광선 길이에 따라 샘플 간격을 임의로 고르는 방식보다 셀을 빠짐없이 순서대로 방문할 수 있습니다. 다만 광선이 면·모서리·꼭짓점을 정확히 통과할 때 어떤 인접 셀을 포함할지는 충돌 의미에 따라 별도로 정해야 하며, 이 규칙을 경계 포함 정책(boundary inclusion policy)이라고 부릅니다.
축별 다음 경계
시작점의 월드 좌표를 셀 크기로 변환해 현재 셀을 얻고, 광선 방향 각 축의 부호로 step을 -1, 0, +1 중 하나로 정합니다. 방향 성분이 0이면 그 축의 다음 경계 시간은 무한대로 두고, 나머지 축의 tMax와 경계 사이 간격에 따른 tDelta를 계산합니다. 가장 작은 tMax를 가진 축의 셀 좌표를 한 칸 이동하고 그 축의 tMax에 tDelta를 더합니다. t가 최대 거리나 광선 끝을 넘으면 종료합니다. 방향 벡터를 정규화하지 않으면 매개변수 t가 실제 거리와 같지 않을 수 있으므로, 최대 방문 거리와 최대 셀 수를 별도로 제한하겠습니다. 두 축의 tMax가 같으면 광선이 셀 모서리를 통과한다는 뜻이고, 세 축이 같으면 꼭짓점에 닿습니다. 한 셀만 선택하면 경계에 닿은 다른 셀의 얇은 장애물을 놓칠 수 있습니다.
보수적 충돌·시야가 필요하면 동시 경계에 접하는 모든 관련 셀을 방문하는 supercover 규칙을 사용하고, 단일 격자 경로의 결정적 순서만 필요하면 우선순위 규칙으로 하나를 선택할 수 있습니다. 후자의 경우에도 실제 충돌 의미가 셀 접촉을 충돌로 보는지 먼저 확인해야 합니다. 정확한 경계값 비교는 부동소수점 오차를 고려해 epsilon이나 정수화된 좌표 정책을 사용하되, epsilon이 인접 셀을 과도하게 포함하지 않도록 시험합니다.
월드와 형상 계약
시작점이 고체 내부인지, 월드 밖인지, 미로딩 청크인지 정합니다. 미로딩 청크를 빈 공간으로 반환하면 ray가 벽을 통과할 수 있으므로 보수적 차단 또는 재시도를 선택합니다. DDA는 점 광선 중심선이 지나가는 복셀을 찾는 알고리즘이지 반경 있는 투사체의 부피 충돌을 대신하지 않습니다. 반경이 있으면 중심선 셀만 후보로 삼을 경우 옆 셀의 벽을 놓칠 수 있으므로, 반경만큼 팽창한 경계와 주변 셀까지 보수적으로 후보에 포함한 뒤 캡슐·박스 스윕이나 실제 형상 검사를 수행합니다. 테스트는 축 평행, 음수 방향, 경계에서 시작, 면·모서리·꼭짓점 동시 통과, 청크 경계, 월드 밖, 부동소수점 오차를 포함합니다. 같은 입력이 플랫폼과 틱마다 같은 셀 순서를 내는지, 방문 상한이 지켜지는지 확인합니다. DDA의 핵심은 단순한 반복문이 아니라 경계 시간의 결정적 순서화(deterministic boundary traversal)입니다.
supercover는 얇은 장애물을 놓칠 가능성을 줄이지만 여러 셀 접촉으로 후보와 중복 충돌이 늘어납니다. 시야 차단은 접촉으로 막을지 내부 진입으로 막을지, 물리 충돌은 접촉을 어떤 형상 판정으로 넘길지 기능별로 정합니다. 동일 면에서 생긴 접촉은 하나의 이벤트로 묶어 중복 피해가 없게 하겠습니다. 부동소수점 tMax의 동점 여부가 플랫폼마다 달라지면 셀 순서가 바뀔 수 있습니다. 가능하면 고정점 좌표를 쓰고, 그렇지 않으면 축 우선순위와 epsilon 범위를 명시해 결정성을 시험합니다. 청크 캐시도 복셀 블록 버전과 광선 스냅샷을 함께 비교하겠습니다. DDA의 결과는 셀 순서와 충돌 후보를 제공할 뿐, 셀 내부 형상과 접촉 깊이까지 확정하지 않습니다. 복셀 재질이 서로 다른 경계에 닿으면 첫 고체 셀을 찾은 뒤 실제 형상으로 좁혀야 하며, 시야와 탄환은 접촉 정책이 다를 수 있습니다. 동일 광선이 여러 셀에 걸쳐도 이벤트 ID와 최소 t로 최종 결과를 하나로 정리하겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 각 축의 다음 경계 시간과 최소값으로 셀을 이동하는 원리를 설명한다.
- 0 방향, 동시 경계, supercover와 단일 선택의 의미를 구분한다.
- 최대 거리·방문 수·미로딩·점 광선과 부피 충돌을 함께 다룬다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- DDA를 고정 간격 샘플링과 같은 알고리즘으로 설명한다.
- 면·모서리 동점의 셀 포함 규칙을 정의하지 않는다.
- 점 raycast가 모든 크기 물체의 충돌을 보장한다고 말한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 광선이 복셀 모서리나 꼭짓점을 정확히 지납니다. DDA와 supercover의 방문 셀 집합은 어떻게 다른가요?
- 매개변수를 실제 거리로 사용하려면 방향 벡터와 셀 크기를 어떻게 정규화하나요?
- 다수 raycast에서 청크·복셀 접근 캐시를 재사용하면서 버전 일관성을 어떻게 유지하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.