1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BlenderでインポートしたVRMモデルのボーンを左右対称に編集する方法

Last updated at Posted at 2024-10-23

起きた問題

Blenderのポーズモードでボーンを左右対称に編集しようとミラー機能を使用したところ、片側のボーンしか動かない問題が発生しました。
スクリーンショット 2024-10-23 235348.png

環境

Blenderバージョン: 3.6
VRMインポートアドオン: VRM Add-on for Blender

原因

VRMモデルをBlenderにインポートすると、ボーン名の形式の違いにより、Blenderのミラー機能が正しく働かなくなります。

Blender: xxx.L / xxx.R の形式を左右対称と認識
VRM: J_Bip_L_Hand / J_Bip_R_Hand → Blenderではミラー対象とみなされない

この形式の違いにより、ミラー編集が片側しか反映されないという問題が起きます。

解決策:ボーン名の一括変換スクリプト

ボーン名をBlenderで認識される形式(語尾が .L または .R になっている)に変更する必要があります。
以下のPythonスクリプトを使用すると、現在のボーン名に応じてVRM形式またはBlender形式のいずれかに一括で変換できます。

このスクリプトは、Blender形式に変換可能なボーン名(_L__R_を含む)を検出した場合に.L.R付きのBlender形式へ変換し、それ以外の場合はVRM形式に戻します。
これにより、ポーズ作業時にはBlenderのミラー機能を使い、作業後はVRM形式へ復元することが可能です。

スクリーンショット 2024-10-23 234203.png

ボーン名を変換するPythonスクリプト

import bpy

# アーマチュアオブジェクトを取得
armature = bpy.context.active_object

def to_vrm_default():
    """ボーン名をVRM形式に戻す(末尾の .L/.R を削除し、_LR_ → _L_/_R_)"""
    for bone in armature.data.bones:
        if bone.name.endswith(".L"):
            # 末尾の .L を削除し、_LR_ を _L_ に置換
            new_name = bone.name[:-2].replace("_LR_", "_L_")
            bone.name = new_name
        elif bone.name.endswith(".R"):
            # 末尾の .R を削除し、_LR_ を _R_ に置換
            new_name = bone.name[:-2].replace("_LR_", "_R_")
            bone.name = new_name

def to_blender_default():
    """ボーン名をBlender形式に変換(_L_/_R_ → _LR_ に変換して末尾に .L/.R を追加)"""
    converted = 0
    for bone in armature.data.bones:
        if "_L_" in bone.name:
            new_name = bone.name.replace("_L_", "_LR_")
            bone.name = new_name + ".L"
            converted += 1
        elif "_R_" in bone.name:
            new_name = bone.name.replace("_R_", "_LR_")
            bone.name = new_name + ".R"
            converted += 1
    return converted > 0

# 状態に応じて変換実行(すでにBlender形式ならVRM形式に戻す)
if not to_blender_default():
    to_vrm_default()

↓実行後
fba0a55c-b4ad-632e-2351-60167f25343d.png

この手順によって、Blender内でVRMモデルのボーンを左右対称に編集できるようになります。

注意

このスクリプトはボーン名を書き換えるため、他ツールとの互換性やVRM出力に影響を与える可能性があります。
例えば、Humanoidボーンが未設定と判定されたり、エクスポート時にボーンが認識されなくなる可能性があります。
自動変換後に保存する場合は、変換前の状態を必ずバックアップしておくことを強く推奨します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?