> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-ko/wearables-and-emotes/wearables/spring-bones.md).

# 스프링 본

스프링 본으로 웨어러블에 동적 물리 효과를 추가합니다

### 스프링 본이란?

스프링 본(지글 본 또는 피직스 본이라고도 함)은 애니메이션 클립이 아니라 아바타의 움직임과 중력에 반응해 동적으로 움직이도록 웨어러블에 추가되는 보조 본입니다. 걷거나, 달리거나, 방향을 바꿀 때 머리카락, 귀걸이, 망토, 벨트, 포니테일, 그리고 기타 늘어지는 액세서리가 자연스럽게 흔들리고, 튕기고, 안정되도록 만들어 생동감을 더해 줍니다.

스프링 본은 **아닙니다** 기본 아바타 아마추어의 일부가 아닙니다. 블렌더(또는 다른 3D 소프트웨어)에서 아바타의 기본 스켈레톤에 추가하는 보조 본이며, 업로드 후 Builder에서 물리 동작이 설정됩니다.

이 구현은 [VRM 스프링 본 표준](https://vrm.dev/en/vrm1/springbone/)을 따릅니다. 이는 VRM 및 MMD 같은 형식에서 아바타 물리를 위한 널리 채택된 규약입니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-155bf4c615cd79a1c25c1289fbc36565c913499b%2F01_spring_bones_workflow.png?alt=media\&token=74749646-204b-4014-829f-44f0807dd0f3)

### 스프링 본 작동 방식

하나의 **스프링 체인** 은 함께 물리를 시뮬레이션하는 본들의 연속이며, 최소 두 개의 본이 있어야 합니다. 즉 실제 스프링 본과 끝 본이 필요합니다. 스프링 본 하나만으로는 움직임이 발생하지 않습니다. 시뮬레이션은 물리를 구동할 스프링 본의 헤드와 기하학적 끝점을 정의할 끝 본의 헤드를 필요로 합니다. 더 긴 체인(3개 이상 본)은 더 매끄럽고 자연스러운 움직임을 가지며, 긴 머리카락이나 망토에 이상적입니다.

1. **스프링 본 부모** — 체인의 첫 번째 본입니다. 물리 설정(강성, 중력, 드래그 등)을 담당합니다. 본 이름 어디에든 `springbone` 이 포함되어 있는지(대소문자 구분 없음)로 식별됩니다.
2. **자식 스프링 본** — 계층 구조에서 이전 본의 자식입니다. 부모의 물리 매개변수를 상속하고 체인을 형성합니다.
3. **스프링 본 끝** — 체인의 마지막 본입니다. 체인의 기하학적 끝점을 정의하지만 시뮬레이션의 영향을 받지 않으며 어떤 메시도 변형시키지 않습니다.

스프링 본의 체인, 즉 계층 구조는 **선형**이어야 합니다. 즉, 각 본은 자식 하나만 가질 수 있습니다. 자식이 두 개 이상인 본은 예상치 못한 동작을 보일 수 있습니다.

![깔끔하고 선형적인 스프링 체인.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-647d9bf916f9848eb8e59c0ac59ebc2fe07deaea%2FSpring_Chain.png?alt=media\&token=3c8a9ade-932c-45d0-8ff2-039557f86601)

![자식이 2개 이상인 본은 예상치 못한 동작을 보입니다.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-f824360b21f0e1fc92a1a337479f35a08f7f694f%2FForked_Chain.png?alt=media\&token=4a822ce2-d7d3-45a8-84a2-6f2f1860d158)

### 계층 구조

스프링 본이 제대로 작동하려면 아바타의 원본 본 중 하나에 부모가 연결되어 있어야 합니다. 예를 들어 머리카락이나 귀걸이는 계층 구조의 최상단 본이 ***Avatar\_Head***&#xC5D0; 부모 연결되어 있어야 합니다. 스카프의 경우 체인을 ***Avatar\_Neck*** 에 연결하는 것이 좋습니다. 치마라면 아마 ***Avatar\_Hips*** 또는 ***Avatar\_LeftUpLeg/Avatar\_RightUpLeg*** 가 적합할 수 있습니다.

이 계층 구조의 구조가 어떻게 작동하는지 주의해서 봐야 합니다.

* *Hair\_springBone\_1* (스프링 본 부모): 체인의 맨 위에 있는 본이며, 물리 설정을 가집니다
* *Hair\_springBone\_2* (자식 스프링 본): 계층 구조에서 이전 본의 자식이며 설정을 상속합니다.
* *Hair\_springBone\_end* (스프링 본 끝): 체인의 마지막 본이며 끝점 역할만 합니다.

### 명명 규칙

모든 스프링 본은 **반드시** 다음 하위 문자열을 `springbone` 이름에 포함해야 합니다(대소문자 구분 없음). 하위 문자열은 어떤 위치에든 올 수 있습니다:

* *SpringBone\_hair\_left*
* *hair\_springbone\_l*
* *springbone\_earring.R*

워크플로를 깔끔하게 유지하려면 다음 형식을 사용하는 것이 좋습니다: **BodyPart/WearableName\_springBone**

예시: *Hair\_springBone\_1*, *Earring\_springBone.L* 등… 블렌더(또는 선호하는 소프트웨어)의 좌우 명명 규칙만 따른다면, 자신에게 가장 잘 맞는 형식을 자유롭게 사용하세요.

{% hint style="warning" %}
주의!

스프링 본은 `springbone` 없이는 작동하지 않습니다. 끝 본에도 반드시 사용해야 합니다.
{% endhint %}

### 제한

각 웨어러블은 다음 스프링 본 제한을 준수해야 합니다:

* 최대 **6** 웨어러블당 스프링 체인 수
* 최대 **12** 총 스프링 본 수(모든 체인의 모든 본 합계)
* 최대 체인 깊이 **6** 개의 본

## 블렌더에서 스프링 본 만들기

스프링 본은 기본 아바타 아마추어를 위해 블렌더에서 만드는 추가 본입니다. 물리 매개변수는 나중에 Builder에서 설정되므로, 지금은 본 계층 구조만 설정하면 됩니다.

새 본을 만들려면 아바타 아마추어를 선택하고, **편집 모드**에서 본을 만들 위치에 커서를 두고 **Shift+A**를 누르세요. 다른 방법은 기존 본을 복제하는 것으로, **Shift+D**를 누르면 됩니다. 체인의 첫 본이 준비되면, **E** 를 눌러 돌출시켜 체인의 나머지를 만드세요.

![커서가 있는 위치에 본을 만들려면 Shift+A를 누르세요.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a7353847fead3ecb60e9dbc49d9449e914e0efca%2FCreate_Bones.gif?alt=media\&token=227762de-59e9-4338-a33d-9e7dcb905ce7)

스프링 체인은 스켈레톤 부모에 연결될 필요가 없다는 점을 기억하는 것이 중요하므로, 메시 위의 아무 곳에나 배치할 수 있습니다. 그러나 스프링 체인은 **반드시** 연결되어야 하며, 어떤 스프링 본도 오프셋할 수 없습니다.

본을 만든 후에는 위에서 언급한 명명 규칙에 따라 이름을 바꾸고, 체인이 적절한 본에 부모 연결되어 있는지 확인하세요. 점선은 체인의 부모를 보여줍니다. 아무것도 없으면 체인에 부모가 없다는 뜻입니다. Blender에서는 **편집 모드**에서 자식을 먼저 선택한 다음 부모를 선택하고 **Ctrl+P** > **오프셋 유지**.

![자식을 먼저 선택한 다음 부모를 선택하고 Ctrl+P를 눌러 본에 부모를 설정하세요.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6c10f20fb0392fe39a125e59e1202e638b24ef71%2FParenting_Bones.gif?alt=media\&token=70d36a45-74a1-4910-9a8a-b89830a85caa)

본 이름을 바꾸려면 편집 모드 또는 포즈 모드에서 본을 선택하고 본 속성 탭으로 가서 명명 규칙에 따라 이름을 바꾸세요. 체인의 모든 본에 대해 이 작업을 수행하세요.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-acb6f900f22bcf0cf7c7af4df54410f62607497c%2FRename_Bones.png?alt=media\&token=5e094657-611f-4592-aad6-b4ef11c367c2)

