SOFA의 소프트 손가락 모델에서는 변형을 계산하는 체적 메시, 그 결과를 보여 주는 시각 모델, 접촉을 다루는 충돌 모델이 서로 다른 역할을 맡습니다. 화면의 표면을 더 매끄럽게 만드는 변경과 손가락의 변형·자기 접촉을 더 세밀하게 표현하는 변경은 같은 작업이 아닙니다.
SoftRobots의 CableGripper 튜토리얼은 이 관계를 구체적인 파일과 장면 구성으로 설명합니다. Step 2에서 손가락의 변형과 표시를 만들고, Step 4에서 별도의 충돌 영역을 추가합니다. 각 단계가 무엇을 더하는지 따라가면, 보이는 모델과 계산되는 모델을 구분할 수 있습니다.
finger.vtk는 변형을 계산하고 finger.stl은 표면을 보여 준다
Step 2는 유한요소법으로 변형을 계산하기 위해 체적 형상을 제공하며, 이 예제에서는 사면체 메시인 finger.vtk를 사용합니다. 동시에 surfaceMeshFileName에 finger.stl을 지정해 시각 모델을 둘 수 있습니다. 문서는 시각 모델이 기계적 메시의 변형을 따라 움직인다고 설명합니다.
| 표현 | 예제에서 사용하는 대상 | 맡는 역할 |
|---|---|---|
| 체적 메시 | volumeMeshFileName의 finger.vtk |
내부를 포함한 유한요소 변형 계산 |
| 시각 표면 | surfaceMeshFileName의 finger.stl |
계산된 변형을 화면에 표시 |
| 충돌 표면 | 별도 CollisionMesh와 표면 파일 |
지정된 영역 간 교차와 접촉 처리의 대상 |
가령 시각 표면만 더 촘촘한 파일로 바꾸고 체적 메시와 재질·경계 조건은 유지했다고 생각해 보겠습니다. 화면에서 윤곽이 더 정교해질 수 있지만, 그 변경 자체가 변형 계산용 사면체를 더 나누는 것은 아닙니다. 반대로 체적 메시를 바꾸면 변형을 이산화하는 방식이 달라집니다. 시각 표면의 품질과 계산용 메시의 구성을 따로 기록해야 하는 이유입니다.
여기서 사면체는 이 손가락 예제가 선택한 체적 표현입니다. SOFA의 모든 물체와 계산 모델이 반드시 같은 파일 형식과 요소를 사용한다는 의미는 아닙니다.
같은 외형이라도 재질과 고정 영역이 변형을 바꾼다
체적 메시만으로 재료의 기계적 반응이 정해지지는 않습니다. 튜토리얼은 실제 실리콘 재료를 탄성 변형 법칙으로 근사한다고 밝히며, ElasticMaterialObject에 Young 계수, Poisson 비, 질량 등의 설정을 전달합니다. 형상은 “어디에 재료가 있는가”를, 재질 설정은 “그 재료가 하중에 어떻게 반응하는가”를 맡는다고 이해할 수 있습니다.
탄성 근사는 이 예제의 모델 선택입니다. 문서도 탄성·초탄성·소성 등 여러 거동을 구분해야 한다고 설명합니다. 실제 재료의 어떤 변형 범위를 다룰 것인지에 따라 적절한 법칙과 매개변수가 달라지므로, 예제의 재질 값을 실리콘 일반의 측정값으로 가져오는 방식은 피해야 합니다.
같은 단계에서 FixedBox는 손가락의 한쪽 영역을 고정해 중력에 의한 자유낙하를 막습니다. 이 고정은 화면에 손가락을 보기 좋게 배치하는 기능과 다릅니다. 어디를 움직이지 못하게 할 것인지 정하는 변형 계산의 경계 조건입니다.
예를 들어 동일한 메시와 재질을 두고, 작은 밑동 영역을 고정하는 경우와 손가락 중간까지 넓게 고정하는 경우를 생각해 볼 수 있습니다. 뒤쪽의 경우에는 움직일 수 있는 영역 자체가 달라집니다. 이 가상 비교에서는 외형 파일을 바꾸지 않아도 굽힘을 허용하는 영역이 달라진다는 점이 핵심입니다. 모델을 비교할 때는 메시·재질과 함께 고정 영역도 봐야 합니다.
충돌 표면은 따로 등록하고 검사할 영역을 나눈다
변형이 보이기 시작했다고 자기 접촉까지 준비된 것은 아닙니다. Step 4는 별도의 CollisionMesh를 추가해 충돌 영역을 정의합니다. 같은 finger.stl 파일이 시각 모델과 충돌 모델 양쪽에서 쓰일 수 있어도, 파일의 역할은 장면의 어느 구성에 연결했는지로 갈립니다.
이 단계의 코드에는 다음 세 영역이 등장합니다.
| 충돌 영역 이름 | 표면 파일 | 지정된 그룹 |
|---|---|---|
part0 |
finger.stl |
1 |
part1 |
fingerCollision_part1.stl |
1 |
part2 |
fingerCollision_part2.stl |
2 |
문서는 서로 다른 충돌 그룹의 삼각형을 교차와 접촉 처리 대상으로 삼는다고 설명합니다. 위 구성에서 part0–part2, part1–part2는 서로 다른 그룹에 속합니다. part0–part1은 같은 그룹이므로 이 교차 그룹 검사 규칙의 대상이 아닙니다. 그룹을 나누는 것은 단지 표시 색을 구분하는 일이 아니라 어떤 영역의 상호작용을 계산할지 정하는 일입니다.
검사 대상이 되었다는 사실과 실제로 접촉했다는 결과도 구분해야 합니다. 서로 다른 그룹이라도 현재 변형된 표면이 떨어져 있다면 그 조합이 항상 접촉하는 것은 아닙니다. 반대로 접촉시킬 의도로 나눈 영역이 같은 그룹에 묶여 있다면, 먼저 그룹 구성과 영역 파일을 살펴봐야 합니다.
그룹 설정은 검사 대상을 고르는 정보입니다. 전체 장면에는 충돌과 접촉을 처리하는 구성도 함께 필요하며, 튜토리얼의 Step 6에서는 ContactHeader를 장면에 추가합니다. 표면 파일 하나를 읽는 것과 접촉이 포함된 장면을 구성하는 것 사이에 이러한 단계가 있습니다.
바꾸려는 결과에 따라 수정할 모델이 다르다
모델을 손볼 때는 원하는 변화가 어디에서 나와야 하는지 연결하면 좋습니다. 표시되는 윤곽이 문제라면 시각 표면을 보고, 하중에 대한 변형이 문제라면 체적 메시·재질·고정 영역을 봅니다. 강하게 굽혔을 때 서로 닿아야 할 부분이 지나간다면 충돌 표면과 그룹, 장면의 접촉 구성을 함께 봅니다. 눈에 보이는 한 장면 안에서도 원인은 다른 계층에 있습니다.
이 구분은 변형 물체 조작에서 상태를 표현하는 문제와도 연결됩니다. 제어에 필요한 손끝 위치나 접촉 상태를 얻으려면, 화면에 보이는 형상 뒤에서 어떤 변형과 접촉을 계산했는지 알아야 합니다.
이 글은 2026년 10월 16일 확인한 CableGripper 문서의 Step 2·4와 관련 장면 설명을 읽어 작성했으며, SOFA 실행이나 재질·접촉 실험은 수행하지 않았습니다. 원문에는 ..autolink:: 표기와 createChild 같은 이전 작성 방식이 남아 있어, 여기서는 해당 코드를 현재 설치 환경용 실행 절차로 옮기지 않고 메시와 모델의 역할을 설명하는 근거로 사용했습니다.