Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Eric Han's Game Programming Blog

3D 강체 시뮬레이션 엔진 본문

포트폴리오

3D 강체 시뮬레이션 엔진

Eric_Han 2022. 12. 2. 02:57

 

CS500 - Physics Simulation

 

이 프로젝트는 3학년 봄학기때 만들었던 물리엔진 프로젝트다. 개인적으로 가장 궁금하기도 했었고, 많이 찾아보던 쪽이라 즐겁게 만들었던 프로젝트였다. 이 과목은 500번대 과목으로 석사 과정을 밟던 대학원생분들과 같이 들었던 강의였다. 그러다보니 나름 프로젝트가 하드하게 굴러갔었다.

 

물리엔진은 크게 3가지 파트로 구성되는데, 각각 광역 페이즈, 충돌감지 페이즈, 레졸루션 페이즈이다. 이 프로젝트에선 각각의 기능들을 Dynamic BVH, GJK-EPA, 시퀀셜 임펄스 방법을 통해 구현했다. 

 

물론 여러 방법들이 있겠지만 3D 물리엔진의 경우 그렇게 크게 디테일한 충돌체를 사용하지는 않는 편이다. 하지만 개인적인 호기심 때문에 상당히 다양한 모양의 충돌체를 구현하려 했고, 그래서 선택한 방법이 Dynamic BVH와 GJK-EPA 알고리즘이다.

 

BVH는 그 특성상 오브젝트를 감쌌을때 상당히 깔끔하게 떨어지기 때문에 바로 채택한 방법이다.

물론 Octree나 다른 방법들도 경우의 수가 되겠지만 나는 딱히 선택하지 않았었다. 

당시에 다른 대학원생중 한명은 3차원 공간의 좌표를 기준으로 해싱 하는 방법을 사용했는데, 비슷한 방법이 GPU gems 3판에도 있던걸 보면 나중에 찾아보려 한다.

 

GJK-EPA의 경우 GJK 알고리즘을 이용하기 위해 고른 충돌감지 기법이다.

물론 훨씬 복잡한 방법으로 충돌감지를 수행할수 있지만 개인적인 선택으로는 그냥 GJK를 이용해 볼록한 물체에 대한 충돌감지만으로 충분하다고 생각한다. 추가적인 오목한 형태는 그냥 별도의 볼록한 물체의 조합을 통해 구현하였다. 

이로 인해 생기는 단점은 역시나 도넛모양이나 구멍뚫린 원기둥 같은 특수한 물체들은 충돌감지가 어렵다는 단점이 있다. 당시에 다른 대학원생(현업에서 일하다 대학원에 오신 분이다.)분은 GPU에서 signed distance field를 베이크해 복잡한 도형의 충돌 처리를 수행하기는 했었다. 개인적으론 매우 흥미로운 접근법이었다.

GJK-EPA의 장점은 역시나 확장하기 쉽다는 것이다. 간단하게 3차원 도형이라도 support 함수의 최대극점을 찾는 방법은 어느정도 윤곽이 보이기 때문이다. 그래서 타원체를 비롯한 타원뿔, 타원기둥, 타원캡슐 등등 볼록한 이차곡면들의 확장을 손쉽게 찾아낼수 있다. 또한 수행 시간 역시 옵션으로 조절이 가능하기 때문에 그 장점은 더더욱 극대화되곤 한다. 간단하게 따져도 이차곡면들은 100% 무한대의 꼭지점을 가지고 있기 때문이다.

 

시퀀셜 임펄스는 그냥 Box2D와 블리자드의 물리엔진 개발자로 유명한 에린카토가 소개한 방법인데, 강의를 듣다보니 나름 성능 대비 처리 능력이 합리적이어서 선택했다. 기본적으로 임펄스 방법은 제약조건이 해결 된다는 정확성을 보장해주지 않는데, 시퀀셜 임펄스의 경우 여러번 반복함으로서 제약조건의 수치가 실제 라그랑지언을 푸는 수준과 유사하게 수렴시킬수 있다는 장점이 있기 때문이다. 물론 다른 접근법도 많아 다른 방법으로 풀어도 되지만 물리엔진은 정확성 뿐만 아니라 속도 역시 생명이기 때문에 골랐다.

 

그 외에는 역시나 몇몇 제약조건을 실제로 만들어보면서 (포인트 제약조건이나 스프링 제약조건 등) 관절 등등에 사용되는 것들을 구현해 보았다. 다만 아쉽게도 학기가 빠르게 끝나버려 추가 토픽은 많이 다뤄보진 못했는데, 그래서 다른 프로젝트때 구현해 보았었다.

 

 

 

 

 

 

 

 

'포트폴리오' 카테고리의 다른 글

3D 변형체 시뮬레이션 테크 데모  (0) 2023.02.16
3D 지형 편집 툴  (0) 2023.02.16
Project Neon  (0) 2022.12.02
Comments