Isaac Sim
Nvidia Omniverse
서론
기존 유니티로 진행한 프로젝트에서 Articulation Body를 활용하여 AMR, Quadruped 등 유니티 환경에 관절 오브젝트를 구현해보았다. Quadruped는 회사에서 잠깐 보았던 내용이여서 별도의 글은 작성하지 않았는데 잘 작동하는 것을 확인하였음. Nvidia Omniverse에서는 이러한 부분이 어떻게 사용이 되는지 알고 싶었고 찾아보니까 관련된 튜토리얼 영상이 있어서 해당 영상 시청 및 크렌인 구동을 진행해보았다.
참고로 설정은 쉽지만 실제 물체와 최대한 비슷하게 움직이게 하기 위해서는 유체, 고체, CAD의 Tree (유니티에서는 Hierarchy, 옴니버스는 Layer?) 의 개념, 진동학 등 많은 개념이 필요하다. 이 부분은 별도로 정리하지 않고 진행하겠음.
시청한 영상의 링크는 맽 밑 참고자료에 넣어 놓았다. 공부 늦게 할 수록 배우기 쉽다는걸 느낀다. Beta 버전 때는 이런 것도 없이 내용 다른 문서 찾아서 직접 하나하나 해봤는데... 유니티 공부하면서 배경지식이 많이 늘어 비슷한 RT3D에 대한 이해도 자체가 올라간 것 같다. 공부가 수월하게 진행되고 있음.
Rigging Processes
Rigging 이라는 단어가... 참으로 애매한데 쉽게 이야기하면 관절을 이어주는 개념이다 Skelectons 같은 다만 이 부분에 대해 유의해야할 점이 이게 기존 Animation 개념으로 구현을 할 것 인지? (눈에만 보이고 역학 고려 X) 아니면 Articualtion 개념으로 구현을 할 것인지? (역학 고려, 설정 복잡) 이 부분을 선택해야 한다. 당연히 Ani로 하는게 쉽고 빠르고 성능면에서도 이점을 볼 수 있다. 이는 Collider 연산을 하지 않기 때문인데 물론 상황에 따라 다를 수는 있음. 일반적으로는 그렇다.
발표자가 이야기 하는 단계는 아래와 같다.
- Assets 준비하기
- To make your life eaiser It's better to rename all of these parts right now to someting inutitive => ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 공감함..
- RigidBody와 Collider 준비하기
Collider는 본인 목적에 맞게 주면된다. 필요 없는 것 까지 걸면 성능에 악영향 - 조인트 설정하기
보니까 Layer에서도 Unit 설정이 가능하네...? 하하... 뭔가 지난 글들이 다 필요없어진 느낌... => 해봤더니 예상한대로 안됨. 설정 이 후 생성한 오브젝트만 영향을 받음.
찾아보니까 Scale이 중요한 이유가 Physical Material을 쓸 때 Onmniverse는 mass를 Automatic하게 calculate 하고 이에 scale이 커지면 Mass가 커짐. (기존에 AABB와 같은 extent algorithm 그리고 Ridar Node point 이렇게 2가지만 알고 있었는데 하나 더 추가됨!)
2번째 영상에 보면, Physics Scene에서 Single Asset을 확인할 때는 Gold Standard 인 CPU를 사용하라고 이야기 한다. GPU는 multiple object의 distributed processes에 최적화 된듯
아는 내용이지만 복습하면 TImestep이 작으면 -> 시뮬레이션의 정확도가 올라감 대신 성능에 악영향
반대로 Timestep이 크면 -. 시뮬레이션의 정확도가 내려감 대신 성능에 긍정적인 영향
유니티, 옴니버스 모두 0.02 즉 50Hz로 기본 설정 되어있음.
Fixed Object인 경우에 예를 들어서 root나 base_link 등? 그냥 collider prefab을 입히면 됨. 이전에 하면서 오류 메세지를 봤는데 Omniverse는 Dynamic의 경우 콜라이더 셋팅을 다시 해줘야 하는 것 같았음.
Dynamics X forms = Actor X form 둘이 같다... 같은 뜻의 단어가 왜이리 많을까 슬프다...
실습하기
해당 영상에 Sample Asset이 있지만 나는 별도의 캐드 파일이 있으니 다운 받지 않았다.
위의 과정으로 Asset을 준비한 후 모든 Xform Object의 Kind 를 assembly로 바꾼다. 이는 필수는 아니고 이렇게 해야 클릭 했을 때 최상단의 오브젝트로 표시되서 쉽게 rigging 할 수 있는듯?
움직일 애들한테는 RIgidbody와 Collider preset을 같이 해준다
중요한 점 : Collider는 별도의 mass를 갖고 있음. automatically 하게 compute 되는 mass라고 이야기 하는데... 이해가 간다.
[Windows - SImulation - Debug]에 보면 유니티의 Physics Debugger 와 동일한 툴이 있다. 예전에 한참 frame 마다 debug하는 방법을 찾았는데 여기에 있넹... STep을 누르면 된다.
[Create - Physics - Collision Group] 으로 묶으면 뭔가 되게 깔끔하게 시뮬레이션 됨. 이거 뭐지... 찾아봐야겠다. 지금 보았을 때는 Joint 단에서 서로 간섭하지 않는 것 같음
Ragdoll을 예시로 한 모든 RT3D의 문제점인데... 질량차가 클 경우 시뮬레이션 해석 결과에 문제가 생긴다. 근데 옴니버스는 Collider에 mass를 잡으니까 (이 부분은 유니티랑 다른듯...?) 나사와 같은 작은 물체는 콜라이더를 안잡는게 좋을 듯. 이것도 공부해 보면 좋을 것 같은데 timestep이 작아지면 이 부분도 가능하다고 한다. 공식이 따로 있을 듯...?
Collider mass가 tight하게 잡히지 않을 때 => mass compute가 제대로 작동 안함 => Mass를 별도로 넣어줘야 함.
이런 툴이 있네... body 그리고 mass axes를 잡아주네... debugging 하기 너무 좋을듯..
RT3D 는 frictionless한 시스템이기 때문에... 실제에서 크게 작용하지 않는 작은 영향도 크게 만들 수 있다.
하다보니까 알게 됐는데 다음과 같이 서로 컴포넌트로 여러 오브젝트가 걸려있을 경우
옴니버스는 오브젝트를 3개로 인식한다. 기본 2개의 도형 1개 그리고 각각을 나눠서 2개.
참고 자료
댓글