낑깡의 게임 프로그래밍 도전기

Unity로 Simulation 하기 (Articulation Body) 본문

Unity C#

Unity로 Simulation 하기 (Articulation Body)

낑깡겜플밍 2024. 7. 12. 14:42
반응형

유니티 코리아 유튜브를 보면서 배운 내용 정리!

Rigidbody 는 유니티에서 기본적으로 쓰이는 물리 적용 기능이다.

그러나 디지털 트윈이나 시뮬레이션 용으로는 오류 발생도 잦고 부족한 감이 있다.

리지드바디가 안좋은 것이 아니다. 게임을 할때는 퍼포먼스도 중요하기 때문에 최적화 측면에서는 좋으나 최적화를 포기하고 좀더 정교한 물리의 결과를 얻고자할 때 Articulation Body를 사용하는 것이다.

 

 

충돌이 잦을 때 흐틀러짐 현상이 있고 상대 질량차이가 크면 수치가 정확하지 않기도 하다. 이러한 점 때문에 시뮬레이션 용으로 쓰기는 힘들다 

다수의 컴포넌트가 필요하고 결과가 부정확하다.

 

VHACD는 매우 정교하나 작은 오브젝트에는 오히려 독이 되기도 한다

오른쪽사진의 위는 컨벡스로 잡은 것이고 아래는 VHACD로 잡은 것이다

컨백스는 삼각형 갯수 제한(255개? 정도)이 걸려있어서 최적화를 하기위해 저렇게 생성된다.

VHACD방식은 오브젝트의 메쉬콜라이더를 여러개 생성한다. 삼각형 갯수 제한이 있는건 마찬가지지만 여러개로 나누어 생성하는 듯하다. (VR이나 AR에서 물체를 손으로 잡는 프로젝트에서 많ㅇ이 사용한다.)

별도의 컴퓨터 그래픽스에 대한 지식을 가지고 파라미터 설정이 필요함

 

캐드에서 패키지 형태로 내보내 주는 애드온이 있다.

비교. 프로젝트 목적에 맞게 생성

Articulation Body는 Constrains의 Freeze 같이 움직임을 제한 할 수 있는 오브젝트는 딱 한개만 지정 할 수있다. 나머지의 각각의 오브젝트에 연결되어서 움직임.

따라서 Root를 하나 설정 할때는 로봇팔이면 하단 지지대나 로봇이면 덮개 등으로 설정한다. 

만약 이런 오브젝트를 전체 다 움직여야한다면 빈오브젝트를 만들어 루트로 하고 그밑에 넣어줌

루트 설정
컴포넌트 추가

왠만하면 Discrete를 쓰면된다고 한다.

 

DOF : 자유도 / 4번 구형은 실질적으로 잘 사용되진 않음
Anchor를 맞추는게 가장 중요

유니티는 m 기준이고 캐드는 mm가 기준이기 때문에 그 부분을 잘 고려해서 사용하여야한다

캐드의 질량중심, 회전축 기준으로 미리 앵커를 맞추는게 더 편하다.

물리 진동학 1차 선형 방정식 기반. 색깔 별로 서로 쌍임
바로 다음 프레임에 해당 위치로 이동
바로 다음 프레임에 해당 속도로 이동

앞서 설정한 조인트 타입과 관련하여 생각하면된다.

유니티에서 앵커잡기 힘드니 캐드에서 잡아두고 임포트하는게 좋다.(보통 모델들은 엄청 복잡한데 앵커를 다 잡아야해서 모델러와 원활한 협의가 필요하다고 한다 ㅎㅎ)

 

*참고했던 영상

https://youtu.be/otm3FtRn27g?si=PKnxUFNC2bFN8MhK

 

반응형