물리 엔진 연구

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

제 경우엔 어디서부터 어떻게 공부해 나가야 할지 가이드라인을 찾기가 힘들었습니다. (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’ 에 관련 내용이 잘 나와 있습니다.

물리 엔진 강좌

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

4 Comments

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

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

  2. 물리엔진은 주형님이 추천하신 경로대로하는게 가장 좋은 거 같네요.
    제가 처음에 이 블로그를 접했다면, 이렇게 했을텐데
    여러 시행착오를 거치면서 저도 이제 이러한 물리엔진 연구의 경로에 들어가게 되었네요.

    특히 Box2D개발자인 Erin Catto의 GDC 발표들은 정말 좋은 거 같아요.
    그리고 Bullet Physics Forum의 옛날에 현재 유명한 게임 물리 개발자들의 토론도 볼 수 있어서
    너무 좋구요. 특히 Erin의 설명이 모호할 때는 Bullet Physics에서 Erin Catto 찾아서 관련 게시글 다 뒤지면 궁금한 코드를 왜 이렇게 했는지도 알 수 있더라구요.
    게임 물리를 구현하려는 분들이 이 게시글을 보고 시작하면 좋겠네요.

    1. 댓글 관리가 허술해서 이제야 댓글을 다네요. ^^;

      Erin Catto 님의 발표자료는 항상 정성이 가득한 느낌이었습니다. 예전에 저도 도움이 많이 되었습니다. 찬행님도 그러신것 같군요.

      요즘(?)은 엔진개발자가 워낙 없다보니 이런 일에 대해서 관심이 적은게 사실입니다. 아무쪼록 무엇이 됐든 성공하시길 바랍니다.

Leave a Reply

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