{% hint style="info" %}
팁!

본이 올바르게 배치되었는지 확인하려면, **오브젝트 모드** 에서 메시를 선택하고, **편집 모드**에서 본을 배치할 영역의 버텍스를 선택한 다음(버텍스 루프나 버텍스 그룹일 수 있음) > **Shift+S** > **선택 항목으로 커서 이동.**

다시 **오브젝트 모드**로 돌아가 아마추어를 선택 > **편집 모드** > 원하는 본 선택 > **Shift+S** > **선택 항목을 커서로**.
{% endhint %}

![Shift+S를 사용해 본을 메시의 올바른 위치에 배치하세요.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c3a786c4bfe1487f0312dd69ca6492ea660fa310%2FCreate_Bones2.gif?alt=media\&token=d5df5786-0152-4211-9157-e13ec73e3b63)

### 메시 스키닝

스키닝은 메시를 아마추어에 바인딩하여 함께 움직이게 하는 과정입니다. 이를 위해 각 본이 버텍스에 얼마나 영향을 미칠지(가중치)를 정의합니다. 가중치가 높을수록 본이 메시를 더 많이 변형합니다. 이를 위해 **오브젝트 모드**에서 먼저 메시를 선택하고 **Shift** 를 누른 상태로 아마추어를 선택한 다음, **Ctrl+P**를 누르세요. 이 작업에는 두 가지 방법이 있습니다. 다음 중 하나를 선택하세요: **비어 있는 그룹으로** 또는 **자동 가중치로**.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a2b003483ddbc0d4f75ed73ad0d18cfd9db5e154%2FParenting_Mesh.gif?alt=media\&token=a8d0b687-09a3-49d4-9f63-16819ed8e49f)

