> 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).

# 스프링 본

스프링 본으로 웨어러블에 동적 물리를 추가하세요

### 스프링 본이란 무엇인가요?

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

스프링 본은 **아닙니다** 기본 아바타 아마추어의 일부가 아닙니다. Blender(또는 다른 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)

### 스프링 본의 작동 방식

하나의 **스프링 체인** 은 물리를 함께 시뮬레이션하는 본들의 연속이며, 최소 두 개의 본이 있어야 합니다: 실제 스프링 본과 끝 본입니다. 스프링 본 하나만으로는 움직임이 발생하지 않습니다. 시뮬레이션은 물리를 구동할 스프링 본의 헤드와, 기하학적 끝점을 정의할 끝 본의 헤드를 필요로 합니다. 더 긴 체인(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)

![자식이 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)

### 계층 구조

스프링 본이 제대로 작동하려면 아바타의 원본 본 중 하나에 부모가 설정되어 있어야 합니다. 예를 들어 머리카락과 귀걸이의 경우, 계층 구조의 최상단 본은 ***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* 등… Blender(또는 선호하는 소프트웨어)의 좌우 명명 규칙을 따르기만 하면, 가장 잘 맞는 형식을 자유롭게 사용하세요.

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

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

### 제한

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

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

## Blender에서 스프링 본 만들기

스프링 본은 기본 아바타 아마추어를 위해 Blender에서 생성하는 추가 본입니다. 물리 매개변수는 나중에 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)

스프링 체인은 스켈레톤 부모에 연결될 필요가 없으므로 메시의 아무 곳에나 배치할 수 있습니다. 하지만 스프링 체인은 **연결되어 있어야 하며** 어떤 스프링 본도 오프셋할 수 없습니다.

본을 만든 후에는 위에서 언급한 명명 규칙에 따라 이름을 바꾸고, 체인이 올바른 본에 부모로 설정되어 있는지 확인하세요. 점선은 체인의 부모를 보여줍니다. 부모가 없다면 체인에 부모가 없다는 뜻입니다. In **편집 모드**자식을 먼저 선택한 뒤 부모를 선택하고 **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)

본 이름을 바꾸려면 편집 모드나 포즈 모드에서 선택한 다음, 본 속성 탭으로 가서 명명 규칙에 맞게 이름을 바꾸세요. 체인의 모든 본에 대해 이 작업을 수행합니다.

![](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)

{% 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)

### 메시 스키닝

스키닝은 메시를 아마추어에 바인딩하여 함께 움직이도록 하는 과정입니다. 이를 위해 각 본이 버텍스에 얼마만큼의 영향(가중치)을 줄지 정의합니다. 가중치가 높을수록 본이 메시를 더 많이 변형합니다. 이를 위해 **오브젝트 모드**에서 메시를 먼저 선택하고 **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)

#### 자동 가중치로

이름이 말해주듯이, 이 방법에서는 Blender가 아마추어의 각 본에 대한 버텍스 그룹을 만들어 자동으로 스킨 가중치를 설정하려고 합니다. 일부 경우에는 작동하지만, 추가 조정이 필요할 수도 있습니다. 생성된 그룹은 **데이터** 탭.

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

![버텍스 그룹 삭제.](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)

#### 빈 그룹으로

이 방법에서는 Blender가 아마추어의 각 본마다 모든 버텍스 그룹을 만들지만, 기본적으로 가중치는 0입니다. Edit Mode에서 수동으로 가중치를 할당하거나 Weight Paint 모드에서 칠해야 합니다. 이 방법은 어떤 그룹이 무엇에 영향을 주는지 더 세밀하게 제어할 수 있어, 하드 서피스나 특정 그룹에 완전히 할당되어야 하는 오브젝트에 특히 유용할 수 있습니다. 어떤 경우든 가중치를 할당한 후에는 Pose Mode에서 테스트하고 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)

#### 가중치 칠하기

스킨이 입혀진 메시를 테스트하려면 아마추어를 선택하고 **포즈 모드**로 이동한 뒤 키프레임을 설정하고, 다른 포즈를 만들기 위해 본을 회전시킨 다음 또 다른 키프레임을 설정하세요. 이렇게 하면 움직일 때 메시가 어떻게 변형되는지 확인할 수 있습니다. 포즈를 설정한 후에는 **오브젝트 모드**로 돌아가 메시를 선택하고 **가중치 페인트**.

![](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)

에서 **가중치 페인트**로 이동하면 도구 탭에서 스킨 가중치를 조정할 다양한 브러시를 찾을 수 있습니다. 편집할 버텍스 그룹을 선택하고(잠겨 있다면 영향도를 편집할 수 있도록 잠금을 해제하세요) 브러시를 사용해 영향을 추가하거나 제거하세요. 검정은 영향도 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)

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

### 내보내기

내보내기 전에 포즈 테스트 중 생성한 애니메이션 클립을 모두 삭제하세요. 포즈 모드로 가서 **하나의** 그리고 **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)

씬에 아바타 메시 같은 다른 오브젝트가 있다면 Outliner의 눈 아이콘을 클릭해 보이지 않게 하세요. 그런 다음 **파일** > **내보내기** > **gltf 2.0 (.glb, .gltf)**&#xB85C; 이동하세요. 내보내기 설정에서 Include를 펼친 뒤 **제한 대상** 를 **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)

## Builder에서 스프링 본 설정하기

을 이름에 포함한 웨어러블을 업로드하면 `springbone`라는 이름의 본을 Builder가 자동으로 감지하여 **스프링 본** 설정 패널을 표시합니다.

![](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)

이 패널에서 각 스프링 루트 본의 물리 매개변수를 설정할 수 있습니다. 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.                  |
| `중력 세기`      | 실수형    | `0`          | 중력의 크기입니다. 범위: 0–2.                           |
| `gravityDir` | 3차원 벡터 | `[0, -1, 0]` | 월드 공간에서의 중력 방향입니다.                            |
| `항력`         | 실수형    | `0.5`        | 감쇠 / 감속 계수입니다. 범위: 0–1.                       |
| `루트 여부`      | 불리언    | —            | 이 노드가 스프링 체인의 루트인지 여부입니다. 필수 `true` 루트 본에 대해. |
| `중심`         | 문자열    | —            | 선택 사항. 상대 관성 계산을 위한 참조 본의 이름.                 |


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
