# 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) です。