Skin Weights Transfer
概要
Skin Weights Transfer は、選択したコンポーネント上で、複数のソースインフルエンスから複数のターゲットインフルエンスにスキンウェイトを移動するツールです。
ソースインフルエンスのウェイトは比例配分で減算され、その分がターゲットインフルエンスに分配されます。複数ターゲットへの分配方法は Even(均等)、Proportional(既存ウェイト比率)、Distance(距離ベース)の 3 種類から選択できます。移動量はパーセンテージまたは絶対値で指定できます。
Soft Selection に対応しており、フォールオフ領域のコンポーネントも含めて、ウェイト値に応じた量のウェイトが移動されます。
起動方法
専用のメニューか、以下のコマンドでツールを起動します。
import faketools.tools.rig.skin_weights_transfer.ui
faketools.tools.rig.skin_weights_transfer.ui.show_ui()

使用方法
ウェイトを移動するには、以下の手順を行います。
- skinCluster
が設定されたメッシュまたはコンポーネントを選択し、
SETボタンをクリックして skinCluster を設定します。 - 左側の Source (from) リストから、ウェイトの移動元となるインフルエンスを選択します(複数選択可: Ctrl+クリック / Shift+クリック)。
- 右側の Target (to) リストから、ウェイトの移動先となるインフルエンスを選択します(複数選択可: Ctrl+クリック / Shift+クリック)。
- Distribution コンボボックスで分配方法を選択します(ターゲットが複数の場合に有効)。
- 対象となる頂点・CV・ラティスポイントを選択します(Soft Selection 有効時はフォールオフ領域も含まれます)。
- 転送モード(Percentage / Value)を選択します。
- Amount スライダーで移動量を設定します。
- 実行ボタンをクリックしてウェイトを移動します。
オプション
SkinCluster
操作対象の skinCluster を設定します。
- メッシュまたはコンポーネントを選択した状態で
SETボタンをクリックすると、選択されたオブジェクトに設定されている skinCluster が自動的に検出されます。 - 検出された skinCluster 名がフィールドに表示されます。
インフルエンスフィルター
インフルエンスリストの表示を絞り込む機能です。
- テキストフィルター: スペース区切りでキーワードを入力すると、いずれかのキーワードを含むインフルエンスのみが表示されます(OR 検索)。
- Affected Only ボタン: オンにすると、現在選択しているコンポーネントに対してウェイトが 0 より大きいインフルエンスのみが表示されます。表示順はウェイトの合計値が大きい順にソートされます。Maya の選択を変更するとリアルタイムに更新されます。
Source (from) リスト
ウェイトの移動元となるインフルエンスを選択します。
- 複数のインフルエンスを選択できます(Ctrl+クリック / Shift+クリック)。
- 選択中のインフルエンス数がラベルに
[N]の形式で表示されます。 - リストで選択したインフルエンスは Maya ビューポート上でハイライト表示されます。
Target (to) リスト
ウェイトの移動先となるインフルエンスを選択します。
- 複数のインフルエンスを選択できます(Ctrl+クリック / Shift+クリック)。
- 選択中のインフルエンス数がラベルに
[N]の形式で表示されます。 - Source と Target で同じインフルエンスを選択することはできません(重複するとエラーになります)。
Distribution(分配方法)
複数のターゲットインフルエンスにウェイトを分配する方法を選択します。ターゲットが 1 つの場合は、どの設定でも結果は同じです。
- Even: 移動したウェイトを全ターゲットに均等に分配します。
- Proportional: 各ターゲットの既存ウェイト比率に基づいて分配します。すべてのターゲットのウェイトが 0 の場合は、自動的に Even にフォールバックします。
- Distance: コンポーネントと各ターゲットジョイントの距離に基づいて分配します(逆距離加重法)。近いジョイントほど多くのウェイトを受け取ります。
転送モード(Percentage / Value)
ウェイトの移動方法を選択します。
- Percentage: ソースインフルエンスのウェイト合計に対する割合(0〜100%)で移動量を指定します。
- Value: 絶対値(0.0〜1.0)で移動量を直接指定します。ソースのウェイト合計を超える場合は、ソースの合計値にクランプされます。
Amount
転送モードに応じた移動量を指定します。
Percentage モード(デフォルト):
- 100%: ソースインフルエンスのウェイトをすべてターゲットに移動します。
- 50%: ソースインフルエンスのウェイトの半分をターゲットに移動します。
- 0%: ウェイトは移動されません。
Value モード:
- 1.0: 最大 1.0 のウェイトをターゲットに移動します(ソースの合計を超えない範囲)。
- 0.1: 最大 0.1 のウェイトをターゲットに移動します。
Shift キーによるスナップ:
Shift キーを押しながらスライダーをドラッグすると、値が一定の刻みでスナップします。
- Percentage モード: 5 刻み(0, 5, 10, 15, … 100)
- Value モード: 0.05 刻み(0.00, 0.05, 0.10, 0.15, … 1.00)
複数のソースインフルエンスが選択されている場合、各ソースのウェイトは保有比率に応じて比例配分で減算されます。
Soft Selection 対応
Maya の Soft Selection が有効な場合、フォールオフ領域のコンポーネントも自動的に対象に含まれます。各コンポーネントの移動量は Soft Selection のウェイト値(0.0〜1.0)に応じて乗算されます。
- ウェイト 1.0(直接選択): 指定した Amount がそのまま適用されます。
- ウェイト 0.5(フォールオフ中間): Amount の 50% が適用されます。
- ウェイト 0.0(範囲外): ウェイトは移動されません。
Soft Selection が無効の場合は、従来通りすべての選択コンポーネントに対して均等に移動が行われます。
注意: Affected Only フィルターは Soft Selection の影響を受けず、従来通り直接選択されたコンポーネントのみを参照します。
ウェイト移動の仕組み
各コンポーネントに対して以下の計算が行われます。
- すべてのソースインフルエンスのウェイト合計を算出します。
- 転送モードに応じた移動量を算出し、Soft Selection ウェイトを乗算します。
- 各ソースインフルエンスから、保有比率に応じてウェイトを比例配分で減算します。
- 減算した合計分を、選択した Distribution 方法に基づいてターゲットインフルエンスに分配・加算します。
Percentage モードの計算式:
移動量 = ソース合計 × (Amount / 100) × Soft Selection ウェイト
Value モードの計算式:
移動量 = min(Amount × Soft Selection ウェイト, ソース合計)
単一ターゲットの例
例(Percentage モード):
- Source A のウェイト: 0.6、Source B のウェイト: 0.3、Amount: 50%、Soft Selection ウェイト: 1.0 の場合
- 移動量: (0.6 + 0.3) × 0.5 × 1.0 = 0.45
- Source A から減算: 0.45 × (0.6 / 0.9) = 0.30 → 残り 0.30
- Source B から減算: 0.45 × (0.3 / 0.9) = 0.15 → 残り 0.15
- Target に加算: +0.45
例(Soft Selection 適用時):
- 同じ条件で Soft Selection ウェイトが 0.5 の場合
- 移動量: (0.6 + 0.3) × 0.5 × 0.5 = 0.225
- Source A から減算: 0.225 × (0.6 / 0.9) = 0.15 → 残り 0.45
- Source B から減算: 0.225 × (0.3 / 0.9) = 0.075 → 残り 0.225
- Target に加算: +0.225
複数ターゲットの例
例(Even 分配):
- Source A のウェイト: 0.9、Amount: 100%、Target X と Target Y の 2 つを選択
- 移動量: 0.9
- Target X に加算: 0.9 × 0.5 = 0.45
- Target Y に加算: 0.9 × 0.5 = 0.45
例(Proportional 分配):
- Source A のウェイト: 0.6、Amount: 100%、Target X(既存ウェイト 0.3)と Target Y(既存ウェイト 0.1)を選択
- 移動量: 0.6
- Target X の比率: 0.3 / (0.3 + 0.1) = 0.75
- Target Y の比率: 0.1 / (0.3 + 0.1) = 0.25
- Target X に加算: 0.6 × 0.75 = 0.45
- Target Y に加算: 0.6 × 0.25 = 0.15
例(Distance 分配):
- Source A のウェイト: 0.8、Amount: 100%、Target X(頂点から距離 2.0)と Target Y(頂点から距離 8.0)を選択
- 移動量: 0.8
- Target X の逆距離: 1/2.0 = 0.5
- Target Y の逆距離: 1/8.0 = 0.125
- Target X の比率: 0.5 / (0.5 + 0.125) = 0.8
- Target Y の比率: 0.125 / (0.5 + 0.125) = 0.2
- Target X に加算: 0.8 × 0.8 = 0.64
- Target Y に加算: 0.8 × 0.2 = 0.16
対象コンポーネント
以下のコンポーネントタイプに対応しています。
- 頂点(Vertex)
- CV(Control Vertex)
- ラティスポイント(Lattice Point)
選択されたコンポーネントが skinCluster のジオメトリに属していない場合、エラーとなります。