#### 자동 가중치로

이름에서 알 수 있듯이, 이 방법에서 블렌더는 아마추어의 각 본에 대해 버텍스 그룹을 생성하고 각각에 자동 가중치를 부여하여 스키닝 가중치를 자동으로 설정하려고 합니다. 어떤 경우에는 잘 작동하지만, 조정이 필요할 수도 있습니다. 생성된 그룹은 **데이터** 탭에 표시되려면 새로 고침 버튼을 클릭해야 할 수도 있습니다.

특정 본이 메시에 영향을 주지 않게 할 것이 확실하다면, **잠금 아이콘** 을 클릭해 잠그고, 유지할 그룹을 선택한 뒤 드롭다운 메뉴를 클릭하여 **잠금 해제된 그룹 모두 삭제** 를 눌러 오브젝트에서 제거할 수 있습니다. 예를 들어 머리카락을 작업 중이라면 발과 손에 대한 그룹은 의미가 없습니다. 그런 경우 아래 예시처럼 머리 또는 스프링 본이 아닌 모든 것을 삭제하세요. 또한 스프링 체인의 끝 본 그룹도 삭제해야 합니다.

![버텍스 그룹 삭제.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6f81dc7daa452a13d7d0dc82235ebefa5f457fad%2FDeleting_Groups.gif?alt=media\&token=019d06ea-14b0-42b0-8be5-8d392c9b5262)

#### 비어 있는 그룹으로

이 방법에서는 블렌더가 아마추어의 각 본에 대한 모든 버텍스 그룹을 생성하지만, 기본 가중치는 0입니다. 가중치는 편집 모드에서 수동으로 할당하거나 Weight Paint 모드에서 칠해야 합니다. 이렇게 하면 각 그룹이 무엇에 영향을 주는지 더 세밀하게 제어할 수 있으며, 하드 서피스나 특정 그룹에 완전히 할당되어야 하는 오브젝트에 특히 유용할 수 있습니다. 어떤 경우든 가중치를 할당한 뒤에는 포즈 모드에서 테스트하고 Weight Paint에서 미세 조정해야 합니다.

![비어 있는 그룹으로 부모 지정.](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-ff94e0142f6a4926a619e5fe99cec63c8ca9a1c4%2FEmpty_Groups_Compressed.gif?alt=media\&token=62edd91e-0c6b-4480-a0c2-39958edd4e69)

