나는 헤매다가 이제 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로 전환
댓글 없음:
댓글 쓰기