Version: 2023.2
언어: 한국어
스위핑 기반 CCD
조인트

추측성 CCD

추측성 충돌 검사는 Continuous Speculative 모드의 CCD 알고리즘입니다.

추측성 충돌 검사는 스위핑 기반 충돌 검사보다 더 적은 계산을 요구합니다. 또한 리니어 움직임(예: 직선으로 움직이는 공)과 회전 움직임(예: 핀볼 기계의 플리퍼가 피벗을 기준으로 회전할 때 공과 충돌하는 경우)의 결과로 발생하는 충돌에도 작동합니다.

그러나 Continuous Speculative는 정확도가 떨어질 수 있으며, 충돌 누락뿐만 아니라 알고리즘이 충돌을 잘못 예측하여 콜라이더가 코스를 벗어나는 ’허위 충돌’이 발생할 수도 있습니다.

추측성 CCD 이해

추측성 CCD는 오브젝트의 리니어 및 각도 모션을 기반으로 오브젝트의 넓은 페이즈 축에 정렬된 최소 경계 상자(AABB)를 늘리는 방식으로 작동합니다. 이 알고리즘이 추측성인 이유는 다음 물리 단계에서 접촉 가능한 모든 컨택트를 선택하여 솔버에 제공하기 때문이며, 이를 통해 모든 컨택트 제약 조건이 충족되어 리지드바디가 충돌을 통과하지 않도록 할 수 있습니다.

경로에 벽이 없다면 t0에서 이동하는 구체가 t1 위치에 도달할 수 있습니다. 추측성 알고리즘은 AABB를 타겟 포즈로 팽창시켜 각각 n1 및 n2 노멀을 포함하는 2개의 컨택트를 감지합니다. 그런 다음 알고리즘은 구체가 벽면을 통과하지 않도록 솔버에 이러한 컨택트를 유지하도록 요청합니다.
경로에 벽이 없다면 t0에서 이동하는 구체가 t1 위치에 도달할 수 있습니다. 추측성 알고리즘은 AABB를 타겟 포즈로 팽창시켜 각각 n1n2 노멀을 포함하는 2개의 컨택트를 감지합니다. 그런 다음 알고리즘은 구체가 벽면을 통과하지 않도록 솔버에 이러한 컨택트를 유지하도록 요청합니다.

현재 속도에 기반하여 팽창된 AABB는 이동 궤도의 가능한 모든 컨택트를 감지할 수 있도록 지원하여 솔버가 누락된 충돌(‘터널링’)을 방지할 수 있게 합니다.

추측성 CCD의 경우 솔빙 및 통합 단계가 아닌 충돌 검사 단계 동안에만 컨택트를 계산하기 때문에 일반적으로 스위핑 기반 메서드보다 더 적은 리소스를 소모합니다. 또한 추측성 CCD는 오브젝트의 리니어 및 각도 모션에 기반하여 넓은 페이즈 AABB를 확대하므로 스위핑 기반 CCD에서 누락될 수 있는 컨택트도 찾을 수 있습니다.

그러나 추측성 CCD는 오브젝트의 모션이 부적절하게 추측성 컨택트 포인트의 영향을 받는 허위 충돌(‘고스트 충돌’)을 초래할 수 있습니다. 이는 추측성 CCD가 근접점 알고리즘에 기반하여 모든 잠재 컨택트를 수집하여 컨택트 노멀의 정확도가 감소하기 때문입니다. 이러한 이유로 속도가 빠른 오브젝트가 테셀레이션된 충돌 부분을 따라 미끄러져 튀어오르는 문제가 발생할 수 있습니다. 예를 들어, 다음 다이어그램에서는 구체가 t0부터 오른쪽으로 수평 이동하며, 통합 후 예상되는 포지션은 t1입니다. 팽창된 AABB가 b0b1 상자와 겹치고 CCD는 c0c1에 2개의 추측성 컨택트를 도출합니다. 추측성 CCD는 근접점 알고리즘을 사용하여 컨택트를 생성하므로 c0는 솔버가 램프라고 추측하는 매우 경사진 노멀을 포함합니다.

근접점 알고리즘이 부정확한 컨택트 노멀을 생성하여 솔버가 c0의 컨택트 포인트가 램프라고 추측
근접점 알고리즘이 부정확한 컨택트 노멀을 생성하여 솔버가 c0의 컨택트 포인트가 램프라고 추측

이처럼 경사진 노멀로 인해 t1은 통합 후 직선으로 이동하지 않고 위로 튀어오르게 됩니다.

c0에서 발생한 허위 충돌로 인해 구체가 직선으로 이동하지 않고 위로 잘못 튀어오름
c0에서 발생한 허위 충돌로 인해 구체가 직선으로 이동하지 않고 위로 잘못 튀어오름

또한 추측성 CCD에서는 추측성 컨택트가 충돌 검사 단계 동안만 계산되므로 충돌 누락이 발생할 수 있습니다. 컨택트 솔빙 중 오브젝트가 솔버에서 과도한 에너지를 받으면 통합 후 팽창된 초기 AABB를 벗어날 수 있습니다. AABB 외부에서 충돌이 발생하면 오브젝트가 그냥 통과하게 됩니다.

예를 들어, 다음 다이어그램은 막대가 시계 방향으로 회전하는 동안 구체가 t0에서 왼쪽으로 움직이는 모습을 나타냅니다. 구체가 충돌에서 과도한 에너지를 받으면 t1의 팽창된 AABB(빨간색 점선으로 표시된 사각형)를 이탈하게 됩니다. 아래의 파란색 상자에 나타난 것처럼 AABB 외부에서 충돌이 발생하면 구체가 충돌을 누락하고 AABB를 그냥 통과할 수 있습니다. 이는 솔버가 팽창된 AABB 내의 컨택트만 계산하며, 솔빙 및 통합 단계 중 충돌 검사가 수행되지 않기 때문입니다.

추측성 CCD를 사용하는 팽창된 AABB를 포함한 구체. 추측성 CCD는 충돌 검사 단계 중에만 컨택트를 계산하므로 충돌 누락이 발생할 수 있습니다.
추측성 CCD를 사용하는 팽창된 AABB를 포함한 구체. 추측성 CCD는 충돌 검사 단계 중에만 컨택트를 계산하므로 충돌 누락이 발생할 수 있습니다.
스위핑 기반 CCD
조인트