#### 가중치 칠하기

스키닝된 메시를 테스트하려면 아마추어를 선택하고 **포즈 모드**로 가서 키프레임을 설정한 다음, 본을 회전시켜 다른 포즈를 만들고 또 다른 키프레임을 설정하세요. 이렇게 하면 움직임에 따라 메시가 어떻게 변형되는지 확인할 수 있습니다. 포즈를 설정한 후에는 다시 **오브젝트 모드**로 돌아가 메시를 선택하고 **가중치 칠하기**.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-527c8bb63094ba652a3fb1d5352e93a74488708c%2FSetting_Poses_Compressed.gif?alt=media\&token=f43fb889-f1a2-4784-a521-14292691e0ca)

에서 **가중치 칠하기**도구 탭에 스키닝 가중치를 조정할 다양한 브러시가 있습니다. 편집하려는 버텍스 그룹을 선택하고(잠겨 있다면 편집할 수 있도록 잠금을 해제하세요) 브러시를 사용해 영향을 추가하거나 제거하세요. 검정은 영향 0을 의미하고, 빨강은 해당 그룹이 메시에 완전히 영향을 준다는 뜻입니다.  **오버레이** 에서 와이어프레임을 활성화하면 칠하는 내용을 더 쉽게 볼 수 있습니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c27ffa783f5617d5f0808b2dd6a42abf154b212a%2FWeight_Paint_Compressed.gif?alt=media\&token=9e29dffe-b68f-4d66-979a-1559ddf6e558)

추가, 빼기 또는 스무스 브러시를 사용해 원하는 결과를 얻으세요. 또한 다양한 극단적인 포즈를 테스트해 메시가 어떻게 변형되는지, 가중치가 없는 버텍스가 남아 있지 않은지 확인하세요. 결과에 만족한다면, 이제 내보낼 차례입니다!

### 내보내기

내보내기 전에 포즈를 테스트하면서 생성된 애니메이션 클립을 모두 삭제하세요. 포즈 모드로 가서 **하나의** 을 눌러 **Ctrl+R**그런 다음, **Ctrl+S** 를 누르고 마지막으로 **Ctrl+G** 를 눌러 아마추어의 모든 변환을 삭제하세요. 그런 다음 오브젝트 모드로 돌아가 표시 모드를 View Layer에서 Blender File로 바꾸고 Actions를 펼친 다음, 애니메이션 파일을 마우스 오른쪽 버튼으로 클릭해 삭제하세요.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c58ca65a7d3cb67af9da18772399df3285da1506%2FDelete_Action.gif?alt=media\&token=f21d765c-2c40-4ae2-b6fd-ed1f18bac33d)

장면에 아바타 메시와 같은 다른 오브젝트가 있다면 Outliner에서 눈 아이콘을 클릭해 보이기 설정을 끄세요. 그런 다음 **파일** > **내보내기** > **gltf 2.0 (.glb, .gltf)**&#xB85C; 이동하세요. 내보내기 설정에서 Include를 펼치고 **Limit to** 를 **Visible Objects**로 전환하세요. Export를 클릭하면 파일을 Builder에 업로드할 준비가 끝납니다!

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-f2b0d6c5f3c5b785a902bf9bb4128611ce7f0cae%2FExport_Settings.png?alt=media\&token=9b43598b-9a6f-4593-93ef-25e26f701ac8)

## Builder에서 스프링 본 구성하기

를 포함한 웨어러블을 업로드하면 `springbone`-명명된 본을 **스프링 본** 설정 패널을 자동으로 감지하여 표시합니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-d87462e1ac78ef9158a3291eeb44cb49fb2e979e%2F03_spring_bones_panel.png?alt=media\&token=76283801-febb-4291-8071-67bd4c7696fa)

이 패널에서 각 스프링 루트 본의 물리 매개변수를 설정할 수 있습니다. Builder의 아바타 미리보기는 변경 사항을 즉시 반영하므로, 실시간으로 동작을 미세 조정할 수 있습니다.

