Post Lists

2019년 2월 28일 목요일

Physics 공부 계획 다시

지금 취업 준비를 하고 있지만,
나는 헤매다가 이제 Physics의 세계에 발을 담구었다고 생각한다.
그래서, 취업 준비를 하면서도 이 Physics를 공부할 생각이다. 하지만 이전처럼
빡세게는 하지 않고, 올바른 길을 따라서 방향을 바로잡고 천천히 할 생각이다.

일단 큰 줄기는
Box2D-lite -> Box2D -> 나의 3D Physics Engine.

현재 Box2D-lite의 내용은 대부분 이해하고 구현했다.
이제 문제는 Box2D인데, 이 Box2D를 상당히 잘 이해하고 구현해야,
올바른 3D Physics로 넘어갈 수 있는 발판을 마련하게 된다. 그리고,
Box2D를 상당히 잘 이해해야, 여기에서 더 진보된 Physics도 내가 나중에
논문이나  최신 자료들을 보면서 구현할 수 있게 된다.

그래서 기본 Physics Engine을 구현하게 되면, 이제 Inverse Kinematics도 공부할 준비가 되었을 것이다. 그래서 더 큰 줄기는
2D Physics -> 3D Physics -> Inverse Kinematics -> Animation 가 될 것이다.

그렇다면 가장 큰 줄기들을 잘 따라가게 할, Box2D를 이해하는게 중요하기 때문에,
나는 여기에서 Box2D를 어떻게 공부할지에 대한 내용을 열거할 것이다.
  • Game Programming Gems 2006 Erin Catto - Buoyancy in 3D 
  • GDC 2006 Erin Catto - Fast and Simple Physics using Sequential Impulses (이건 이미 했지만, 기본이 되는 것이므로 반복하자) - DEMO
  • GDC 2007 Erin Catto - Physics 1 Modeling and Solving Constraints
    • Constraint Formulas
    • Deriving Constraints (Joints, Motors, Contact)
    • Building a Constraint solver
  • GDC 2007 Erin Catto - Physics 2
    • Constraint solver
    • SAT
    • GJK
  • GDC 2008 Erin Catto - Physics Tutorial Modeling and Solving Constraints
    • Jacobians, Lagrange Multipliers
    • Joints, Motors, Contact
    • Sequential Impulses
  • GDC 2009 Erin Catto - Numerical Integration
    • Differential Equations
    • Numerical Integrations
  • GDC 2009 Erin Catto - Modeling and Solving Constraints - DEMO
    • Jacobians, Lagrange Multipliers
    • Joints, Motors, Contact
    • Sequential Impulses
  • GDC 2010 Erin Catto - Computing Distance (using GJK) - DEMO
  • GDC 2012 Erin Catto - Diablo 3 Ragdolls
  • GDC 2013 Richard Togne - Iterative Rigid Body Solvers
  • GDC 2013 Erin Catto - Continuous Collision 
  • GDC 2013 Dirk Gregorius - The Separating Axis Test between Convex Polyhedra - DEMO
  • GDC 2013 Gino van den Bergen - Spatial Data Structures (AABB Tree)
  • GDC 2014 Erin Catto - Understanding Constraints
  • GDC 2014 Dirk Gregorius - Implementing Quickhull
  • GDC 2015 Dirk Gregorius - Robust Contact Creation for Physics Simulations
일단 GDC에서 발효된 자료들을 모두 읽고 공부할 것이다. 이 내용들은 모두 Box2D에 들어가있는 내용이기 때문에, 이 내용들을 모두 공부하고, 알고 이해하고 있어야 한다.

이 년도의 순서를 따라갈 필요는 없다. 어쨋든 결국에는 다들 같은 말을하고 있기 때문에, 모든 자료들을 반복해서 봐야할 것이다.

일단은 내 생각에 LCP를 좀 이해하는 것이 먼저일 것 같다. 왜냐하면 그게 기반으로 좀 더 contact를 정확하게 처리하고, 그리고 contact를 어떻게 관리하는지, 그리고 충돌 탐지를 어떻게 하는지가 더해지기 때문이다. 그리고나서 더 어려운 고급 충돌탐지(GJK, Gauss Map of convex polyhedra), Physics Object 관련하여 Hull 형성 등 여러가지가 추가된다. 그러고나서 Ragdoll, Destructible Object 등 application에 대해서 편하게 공부할 것이다.

그렇다면 내가 할 것은

LCP solver -> 고급 충돌탐지 (GJK, Gauss Map) -> QuickHull -> 여러가지 충돌 탐지를 위한 오브젝트 및 탐지 알고리즘 형성 -> Continuous Collision (+ Swept Collision) -> Destructible Object -> Inverse Kinematics -> Ragdolls

뭐 이 순서는 내가 아직 어떻게 공부해야 할지 모르니, 당연히 바뀔 것이지만, 일단 이렇게 시작해보자. 따라서 결론적으로 정리해보자면,

매우 크게
2D Physics -> 
Inverse Kinematics + Ragdoll -> 
Animation -> 
3D Physics로 전체 구현

크게(좀 더 구체적)
Box2D-lite -> Box2D -> 나의 3D Physics Engine.

작게(완전 구체적)
LCP solver -> 
고급 충돌탐지 (GJK, Gauss Map) -> 
QuickHull -> 
여러 충돌 탐지를 위한 오브젝트 형성 및 탐지 알고리즘 -> 
Continuous Collision (+ Swept Collision) -> 
Destructible Object -> 
Inverse Kinematics -> 
Ragdolls -> 
모두 3D로 전환

댓글 없음:

댓글 쓰기