# quick_skin()

메시와 지금 있는 본으로 웨이트를 만들어, 고른 레이어 한 장에 넣습니다.

레이어를 지정하지 않으면 **지금 선택된 레이어**에 칠합니다. `Layer 1` 을 선택한 뒤 호출하면 `Layer 1` 만 바뀌고 `[Base]` 는 그대로입니다. 다른 레이어를 유지하는 것이 기본입니다.

`falloff` 와 `resolution` 을 생략하면 [scan](scan.md) 이 고른 값을 씁니다. 해상도는 64, 128, 256, 512 만 됩니다. 300 처럼 그 바깥 숫자를 주면 가까운 값으로 바꾸지 않고 거절합니다. `error` 는 `bad_resolution` 입니다. falloff 가 0 에서 1 사이가 아니면 `bad_falloff` 입니다.

`bones` 에 이름을 주면 그 본만 웨이트를 받습니다. 나머지 본은 영향 목록에는 남고 웨이트는 0 입니다. 이름이 하나도 안 맞으면 `no_bones` 입니다. 메시가 없으면 `no_mesh` 입니다.

성공해도 `unseeded_bones` 가 있을 수 있습니다. 메시 밖에 있어서 격자에 앉지 못한 본입니다. 그 본은 웨이트가 0 이라, 나중에 「이 본만 안 움직인다」로 보입니다. 결과를 믿을 때 이 목록을 한 번 출력합니다.

Trial 에서 Quick Skin 이 잠겨 있으면 `trial_feature_locked` 입니다. 도중에 멈추면 `cancelled` 이고, 레이어는 호출 전으로 돌아갑니다.

### 시그니처
```python
skin.quick_skin(
    falloff=None,
    resolution=None,
    max_influences=4,
    keep_other_layers=True,
    bones=None,
) -> result
```

| 인자 | 의미 |
|---|---|
| `falloff` | 0 은 부드럽게, 1 은 뻣뻣하게. 생략하면 추천값. |
| `resolution` | 64, 128, 256, 512. 생략하면 추천값. |
| `max_influences` | 한 점이 받는 본 수. 기본 4. |
| `keep_other_layers` | `True` 면 다른 레이어를 그대로 둡니다. |
| `bones` | 시드할 본 이름 목록. 생략하면 슬롯의 본 전부. |

창이 진행 막대를 붙일 때만 쓰는 `progress`, `target_layer_id`, `seed_gap`, `smooth_strength`, `smooth_iterations` 도 받습니다. 스크립트에서 레이어를 고르려면 그 레이어를 먼저 활성화하고, 인자는 비웁니다.

### 반환

| 필드 | 의미 |
|---|---|
| `ok` | 칠하기가 끝났는지. |
| `error` | 실패 코드. 성공이면 비어 있습니다. |
| `layer_name` | 실제로 칠한 레이어 이름. |
| `vert_count` | 정점 수. |
| `bone_count` | 본 수. |
| `unseeded_bones` | 격자에 앉지 못한 본. |
| `elapsed_s` | 걸린 초. |

### 예제
```python
skin = api.skin()
result = skin.quick_skin(bones=["Bip001 L UpperArm", "Bip001 L Forearm"])
print(result.ok, result.layer_name)
print(result.unseeded_bones)
```

사람 리그 전체를 맵으로 나누려면 [quick_skin_human](quick-skin-human.md) 입니다.