{% hint style="info" %}
Builder에서 새 스프링 본을 추가할 수는 없습니다. 본은 업로드된 `.glb` 파일에 올바른 명명 규칙으로 이미 존재해야 합니다. Builder에서는 감지된 스프링 본의 물리 매개변수만 설정할 수 있습니다.
{% endhint %}

### 매개변수 참고

#### 강성 힘

|         |       |
| ------- | ----- |
| **범위**  | 0\~4  |
| **기본값** | `2.0` |

본이 휴지 자세로 돌아가려는 힘의 세기를 제어합니다. 이것은 복원력입니다. 스프링의 "단단함"이라고 생각하면 됩니다.

* **0**본이 전혀 휴지 상태로 돌아가지 않으며, 중력 아래에서 축 늘어진 채로만 있습니다.
* **낮은 값** (예: 0\~1): 본이 느슨하고 축 처져 자유롭게 흔들립니다. 긴 흐르는 머리카락이나 가벼운 매달린 액세서리에 좋습니다.
* **높은 값** (예: 3\~4): 본이 단단하여 원래 위치에 가깝게 유지되고 빠르게 되돌아옵니다. 짧은 머리카락이나 딱딱한 액세서리에 좋습니다.

#### 중력 강도

|         |      |
| ------- | ---- |
| **범위**  | 0\~2 |
| **기본값** | `0`  |

매 프레임 본에 작용하는 중력의 크기를 제어합니다.

* **0**중력 효과가 없습니다. 본은 움직임 관성과 강성의 영향만 받습니다.
* **낮은 값** (예: 0.3\~0.8): 미세한 중력 당김으로, 대부분의 액세서리에 적합합니다.
* **높은 값** (예: 1.5\~2.0): 강한 중력 당김으로, 본이 크게 처지게 됩니다.

#### 중력 방향

|         |                             |
| ------- | --------------------------- |
| **형식**  | X, Y, Z 벡터                  |
| **기본값** | `X: 0, Y: -1, Z: 0` (아래 방향) |

세계 공간에서 중력의 방향을 설정합니다. 기본적으로 중력은 아래쪽(Y = -1)으로 작용하여 자연스러운 중력을 시뮬레이션합니다.

| X  | Y  | Z  | 효과                |
| -- | -- | -- | ----------------- |
| 0  | -1 | 0  | 아래 방향(자연 중력, 기본값) |
| 0  | 1  | 0  | 위쪽(떠 있는/초자연적 효과)  |
| 1  | 0  | 0  | 왼쪽                |
| -1 | 0  | 0  | 오른쪽               |
| 0  | 0  | 1  | 앞쪽                |
| 0  | 0  | -1 | 뒤쪽                |

축을 조합할 수 있습니다(예: `X: 0.5, Y: -0.5, Z: 0`). 대각선 방향에 사용할 수 있습니다. 이는 바람 같은 효과를 시뮬레이션하거나 초자연적 캐릭터에게 떠 있는 듯한 인상을 주는 데 유용합니다.

#### 드래그 힘

|         |       |
| ------- | ----- |
| **범위**  | 0\~1  |
| **기본값** | `0.5` |

본이 얼마나 빨리 운동량을 잃고 가라앉는지 제어합니다. 공기 저항이나 감쇠라고 생각하면 됩니다.

* **낮은 값** (예: 0\~0.2): 본이 마찰이 거의 없는 진자처럼 오랫동안 자유롭게 흔들린 뒤 가라앉습니다.
* **높은 값** (예: 0.7\~1.0): 본이 움직인 직후 거의 즉시 가라앉아 무겁거나 감쇠된 느낌을 줍니다.
* **1**본이 거의 움직이지 않습니다. 최대 감속입니다.

#### 센터(선택 사항)

|         |            |
| ------- | ---------- |
| **형식**  | 본 이름(드롭다운) |
| **기본값** | 없음         |

아바타의 한 지점을 기준으로 스프링 본의 움직임을 계산하는 데 사용되는 선택적 기준 본으로, 월드 공간을 기준으로 계산하지 않습니다. 이렇게 하면 아바타가 움직일 때(걷기, 달리기) 스프링 체인이 과도하게 흔들리는 것을 방지합니다.

