Unity 검색

Unity 2021.2 베타 물리 업데이트: 더욱 사실적인 로봇 시뮬레이션 제작

Simulation of a blue robotics machine on a green graph background
Simulation of a blue robotics machine on a green graph background
공유

Is this article helpful for you?

Thank you for your feedback!

Unity 2021.2 베타 버전에서 물리 기능의 사용 편의성이 개선되어 새로운 사용 사례가 가능해졌으며, 로보틱스 분야에서 보다 쉬운 저작과 빠른 디버깅이 지원됩니다.

ArticulationBody 개선 사항

ArticulationBody 컴포넌트는 유니티 로보틱스 시뮬레이션의 핵심입니다. 로봇 손, 매니퓰레이터(로봇 팔), 모바일 로보틱스를 비롯한 다양한 분야에 필수적인 키네마틱 체인을 높은 정확도로 시뮬레이션할 수 있도록 지원하기 때문입니다. 유니티는 사용자 피드백을 바탕으로 성능과 사용 편의성을 개선하기 위해 여러 가지 변경 사항을 추가하였습니다.

ArticulationBody 컴포넌트의 프로퍼티가 재정렬되어 가독성이 향상되었습니다. 이제 질량과 관련된 파라미터가 시각적으로 하나의 블록을 형성하며, 그 아래에 앵커와 드라이브 관련 파라미터가 나열됩니다. 해당 변경 사항은 Unity 2021.1 및 2020.3에 백포트되었습니다.

Image showing the articulation body dialog box with a grey background and white text.

이제 ArticulationBody 에디터에서 일반적인 반복 조인트에서 사용하는 것과 동일한 조인트 툴을 사용합니다. 따라서 에디터 전반에서 일관적인 경험이 유지됩니다. 또한 모든 조인트의 한계와 앵커를 시각화하여 편집할 수 있습니다.

Gif of the Prismatic Joint movement shown with a silver and blue robotic arm simulation

조인트 툴은 이전에는 불가능했던 Prismatic Joint의 편집이 가능하도록 확장되어, 이제 모든 유형의 ArticulationBody 조인트를 지원합니다. 이 포럼 스레드에서 자세한 내용을 확인하고 피드백을 공유해 주세요.

Gif of collision detection mode demonstrated with a blue and silver robotic arm simulation

ArticulationBody에 충돌 검사 모드를 선택할 수 있는 새로운 설정이 생겼습니다. 모든 연속 충돌 검사 모드가 리지드바디와 마찬가지로 지원됩니다. 이는 특정 사용 사례에서 필수적인 것으로 간주되어 2021.1 및 2020.3 버전에 백포트되었습니다. 예를 들어, 머신러닝 모델을 훈련하여 휴머노이드 캐릭터가 걷도록 제어하려면 발에 연속 충돌 검사를 활성화해야 합니다. 그렇지 않으면 일반적인 걸음보다 훨씬 빠르게 전진하는 등 발이 지면에 닿을 때 생기는 비침투 충격을 모델이 유리하게 사용하는 방법을 학습하게 되며, 일종의 비행 패턴도 발견됩니다.

Rigidbody.AddForce의 해당 배리언트에 상응하도록 ArticulationBody.AddForce 배리언트가 추가되어 힘과 가속도 및 충격을 직접 적용합니다. 따라서 기존 코드를 Ridigbody에서 ArticulationBody로 쉽게 마이그레이션할 수 있게 되었습니다. 

경계 조건과 특수 사례가 명시되어 기술 자료가 보다 명확해졌습니다. 이번 릴리스에서는 ArticulationBody 컴포넌트에 관한 새로운 페이지가 개설되었습니다. 

또한 사용자 피드백을 기반으로 ArticulationBody 컴포넌트의 모든 C# 대상 프로퍼티에 대한 측정 단위도 기술 자료에 추가했으며, 예시로 mass 페이지를 참조하시기 바랍니다.

에디터 개선 사항

유니티는 지속적인 투자를 통해 일반 물리 관련 파이프라인의 사용성을 개선하고, 다양한 사용 패턴을 수용할 수 있도록 유연성을 향상하고 있습니다. 이를 통해 크리에이터들이 추가 기능을 활용하여 자신의 필드를 더 잘 이해하고, 보다 정확한 결과를 얻도록 시뮬레이션을 구성할 수 있게 되면서 더욱 정교한 시뮬레이션 제작이 가능해질 것입니다.

아울러, 이제 Physics Debugger가 Isolation Mode와 Context Mode 모두에서 프리팹을 지원합니다. 씬의 나머지 부분은 표시하지 않은 상태에서 프리팹의 프로퍼티만 단독으로 관찰할 수 있으므로, 이제 보다 큰 범위에서 분할 정복(divide-and-conquer) 설계 원칙을 따를 수 있게 되었습니다.

Gif of the collision detection system with an objects simulation

