지금 최근에 Terrain Physics를 하는 도중에
Triangle - OBB의 Collision Detection으로부터 Contact Manipold를 계산하는 것에 실패하여 상당히 시간을 소모하고 있다.
그래서 현재 Game Physics Engine Development (GPED)를 따라서 만든 물리 엔진은 상당히 많은 불안정성을 가지고 있다. 일단 한 OBB를 다른 OBB에 올리면 매우 많은 jitter가 있게 된다. 그리고, plane과 OBB의 충돌처리에서도, OBB가 왔다갔다 하는 것을 보여주고 있다.
그래서 더 이상 이 플랫폼 위에서, 계속 간다면, 나에게 불편한 점이 많이 생길 것 같다.
이러한 생각을 하게 된 이유는, 최근의 물리엔진으로 널리쓰이는 Box2D와 BulletPhysics 라이브러리들의 코드를 보면서 되었는데. 게다가
https://www.gamedev.net/forums/topic/699657-obb-triangle-and-sphere-triangle-contact-datamanifold-with-sat/?tab=comments#comment-5394285
이 글에서 Randy Gaul에 의한 말이 내가 GPED 기반으로 하는 것을 더욱 멈추게 만들었다.
'''
I would recommend to stop reading Ian Millington's book. It's not state of the art and uses a lot of out-dated technology. It's an OK book for an introduction to collision detection, but as you are noticing in your post, it must quickly be retired in favor of other resources.
'''
그래서 나는 이제 GPED를 버리고, Randy Gaul이 GameDev.net에 올린 글의 추천에 따라.
Box2D를 기반으로 다시 물리엔진을 다시 쌓도록 해야할 것 같다. GPED를 통해서 Physics의 기반을 쌓았고, 그걸로 코드까지 작성을 해보았으니, 다시 그 코드를 버리고 더 좋은 알고리즘 시스템으로 넘어갈 필요가 있을 것이다.
왜냐하면 Box2D나 BulletPhysics같이 요즘 물리엔진들의 vertex 단위까지 접근하여서 물리처리를 하고 있기 때문이다. 그래서 GPED는 그렇게 하지 않고 있기 때문에, 그것과 관련한 친절한 자료들이 많이 없고 이해하기도 힘든점이 많다.
따라서, 나는 Box2D를 만든 Erin Catto가 2D부터 만들어서 3D로 한 것처럼, 그리고 Radny Gaul이 주장한 것처럼
https://www.gamedev.net/forums/topic/699352-continuous-gjk-for-linear-translations/?tab=comments#comment-5393965
여기에서 Erin Catto는 다음과 같이 학습법을 말하는데.
2D case를 기반으로 시작하고, 실제 있는 코드를 베이스로 시작하라고 한다. 그리고 너가 만드는 변화마다, 너가 버그를 도입하는지 안하는지를 찾을 수 있고, Erin의 매우 좋은 debug rendering의 이득을 얻을 수 있다고 한다. 그러고나서 작동이 된다고 한다면, 그 버전에서 3D로 포팅하려고 해라. 이것은 실제로 간단한 프로세스 ~~
나는 현재 엔진 말고, 따로 물리엔진을 다시 처음부터 시작하려고 한다.
그래서, 그것을 기반으로, 2D를 먼저 간단하게 만들고. 3D로 포팅하고 나의 엔진에 이식한다.
그래서 그 간단한 것을 점점 업그레이드하고, 3D로 포팅하고, 다시 나의 엔진으로 이식한다.
이런식으로 해야 내가 올바른 길로 갈 수 있을 것 같다.
상당히 돌아와 버렸지만, 어쨋든, 다시 좋은 방향을 찾았기 때문에, 나는 이 방향으로 다시 걸어갈 것이다. 1월 말까지 하는 프로젝트에 대해서는 다시 어떻게 할지는 알아보긴 해야할 것이다.
==========================================================
Randy Gaul이 만들어 놓은 2D Physics 튜토리얼을 기반으로 해야겠다. 아마 이 사람이 Box2D 기반으로 했을 테니, 이것을 먼저 공부한 후에, 더 나아가도록 해야겠다.
https://gamedevelopment.tutsplus.com/tutorials/how-to-create-a-custom-2d-physics-engine-the-basics-and-impulse-resolution--gamedev-6331
https://gamedevelopment.tutsplus.com/tutorials/how-to-create-a-custom-2d-physics-engine-the-core-engine--gamedev-7493
https://gamedevelopment.tutsplus.com/tutorials/how-to-create-a-custom-2d-physics-engine-friction-scene-and-jump-table--gamedev-7756
https://gamedevelopment.tutsplus.com/tutorials/how-to-create-a-custom-2d-physics-engine-oriented-rigid-bodies--gamedev-8032
=======================================================
댓글 없음:
댓글 쓰기