**센터 본이 없으면**스프링은 세계 공간에서 관성을 계산합니다. 아바타가 한 걸음 움직일 때마다 마치 세계 전체가 움직인 것처럼 본이 반응하여, 이동 중에 과장된 흔들림이 발생합니다.

**중심 본이 있으면**, 시뮬레이션은 해당 본의 공간을 기준 프레임으로 사용하므로 아바타의 *로컬* 움직임(머리 회전, 몸 굽힘)이 스프링 반응을 유발합니다.

웨어러블이 몸의 어느 위치에 있는지에 따라 중심 본을 선택하세요:

| 웨어러블 위치            | 권장 중심 본        |
| ------------------ | -------------- |
| 머리(머리카락, 귀걸이, 티아라) | `Avatar_Head`  |
| 상체(망토, 목걸이)        | `Avatar_Spine` |
| 하체(벨트, 치마 장식)      | `Avatar_Hips`  |

{% hint style="warning" %}
중심 본은 **절대** 어떤 스프링 체인의 일부가 되어서는 안 됩니다. 기본 아바타 아마추어의 본이어야 합니다.
{% endhint %}

## 일반적인 사용 사례 및 권장 값

이는 시작점으로 제안되는 값입니다. Builder의 실시간 미리보기를 사용해 취향에 맞게 조정하세요.

| 사용 사례        | 강성        | 중력 강도     | 중력 방향    | 드래그       | 중심             | 비고                             |
| ------------ | --------- | --------- | -------- | --------- | -------------- | ------------------------------ |
| 긴 머리 / 포니테일  | 1.0 – 2.0 | 0.3 – 0.8 | 0, -1, 0 | 0.3 – 0.5 | `Avatar_Head`  | 체인에 본이 많을수록 움직임이 더 부드러워집니다     |
| 짧은 머리        | 3.0 – 4.0 | 0 – 0.3   | 0, -1, 0 | 0.4 – 0.6 | `Avatar_Head`  | 강성이 높을수록 머리카락이 머리에 더 가깝게 유지됩니다 |
| 귀걸이          | 0.5 – 1.5 | 0.5 – 1.0 | 0, -1, 0 | 0.4 – 0.6 | `Avatar_Head`  | 짧은 체인(2\~3개 본), 흔들림을 위해 낮은 강성  |
| 망토 / 클로크     | 1.0 – 2.0 | 0.5 – 1.0 | 0, -1, 0 | 0.3 – 0.5 | `Avatar_Spine` | 폭을 위해 여러 개의 평행 체인              |
| 벨트 / 매달린 장식  | 1.5 – 2.5 | 0.3 – 0.8 | 0, -1, 0 | 0.5 – 0.7 | `Avatar_Hips`  | 더 무거운 아이템에는 더 높은 드래그           |
| 떠 있는 / 유령 효과 | 1.0 – 2.0 | 0.5 – 1.0 | 0, 1, 0  | 0.3 – 0.5 | `Avatar_Spine` | 초자연적인 느낌을 위해 중력을 위쪽으로          |

## 제한 사항

스프링 본을 사용할 때 다음 제한 사항을 유의하세요:

* **콜라이더 없음**: 스프링 본은 아바타의 몸체나 다른 본과 충돌하지 않습니다. 극단적인 포즈에서는 체인이 몸 메시에 겹칠 수 있습니다. 향후 버전에서 콜라이더 지원이 추가될 수 있습니다.
* **웨어러블 간 상호작용 없음**: 각 웨어러블의 스프링 체인은 서로 독립적입니다. 서로 다른 웨어러블의 체인은 서로에게 영향을 주지 않습니다.
* **전역 바람 없음**: 씬 수준의 바람 힘은 없습니다. 다음을 조정하여 웨어러블별 바람 효과를 근사할 수 있습니다. `gravityDir` 대각선 방향으로.
* **원격 아바타의 성능**: 성능을 위해 로컬 플레이어에서 멀리 떨어진 아바타의 스프링 본 시뮬레이션은 비활성화됩니다. 가까운 아바타는 스프링 본 물리 효과가 정상적으로 표시됩니다.
* **대체 클라이언트 호환성**: 스프링 본이 있는 웨어러블은 대체 클라이언트 및 이전 Explorer 버전과 하위 호환되지만, 스프링 본 요소는 정적으로 유지됩니다. 경우에 따라 약간의 시각적 문제가 있을 수 있습니다.