물리 레이어는 충돌 검사 시스템의 성능을 최적화하는 데 필수적인 툴입니다. 특히 레이어가 많은 대형 씬에서는 일단 모든 충돌을 비활성화한 후, 나중에 필요한 충돌만 활성화하는 것이 좋습니다. 이러한 사용 패턴을 지원하고자, 모든 레이어 간의 충돌 검사를 켜고 끌 수 있도록 물리 설정에 새로운 버튼이 추가되었습니다. 이 설정은 많은 레이어로 구성되지만, 레이어 조합의 작은 하위 집합으로 상호 작용을 줄여 성능을 개선할 수 있는 비교적 큰 프로젝트에서 유용합니다.

Matrix of the collision layers that have been added to the physics profiler with a grey background and white text

Physics Profiler에 지표가 추가되었습니다. 이제 더 많은 그래프를 사용할 수 있으며, 텍스트 창에 현재 시뮬레이션에 관한 더 많은 데이터가 표시됩니다. 새로 추가된 지표에는 총 물리 쿼리 수, Articulation Body의 수, 마지막 프레임에서 동기화된 트랜스폼 수 등이 있습니다.

Profiler Modules dialog box that includes metrics of a particular project

커스텀 프로파일러 모듈을 생성하여 특정 프로젝트에 필요한 지표만 포함하도록 할 수도 있습니다.

Image of Physics detailed dialog box that shows the memory usage metric

그리고 이제 메모리 사용량도 지표로 나타낼 수 있습니다.

메인 스레드에서 물리 쿼리 체이닝

물리 배치 쿼리는 오로지 메인 스레드에서만 모든 쿼리를 실행하는 일반적인 경우와는 다르게, 사용 가능한 모든 코어에서 쿼리를 실행하여 물리 쿼리(예: Raycast)의 성능을 향상하는 방법입니다.

이상적으로는 배치 쿼리의 결과에 의존하는 코드가 C# 잡일 때 성능을 극대화할 수 있습니다. 하지만 이것이 구현되지 못한 가장 큰 이유는 콜라이더 충돌이 Unity 컴포넌트(RaycastHit.collider)형태로 보고되었기 때문입니다. 메인 스레드에서 사용 가능한 Unity 컴포넌트가 없기 때문에 배치 쿼리는 매우 제한적으로 사용되었습니다.

이를 해결하기 위해 이제 충돌한 콜라이더의 인스턴스 ID가 노출됩니다. 메인 스레드에서 인스턴스 ID를 자유롭게 사용할 수 있으므로, 쿼리 체이닝 작업이 원활히 진행될 수 있습니다.

patch friction 개선

patch friction 모드는 Unity의 기본 마찰 시뮬레이션 모드입니다. 시뮬레이션의 정확도보다 성능 향상을 우선하는 절충안이긴 하지만, 리소스를 적절히 활용하여 합리적인 결과를 얻을 수 있습니다.

새롭게 개선된 patch friction 모드를 이제 물리 설정에서 사용할 수 있습니다. 이는 컨택트 페어에서 두 개 이상의 마찰 앵커가 생성되는 경우 마찰력이 분석 모델의 예상보다 최대 두 배까지 높아질 수 있는 문제를 해결합니다.

예를 들어, 다음 그래프는 동적 마찰이 서로 다른 여러 정육면체가 평면 위로 미끄러지는 모습을 보여줍니다. 빨간색 정육면체는 이론적으로 예측했을 때 예상되는 최종 위치를 보여 줍니다. 일반 patch friction 모드를 사용한 파란색 정육면체는 예상치의 절반 가량을 이동하는 것으로 보입니다. 개선된 patch friction 모드를 사용한 초록색 정육면체는 예상치에 훨씬 근접하게 이동합니다.

Gif showing the improved patch friction mode with red green and blue cubes

컨택트 수정

이제 새로운 컨택트 수정 API를 사용할 수 있으며, 관련 피드백은 이 포럼 스레드에서 수집하고 있습니다. 해당 API를 활용하여 컨택트에 대한 물리 엔진의 반응을 커스터마이즈할 수 있습니다. 모든 컨택트 페어에서 컨택트 포인트를 변경하거나 솔버가 가하는 충격을 제한하고, 타겟 속도를 미세 조정하는 등 다양한 작업을 수행할 수 있습니다. 또한 콜라이더에 구멍을 내거나, 점성을 가진 컨택트를 생성하거나, 물리로 구동되는 다양한 컨베이어 벨트를 만들 수 있습니다. 아래 예제에서  구는 평면과의 컨택트 포인트를 무시하여 평면을 그대로 통과합니다(영역을 구분하도록 제작 가능). 오른쪽의 정육면체는 경사진 두 평면을 튀어 오르지만 회전하지는 않습니다. 컨택트에 대한 반응에서 회전을 제외하도록 커스터마이즈했기 때문입니다.

Gif showing the contact modification API with a circle and cube

생생한 시뮬레이션 제작

여러 개선 사항 덕분에 사용자는 Unity에서 보다 실감 나는 시뮬레이션을 제작할 수 있습니다. 많은 개선 사항이 커뮤니티의 제안과 피드백을 토대로 이루어졌습니다. 지금 대화의 장에 참여해 보세요. Unity에서 로보틱스 개발을 시작하려면 Unity Robotics Hub에서 여러 예제와 데모를 확인해 보세요.

Is this article helpful for you?

Thank you for your feedback!