상세 컨텐츠

본문 제목

FT_Newton: 물리 엔진 개요 - (2)

Computer Graphics/FT_Newton

by Banjosh 2025. 1. 10. 11:47

본문

물리 엔진을 설계하기 전, Box2D 코드를 분석하고 『게임 물리 엔진 개발』 책을 통해 기본 개념을 공부했다. 덕분에 물리 엔진의 구조를 어느 정도 이해하고 큰 틀을 잡을 수 있었다.

결론적으로, 물리 엔진의 큰 흐름을 이해할 수 있었다.


물리 엔진의 구조

Initialization (초기화)

렌더링 루프에 들어가기 전, 물리 엔진이 작동할 환경을 설정하는 단계

  1. Generate World
    • 물리 엔진이 작동하는 세계를 생성.
    • World 내부에는 물리 처리를 위한 여러 객체가 존재한다.
      • Rigidbody: 물체의 물리 속성을 관리.
      • Fixture: 충돌 감지와 관련된 데이터.
      • Shape: 물체의 모양 정보.
      • Proxy: Broad Phase를 위한 데이터.
  2. Generate Tree For Broad Phase
    • Broad Phase 충돌 감지를 효율적으로 수행하기 위한 트리 구조를 초기화.
    • Main Loop에서 바로 사용할 수 있도록 트리를 미리 준비해놓는 단계

Physics Loop (메인 루프)

렌더링 루프 이전에 실행되며, 물리 연산을 처리하는 메인 단계.

  1. Integrate
    • World 내부의 모든 Rigidbody를 순회.
    • 각 Rigidbody의 누적된 토크를 하나로 합산해 이번 프레임의 물리 속성을 결정.
      • 힘 → 가속도 → 속도 → 위치
      • 토크 → 각가속도 → 각속도 → 각도
  2. Broad Phase
    • Integrate 단계에서 움직인 물체들의 1차 충돌 감지를 수행.
    • AABB (Axis-Aligned Bounding Box)를 활용해 충돌 가능성이 있는 물체 쌍을 판단.
    • 감지된 충돌 쌍은 Narrow Phase로 전달.
  3. Narrow Phase
    • Broad Phase에서 감지된 물체 쌍을 대상으로 실제 충돌 여부를 세밀하게 판단.
    • 충돌이 발생했다고 판단되면, 충돌 정보를 생성해 Solve 단계로 전달.
  4. Solve
    • Narrow Phase에서 생성된 충돌 정보를 바탕으로 충돌 해소.
    • 충돌로 인해 발생한 물체의 겹침 현상을 해결하고, 속도 변화를 처리.

역할 분담

이번 프로젝트에서는 작업을 두 부분으로 나눠 진행했다.

  • 팀원: Initialization, Integrate, Broad Phase
  • : Narrow Phase, Solve

다음 이야기

 다음 글에서는 팀원이 맡은 Initialization, Integrate, Broad Phase 부분을 간단히 정리해볼 것이고, 그 뒤로는 내가 맡은 Narrow Phase와 Solve 구현 과정을 자세히 다뤄볼것이다.

관련글 더보기