Ian Millington의 책 [http://www.kangcom.com/sub/view.asp?sku=200611020031 Game Physics Engine Development]를 보고 만드는 3D 게임 물리 엔진. 게임 물리 엔진이기 때문에 '''실시간 강체 시뮬레이션'''을 중점적으로 다룬다. 이 책의 온라인 사이트: http://procyclone.com/ 게임 물리 엔진은 크게 세 개로 나눈다. 1. 입자 엔진(particle engine) 2. 질량 집합체 엔진(mass aggregate engine) 3. 강체 엔진(rigid body engine) == 입자 엔진 == 입자 엔진은 모든 물체를 크기 없는 입자(particle)로 표현한다. 입자에 힘(force)을 작용하면 입자가 움직인다. 고등학교 물리 시간에 단일 물체의 가속 운동이니 힘의 작용 따위를 배웠을 텐데 단순히 그런 물체를 동시에 수천 개 움직일 수 있다고 보면 된다. 사실 충돌 처리도 없어서 물리 엔진이라고 부르기에는 조금 그렇다. attachment:particle_engine_sample_00.png attachment:particle_engine_sample_01.png * 예제 * FLiNT 엔진: [http://flintparticles.org/examples] * Stardust 엔진: [https://code.google.com/p/stardust-particle-engine/] == 질량 집합체 엔진 == 질량 집합체 엔진은 입자들을 용수철(spring) 또는 막대(rod) 같은 구속(constraint)으로 묶어 하나의 물체처럼 시뮬레이션할 수 있다. 예를 들어 하나의 상자 집합체는 점 4개와 막대 6개로 구성된다. 현실에서 물체는 수많은 입자들로 구성되는데, 질량 집합체 엔진은 물체의 핵심 입자들만 가지고 그 물체를 기술하려는 접근법으로 이해할 수 있다. 질량 집합체 엔진에서는 물체의 회전을 따로 구현할 필요가 없는데 가령 모서리의 한 입자를 잡고 끌면 나머지 점들이 따라오면서 자동으로 회전되기 때문이다. 이해하기도 구현하기도 매우 쉬우나 물체의 골격만으로 어설프게 시뮬레이션하기 때문에 실행해보면 물체가 찌그러진다든지 움푹 패인다든지 조금씩 변형이 일어난다. Locoroco라면 모를까 의자를 바닥에 집어 던졌는데 의자가 고무공처럼 출렁이는 것을 바라지는 않을 것이다. attachment:mass_aggregate_engine_sample_00.png 입자 20개를 생성하고 모든 쌍을 용수철로 연결하면 자연스레 균형을 이루어 안정된 구조로 수렴한다. attachment:mass_aggregate_engine_sample_01.png 사각형은 입자 4개와 막대 6개, 삼각형은 입자 3개와 막대 3개로 구성된다. attachment:mass_aggregate_engine_sample_02.png 몸의 관절들을 입자로 보고 막대로 연결하면 플래시 게임 [http://www.kongregate.com/games/eric_gurt/dead-drunk-1-9 DeadDrunk]의 그 졸라맨을 만들 수 있다. 지 혼자 춤사위 * 예제 * 옷감(cloth) 시뮬레이션: http://www.youtube.com/watch?v=8bAQbJzqa-0 == 강체 엔진 == 강체 엔진은 내가 아직 완성을 못 해서