일단 나는 눈에 보이는 것들이 있어야, 그 이론들을 내가 맞게 이해했고,
그에 따라 더 나아갈 수 있어서 공부를 더 잘할 수 있는 것 같다.
단순히 이론만 보고 공부하기에는, 이게 맞는건지에 대한 확신이 없기 때문에 더 힘들고 진도도 잘 안나간다.
현재 내가 하고 있는 것은 Chris Hecker의 Collision Rersponse자료를 공부중에 있는데,
Chris Hecker의 자료는 확실히 기본 이론을 공부하는데 좋은 자료인 것 같다.
그래서 Chris Hecker의 자료까지는 기본 소양으로서 이론을 이해하려고 공부하자.
그래서 그 이후부터가 중요하다.
이제 엔진을 구현해야 하는 것이다. 여기에서는 작게해서 점점 크게 만드는 규칙을 잘적용해야 한다.
그러므로, 처음 모든 엔진은 2D에서 부터 시작한다.
z = 0으로 설정하여 무조건 x,y 에 대해서만 작동하는 엔진을 만들 것이다.
또한, 먼저 회전이 없는 물리엔진으로 시작한다.
Chris Hecker의 3D 물리엔진 코드에 따르면
- ComputeForces
- Integrate
- CheckForCollisions
- ResolveCollisions
크게 이렇게 된다.
ComputeForces에서는 일반적인 Gravity, Damping, Spring Force 등을 계산한다.
Integrate에서는 적분해서 새로운 위치, 방향, 속도, angular momentum 등을 계산한다.
CheckForCollisions에서는 충돌하는지를 계산하고, 충돌 데이터를 저장한다.
ResolveCollisions는 그 충돌 데이터에 따라서, 필요한 곳에서 충돌을 해결한다.
첫 번째 ComputeForces의 gravity, damping, spring force에 대해서
간단하게 gravity만을 구현하자. 사실 이것은 이미 구현이 되어있다고 보면 된다.
두 번째 Integrate에서 Chris hecker처럼 간단하게 Euler method로 적분하자.
이것도 구현이 되어있다.
세 번째
이 자료들을 이용해서 괜찮은 Collision Detection을 이용해서 바로 적용하자. 사실 여기 Collision Detection 과 Response가 가장 중요한데, 여기를 잘 이해해서 적용하는게 좋다.
네 번째 Resolve Collisions 일단은 Chris Hecker의 방식으로 충돌 반응을 구현하고,
이 자료를 통해 더 공부하고 개선할 점이 있는지를 본다.
이렇게 2D linear movement에 대해 괜찮은 물리엔진이 만들어졌다면,
여기에 이제 회전을 추가한다.
회전을 추가한 다음에, Damping, Spring Force, Air drag등 여러가지 힘에 대해 공부하고 적용해본다.
그리고 이 모든 것을 공부하고 3D로 넘어가게 된다.
3D에 대해서 다 공부했다면 물리엔진의 개선 작업에 들어가게 되는데,
기본적인 Integrate 방식을 개선시키고
Erin Catto의 좀 더 고급 물리 엔진 개선 방법을 공부하고 적용하고,
Broad and Narrow Phase Collision Detection using Spatial Partitioning기법을 도입하여
아주 많은 물리 객체들의 collision detection의 성능을 끌어올리는 방법또한 공부해서 적용한다. 이 정도된다면 꽤 괜찮은 3D 게임을 만들 지식이 다갖춰질 것이다.
그래서 해야할 일을 정리한다면,
- Chris Hecker 읽고 이론 내용들을 열심히 이해하기 + 코드를 읽고 코드 이해하기
- SAT + GJK를 공부하고 Collision Detection을 나의 물리엔진에 적용하기 (2D)
- Chris Hecker방식으로 Collision Response 구현하기 (2D)
- 좀 더 좋은 Collision Response 방식이 있는지 찾아보고 개선하기 (2D)
- 2D 물리엔진에 회전 적용하기
- 각 종 force에 대해 공부하고, 2D 엔진에 적용하기
- 2D 물리엔진을 3D로 변환하기
- 3D 물리 엔진 개선을 위한 Integrate방식 공부 및 적용
- 3D 물리 엔진 개선을 위한 Erin Catto의 자료 공부 및 적용
- 많은 객체에 대한 성능을 올리기 위해 Broad Phase Collision detection 공부 및 적용
이것을 한 달 이내에 하는 것을 목표로 한다.
9월까지 내가 정리한 10가지 Todo를 모두 실행해야 한다.
먼저 그 첫 단추인 Chris Hecker의 자료를 읽고 잘 이해하는 것이 중요하다.
나의 구현 지식들은 모두 그의 이론에 기반을 할 것이기 때문이다.
이것도 이전의 계획할 때 암시했던 것처럼 마지막으로 다시 말한다.
나는 물리엔진 구현을 위한 해야할 10가지를 9월까지 한 달 이내에 완료한다.
- Chris Hecker 읽고 이론 내용들을 열심히 이해하기 + 코드를 읽고 코드 이해하기
- SAT + GJK를 공부하고 Collision Detection을 나의 물리엔진에 적용하기 (2D)
- Chris Hecker방식으로 Collision Response 구현하기 (2D)
- 좀 더 좋은 Collision Response 방식이 있는지 찾아보고 개선하기 (2D)
- 2D 물리엔진에 회전 적용하기
- 각 종 force에 대해 공부하고, 2D 엔진에 적용하기
- 2D 물리엔진을 3D로 변환하기
- 3D 물리 엔진 개선을 위한 Integrate방식 공부 및 적용
- 3D 물리 엔진 개선을 위한 Erin Catto의 자료 공부 및 적용
- 많은 객체에 대한 성능을 올리기 위해 Broad Phase Collision detection 공부 및 적용
댓글 없음:
댓글 쓰기