dskjal
広告
広告

Blender で IK-FK 切り替えスイッチ

カテゴリ:blender

リグにスイッチを用意することはよくある。例を挙げると以下のようなときに使われる。

この記事では IK と FK との切り替えを行うスイッチのつくり方を紹介する。

IK の影響力を直接ドライバーで操作する方法

IK/FK の切り替えだけが必要ならば IK の影響力を直接ドライバーで操作するのが簡単だ。用意するボーンは以下の4つだ。IK とスイッチのボーンは腕とは独立した親子関係にする。

bone setting
用意するボーン

IK ターゲットとスイッチ用ボーンの Deform(変形)のチェックを外す。

uncheck deform
Deform(変形)のチェックを外した状態

ポーズモードで、スイッチ用ボーンに Limit Location(位置制限)をつける。今回は X 軸でスイッチを操作するので X 軸方向に0から1の間だけ動くように設定した。

limit location
スイッチボーンに位置制限をつける

For Transform にチェックを入れると、内部データも制限される。これにチェックを入れていないと内部データは範囲外の値を保持できる。この内部データの値が大きいと、マウスをドラッグさせても動かない(動き出すまでの距離が大きい)という現象が起こる。

腕ボーンに IK を設定し、IK の Influence(影響)にドライバーをつける。ドライバーの設定方法はドライバーを使うを参照。

ドライバーの設定
demo
動作デモ

Properties Shelf に IK の Influence を表示する方法

この方法では追加のボーンすら必要ない。以下のスクリプトを実行するだけだ。スクリプトの実行方法は UI スクリプト集を参照。このスクリプトの bone_names のところを IK を設定したボーン名に適宜書き換えて使う。

import bpy

class IKFK_PT_Panel(bpy.types.Panel):
    bl_label = "IK Bones"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "IK/FK Switch"

    @classmethod
    def poll(self, context):
        o = context.active_object
        return o and o.type == 'ARMATURE' and o.mode == 'POSE'

    def draw(self, context):
        iks = [(c, b.name) for b in context.active_object.pose.bones for c in b.constraints if c.type == 'IK']
        for ik, name in iks:
            self.layout.prop(ik, 'influence', slider=True, text=name)

bpy.utils.register_class(IKFK_PT_Panel)
demo
動作デモ

.blend ファイルダウンロード

スクリプトの自動実行

スクリプトファイル名の末尾を.py にして登録にチェックを入れると、ファイル読み込み時に自動的にスクリプトを実行する。

register
スクリプトの登録

加えて Blender ユーザー設定で Python スクリプトの自動実行にチェックを入れる。ファイルを開く前に実行されるスクリプトを確認する方法はないので、信用できない配布元の blend ファイルを開かないよう注意する

run script
Python の自動実行

IK 用のボーンと FK 用のボーンとデフォーム用のボーンを Copy Rotatioin で操作する方法

こちらの方法は面倒だが IK/FK 一致スクリプトを書きやすいメリットがある。

IK FK 切り替えスイッチ
IK と FK の切り替え

ボーンの構造

腕をデフォームさせるボーンを2回複製して IK 用ボーンと FK 用ボーンを作成する。 IK 用ボーンの名前の頭に IK_ をつけるなどして区別できるようにする。 IK、FK 用のボーンの Deform のチェックを外す。

ボーンの配置
ボーンの配置

B-Bone は Ctrl + Alt + Sでその太さを変えられる。 B-Bone にするには Properties > Armature > Display > B-Bone で変更できる。

b-bone の設定
B-Bone に切り替え

ボーンの設定

IK 用ボーンに IK を設定したら、デフォーム用ボーンにそれぞれ Copy Rotation をつける。 Space: を両方 Local Space にする。

Copy Rotation の設定
Copy Rotation の設定

スイッチの設定

Edit モードでスイッチ用のボーンを作成し、Pose モードでそれに Limit Location をつける。 今回は X 方向を使うが、操作しやすいなら他の軸を使っても構わない。 For Transform にチェックを入れ、Convert: を Local Space にする。

スイッチの移動制限
スイッチの移動制限

ドライバーの設定

デフォーム用ボーンについている Copy Rotation にそれぞれにドライバーを設定する。 ドライバーの基本的な使い方は ドライバーを活用する を参照。

ボーンひとつ分設定すればあとはドライバーをコピーするだけだ。 ドライバーのコピーは、ドライバーが設定された紫色の領域を右クリックし Copy Driver でできる。 ドライバーのペーストは設定したいパラメータを右クリックし Paste Driver でできる。 ドライバーはそれぞれ以下のように設定する。

FK のドライバーの設定
FK のドライバーの設定
IK のドライバーの設定
IK のドライバーの設定

違いは Expr: だけだ。どちらのドライバーも、スイッチのローカル X 座標の値を Copy Rotation の影響力に変換している。

blend ファイルダウンロード

関連記事

IK/FK 一致スクリプトを書く

Blender のアニメーション記事のまとめ


広告
広告

カテゴリ