Dev:JA/Ref/Release Notes/4.00/BoneCollectionsUpgrading
< Dev:JA | Ref/Release Notes | 4.00
目次
ボーンコレクションとカラーの4.0へのアップグレード
このページはアーマチュアレイヤーとボーングループで動作していた Python コードを、Blender 3.6から4.0へのアップグレードする方法のドキュメントです。
アーマチュアレイヤー
- Blender 4.0はアーマチュアレイヤーをボーンコレクションに変換します。
- コレクション名は
Layer N
になり、N には1から32が入ります。
- もしアーマチュアに、Bone Manager アドオンで設定したレイヤー名があった場合、これらの名前はアペンドされ、
Layer N - 名前
になります。このアドオンは好きな名前をアーマチュアのlayer_name_M
(M は0から31)という名前のカスタムプロパティに格納します。
- 一つ以上のボーンがあるレイヤーが変換されます。空のレイヤーはスキップします。
Visibility(可視性)の変更
Blender 3.6 以前:
arm.layers = [True, False, True] + 29 * [False]
arm.layers[0] = False
Blender 4.0:
for bcoll in arm.collections:
bcoll.is_visible = True
arm.collections['IK Controls'].is_visible = False
arm.collections[0].is_visible = False
ボーンの割り当てと割り当て解除
Blender 3.6以前:
arm.bones['arm_lower_R'].layers = [True, False, True] + 29 * [False]
arm.bones['arm_lower_R'].layers[1] = True
Blender 4.0:
arm.collections['IK Controls'].assign(arm.bones['arm_lower_R'])
arm.collections['IK Controls'].unassign(arm.bones['arm_lower_R'])
arm.collections[2].assign(arm.bones['arm_lower_R'])
arm.collections[2].unassign(arm.bones['arm_lower_R'])
ボーンを他のボーンのコレクションに割り当てる場合
Blender 3.6以前:
arm.bones['arm_lower_R'].layers = arm.bones['other_bone'].layers
Blender 4.0(bone.collections.set(other_collections)
関数があるまで):
bone = arm.bones['arm_lower_R']
bone.collections.clear()
for bcoll in arm.bones['other_bone'].collections:
bcoll.assign(bone)
レイヤー/コレクション内ボーンへのアクセス
Blender 3.6以前:
in_layer_3 = [bone for bone in arm.bones
if bone.layers[3]]
Blender 4.0:
# アーマチュアの編集モード以外:
in_collection = arm.collections['IK Controls'].bones
# アーマチュア編集モード:
in_collection = [ebone for ebone in arm.edit_bones
if 'IK Controls' in ebone.collections]
コレクション内のカスタムプロパティ
Blender 3.6以前では Armature 自身にデータを格納していました:
arm["custom_layer_data"] = {
0: 'some data for layer 0',
1: 'other data for layer 1',
}
Blender 4.0ではボーンコレクションがカスタムコレクションを持ちます:
arm.collections['IK Controls']['custom'] = 'some custom data'
arm.collections[3]['whatever'] = 'you need'
ボーングループからボーンコレクションへの移行
- Blender 4.0はボーングループをボーンコレクションに変換します。
- コレクション名はボーングループと同じになります。
- ボーングループはアーマチュアレイヤーの**後で**変換されます。もし
Layer 1
というボーングループ名があり、アーマチュアレイヤー1がボーンコレクションに変換された場合、そのボーングループ変換後のコレクションの名前はLayer 1.001
になります。
- ボーングループのコレクションは最初は非表示になっています。これは Blender 3.6以前と同様、レイヤーが可視性を決め、グループはそうではないという挙動にするためです(上記のボーンコレクションの可視性ルールを参照)。
- ボーングループはアーマチュア自身ではなく、オブジェクトのポーズデータに格納されていたため、オブジェクトが利用可能な時のみ変換されます。
3.6のファイルからの「アーマチュアデータ」のリンク(「アーマチュアオブジェクト」のリンクではないことに注意)では**この変換は行われず**、単にデータが利用不可になります。
- すべてのボーングループが対象で、ボーンが入ってなくても変換されます。
ボーンカラー
Blender 3.6以前ではボーングループをボーンの色付けに使用していました。ボーングループはアーマチュア自身ではなく、オブジェクトのポーズデータに格納されており、下記のような性質がありました。
- ボーンカラーがアーマチュア編集モードで利用できない。
- ボーンカラーがアーマチュアのユーザー間で共有できない。オブジェクト毎に設定や保守が必要。
- ボーンカラーはアーマチュアが共有されていてもオブジェクト毎の設定可能。これはボーンと各キャラクターの色でのコントラストを保つのに便利です。
Blender 4.0ではボーンカラーは直接アーマチュアボーンに格納されます。ポーズボーンはこれらの色をオーバーライドします。これにより、上で説明したような、オブジェクト毎に独立した色を持つことができるようになっています。
Python コード
Blender 3.6以前(ボーンをボーングループに割り当て済みと仮定)
# テーマカラー設定:
obj.pose.bone_groups['IK Bones'].color_set = 'THEME09'
# カスタムカラー設定:
group = obj.pose.bone_groups['IK Bones']
group.color_set = 'CUSTOM'
group.colors.active = (0.95, 1.0, 0.0)
# アーマチュアでのボーンカラー表示を無効化
arm.show_group_colors = False
Blender 4.0:
# アーマチュアボーンに設定:
bone = arm.bones['arm_lower_R']
# 代わりにポーズボーンに設定:
bone = obj.pose.bones['arm_lower_R']
# テーマカラー設定:
bone.color.palette = 'THEME09'
# カスタムカラー設定:
bone.color.palette = 'CUSTOM'
bone.color.custom.active = (0.95, 1.0, 0.0)
# アーマチュアでのボーンカラー表示を無効化
arm.show_bone_colors = False