## 기술 참고

스프링 본 물리는 함께 작동하는 두 개의 별도 아티팩트를 사용합니다:

1. **이 `.glb` 파일** 에는 본 이름만 포함되어 있으며( `springbone` 토큰 포함) 및 그 계층 구조가 들어 있습니다. 모델 파일에는 물리 파라미터가 저장되지 않습니다.
2. **웨어러블의 아이템 메타데이터** (`wearable.data.springBones`)에는 모든 물리 파라미터가 JSON으로 포함됩니다.

Builder에서 파라미터를 설정하면 웨어러블의 아이템 메타데이터에 저장됩니다. 즉, `.glb` 파일은 파라미터 편집으로 절대 수정되지 않습니다.

이 형식을 직접 다룰 필요는 없습니다. 읽기와 쓰기는 Builder가 처리합니다. 이 섹션은 참고용입니다.

### `.glb` 노드 계층 구조(예시)

모델 파일에는 본 이름과 부모-자식 관계만 포함됩니다:

```json
{
  "asset": {"version": "2.0"},
  "nodes": [
    {"name": "Avatar_Head", "children": [1, 2]},
    {"name": "SpringBone_earring_r", "children": [3]},
    {"name": "SpringBone_hair_left", "children": [4]},
    {"name": "springbone_earring_r_tip"}
    {"name": "SpringBone_hair_left_tip"}
  ]
}
```

### 아이템 메타데이터 (`wearable.data.springBones`)

물리 파라미터는 GLB 콘텐츠 해시를 키로 하여 웨어러블의 메타데이터에 저장됩니다:

```json
{
  "version": 1,
  "models": {
    "bafkreialsvt77jvpy673cnugp5ggnxfaalfncufweayuk3jbxskh3pelkm": {
      "SpringBone_earring_r": {
        "stiffness": 0.5,
        "gravityPower": 1.0,
        "gravityDir": [0, -1, 0],
        "drag": 0.6,
        "isRoot": true,
        "center": "Avatar_Hips"
      },
      "SpringBone_hair_left": {
        "stiffness": 2.0,
        "gravityPower": 0.8,
        "gravityDir": [0, -1, 0],
        "drag": 0.4,
        "isRoot": true
      }
    }
  }
}
```

* `models` 는 GLB 콘텐츠 해시를 키로 사용합니다. 남성 및 여성 표현이 동일한 웨어러블은 `.glb` 단일 항목을 가집니다.
* 각 본 항목은 다음의 정확한 노드 이름을 사용합니다. `.glb` (대소문자 구분).
* 팁 본(예:  `springbone_earring_r_tip`) 메타데이터 항목이 필요하지 않습니다 — 이는 기하학적 끝점 역할만 합니다.

### 메타데이터 매개변수

| 매개변수           | 유형  | 기본값          | 설명                                               |
| -------------- | --- | ------------ | ------------------------------------------------ |
| `강성`           | 실수형 | `2.0`        | 휴식 자세를 향한 복원력. 범위: 0–4.                          |
| `gravityPower` | 실수형 | `0`          | 중력의 크기. 범위: 0–2.                                 |
| `gravityDir`   | 벡터3 | `[0, -1, 0]` | 월드 공간에서의 중력 방향.                                  |
| `드래그`          | 실수형 | `0.5`        | 감쇠 / 감속 계수. 범위: 0–1.                             |
| `isRoot`       | 불리언 | —            | 이 노드가 스프링 체인의 루트인지 여부입니다. 필요합니다 `true` 루트 본에 대해. |
| `center`       | 문자열 | —            | 상대 관성 계산을 위한 참조 본의 이름입니다. 선택 사항입니다.              |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-ko/wearables-and-emotes/wearables/spring-bones.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
