물리엔진 제작 도전 2 - Octree
서론 물리엔진에서 충돌을 실행하기 위해선, 모든(...) 물체 끼리 서로 검사를 해줘야 한다. 이지만, 다행히도 실제로 그렇게 하는 물리엔진은 없다. 그리고 없어야 한다. 우리는 충분히 가까운 물체끼리만 검사할 수 있는 방법을 찾아야 한다. 이전 글을 읽었다면 `충분히 가까운`을 보고 AABB를 떠올릴 것이다. 그렇다. AABB를 활용하면 물체 별 순회 횟수를 줄일 수 있다. 후보 1안) 물체별 추가로 더 큰 AABB를 적용한다. 껍질만 늘었다 아쉽게도 결국 서로 모든 물체끼리 검사를 해야된다는 것은 변하지 않는다. 게다가 AABB가 크든 작든 연산량은 동일하기에, 실제 충돌 시 더 많은 연산을 하게 된다. 2안) 격자(AABB)로 나누어 좌표에 따라 물체들을 위치시킨다. 꼭 1칸에 1개만 있을 필요는 없다. 1안에 비해서는 훨씬 낫다. 원하는 물체의 AABB와 겹치는 격자 안에 있는 물체끼리만 검사하면 된다. 하지만 치명적인 단점이 있다. 비어있는 격자도 '비어있음'을 알기 위해