물리 엔진 연구

물리 엔진은 복잡한 수식들이 코드로 풀어져 있는 블랙박스 같아서 내부 원리를 알려면 소스 분석을 하기 전에 관련 수학과 이론을 먼저 배워야 합니다. (소스 코드는 상대적으로 짧은 편입니다)

제 경우엔 어디서부터 어떻게 공부해 나가야 할지 가이드라인을 찾기가 힘들었습니다. (Eberly 형님의 ‘게임 물리 바이블’ 책이나 Baraff 아저씨 문서를 보라고 하는데 기초지식이 부족하니 처음부터 막혔습니다.) 그래서 비교적 쉬운 책부터 보기 시작했는데.. ‘Essential Mathematics for Games & Interactive Applications’ (국내 번역서 제목은 ‘게임&인터랙티브 애플리케이션을 위한 수학’) 의 물리파트가 내용도 어렵지 않고, 짧은 소스코드도 나와 있어서 처음 물리 엔진을 이해하는 데 도움이 많이 됐습니다. (오타가 몇 군데 있어요)

그렇게 입문서(?) 들을 보다 보면 필요한 수학들도 차차 드러납니다. 선형대수, 벡터미적분, 미방, 수치해석, 수리계획법, .. 등등. 대학교 때 열심히 공부해 두었다면 그 만큼 시간이 단축될 수 있겠지요. 열거한 수학을 모두 공부하실 필요는 없지만 선형대수 같은 경우 대부분의 내용이 활용되기 때문에 전체적으로 공부해 두시는게 좋습니다.

여기까지 하셨으면 이후에는 좀 더 어려운 책이나 인터넷에서 관련 문서들을 찾아 읽으시면 됩니다.

추천 책/문서로는,

1. Iterative Dynamics with Temporal Coherence – Erin Catto
: Box2D 개발자이자 현재 블리자드에서 물리엔진을 만들고 계시는 Erin Catto 형님의 글입니다. 전체적인 물리 엔진 구현 방법이 깔끔하게 정리되어 있습니다. 인기 있는 LCP solver 중에 하나인 PGS (Projected Gauss Seidel) method 의 의사코드가 담겨 있습니다.

2. A Unified Framework for Rigid Body Dynamics
: 독일 어느 대학원 석사 논문 (영문) 입니다. 앞의 문서 보다 훨씬 디테일하게 정리한 문서입니다. 여러 구현방법들을 체계적으로 정리해놨습니다.

3. 게임 물리 바이블 (원서 Game Physics) – David H. Eberly
: 이 책은 LCP 파트만 읽어 봤습니다. LCP 를 다루는 수학 (Mathematical Programming) 에 대해서 자세히 나와 있습니다.

4. An Algorithm for the Fast Solution of Symmetric Linear Complementarity Problems
: PGS method 와 관련된 내용이 자세히 설명되어 있습니다.

5. Soft Constraints – Reinventing the Spring
: 오픈소스 물리엔진인 ODE 의 CFM, ERP 파라미터를 완벽하게 설명하고 있습니다. 안정적이고 견고한 Spring 시뮬레이션을 위한 방법을 제시합니다.

여기까지는 문서들은 주로 동역학 (Dynamics) 처리에 관한 내용들이고, 충돌 처리 (Collision Detection) 는 따로 공부하셔야 합니다. 물리 엔진에서는 단순히 충돌 유무만 가리는게 아니고 충돌점, 충돌 normal, 충돌 깊이 정보를 필요로 합니다. 유명한 충돌 알고리즘은 SAT, GJK/EPA 정도가 있는데.. God of War 개발자이신 Christer Ericson 아저씨의 ‘Realtime Collision Detection’ 이나 ‘Collision Detection in Interactive 3D Environment – by Gino van den Bergen’ 에 관련 내용이 잘 나와 있습니다.

물리 엔진 강좌

개인적으로 공부한 내용들을 정리해 봤습니다.

2 Comments

  1. 블로그에서 많은 정보 얻어갑니다. 게임에 관해 관심이 많은 컴퓨터 공학과 학생인데, 인터넷에서는 이해할 수 없는 내용이 많더군요. ‘게임&인터랙티브 애플리케이션을 위한 수학’책 구매했습니다. 큰 도움이 됐으면 좋겠네요..

    1. 반갑습니다. 까페니즘님. 그 책은 저도 추천하는 책입니다. 원서는 개정판이 몇번 나온걸로 아는데 가능하면 원서를 더 추천합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *