Dev:JA/Ref/Release Notes/4.00/BoneCollectionsUpgrading

提供: wiki
< Dev:JA‎ | Ref/Release Notes‎ | 4.00
2023年10月27日 (金) 07:07時点におけるYamyam (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

元記事:Reference/Release Notes/4.0/Animation Rigging/Bone Collections & Colors: Upgrading - Blender Developer Wiki

ボーンコレクションとカラーの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