Narrow Phase와 Solve 단계를 설계하면서 『게임 물리 엔진 개발』 책과 Box2D 코드를 함께 참고해보았다. 사실 물리 엔진은 정해진 구현 방식이 따로 있는 것이 아니기에, 두 자료에서 제시하는 구현 방법이 다를 수밖에 없었고, 그중 하나를 골라 적용해야 했다. 먼저 각 방법의 특징을 요약해보자.
이 책에서는 대략 아래와 같은 흐름으로 충돌을 처리한다.
Box2D에서는 다음과 같은 방식으로 충돌을 처리한다.
Island의 오브젝트간 충돌 처리를 여러 번 반복 적용해 점진적으로 충돌 해소
처음엔 『게임 물리 엔진 개발』 책을 먼저 읽어서 그런지 무조건 이 방법으로 구현을 하려고 했다. 하지만 책의 내용이 개념 위주로 설명되어있어 구현에 대한 자세한 내용이 없어 아쉬웠고, 특히 우선순위 큐에 쌓여가는 충돌들을 어떻게 처리를 해야할지 감이 잡히지 않았다. 고민을 하다가 찾은 것이 Box2D 코드였고 여기서는 Island라는 개념을 통해 좀 더 직관적으로 충돌을 처리하고 있었다. 무작정 구현을 하기 보다는 내가 이해할 수 있는 방법을 고르자는 생각에 Box2D 방법을 선택하였고, 그 결과 Box2D의 코드를 열심히 분석해 Island 단위의 충돌 처리를 우리의 물리 엔진에 맞게 구현하게 되었다.
이 다음엔 Narrow Phase를 어떻게 처리했는지에 대해 알아보는 글을 쓸 예정이다.
FT_Newton: Narrow Phase / EPA - (6) (0) | 2025.01.15 |
---|---|
FT_Newton: Narrow Phase / SAT vs GJK - (5) (0) | 2025.01.15 |
FT_Newton: Initialization, Integrate, Broad Phase - (3) (0) | 2025.01.10 |
FT_Newton: 물리 엔진 개요 - (2) (1) | 2025.01.10 |
FT_Newton: Vulkan 공부 및 리팩토링 - (1) (0) | 2025.01.06 |