혼란 스럽습니다. 혼란스럽지 않고, 6 가지 테스트 프로그램을 사용하여 어떤 알고리즘이 가장 적합한 지 알기를 원하지 않습니다. 그래서 나는 내 경험이주는 혜택을주기 위해 여기에있는 나의 전문가 친구에게 물어볼 줄 알았다.오브젝트 간의 효율적인 충돌 감지를위한 최상의 알고리즘
시나리오는 내부에있는 객체의 크기에 비해 상당히 넓은 영역이있는 3D 장면입니다. 장면에는 수천 개의 객체가있을 수 있습니다. 객체의 크기는 단위의 10 분의 1에서 최대 약 10 단위까지 다양하지만 크지는 않습니다. 개체는 함께 클러스터되는 경향이 있지만 이러한 클러스터는 장면의 어느 곳에서나 나타날 수 있습니다. 모든 객체는 동적이며 움직입니다. 클러스터는 함께 움직이는 경향이 있지만, 속도가 항상 동일하지는 않습니다. 또한 고려해야 할 정적 형상이 있습니다. 많은 수의 동적 객체가 있지만 장면에 정적 객체도 있습니다 (정적 객체는 동적 객체보다 한 두 자릿수 큰 경향이 있습니다).
이제 장면의 모든 항목에 대해 효율적으로 충돌 감지를 수행하기위한 공간 데이터 구조가 필요합니다. 알고리즘이 렌더링 파이프 라인에 대해서도 가시성 쿼리를 지원하면 좋을 것입니다. 단순화를 위해, 여기서 충돌 검출은 광역 위상 (즉, 모든 동적 객체는 단지 완벽한 구체 임)이라고 가정한다.
(1) 옥트리 (2) 느슨한 옥트리 (3) 선형 옥트리 (+ 느슨한) (4) KD 트리 (5) BSP :
그래서, 내 연구에 나는 중 하나를 사용할 수 있습니다 트리 (6) 해싱
지금까지 (6) 내가 시도한 유일한 것입니다. 장면의 오브젝트가 균등하게 퍼져 나간다면 실제로는 속도 측면에서 볼 때 매우 뛰어납니다 (시스템에서 1ms 미만의 충돌을 8192 건 체크 인했습니다). 만약 모든 물체가 더 작은 영역으로 뭉치면 좋은 알고리즘은 아닙니다.
누구나 사용할 수있는 통찰력이 있습니까? 아니면 속임수를 쓸 수있는 방법이 있습니까? 어떤 일이 생기더라도 정적 지오메트리에 대해 별도의 BSP 트리를 사용할 수 있다고 생각합니다. 저는 역동적 인 "구체"가 제가 여기에서 가장 염려하는 것 같다고 생각합니다. 참고 : CUDA 없음, 이것은 CPU 전용입니다 : p.
감사
편집 : 좋아, 플로리스 덕분에, 나는 AABB 나무에 대한 자세한 정보를 발견했다. GameDev에 대한 토론은 여기 http://www.gamedev.net/topic/308665-aabb-tree---wheres-the-poly-o_o/입니다. 좋은 타협처럼 보입니다.
최종 수정 : 바퀴를 재발 명하지 않기로 결정했습니다. 총알 물리학 라이브러리가이 모든 작업을 수행 할 수 있습니다 (AABB 트리가 포함되어 있으며, 아마도 잘 최적화되어있을 수도 있습니다).
동적 장면에 대해 KD 트리를 건너 뛸 수 있습니다. 정적 데이터 세트에 대한 KD 트리의 작업을 수행하면 단일 요소가 이동할 때마다 전체 (하위) 트리를 다시 빌드해야합니다. – SingleNegationElimination
예, 동적 장면에서 사용하기에는 너무 집중적 인 것처럼 보입니다. – Robinson