Dev:JA/Ref/Release Notes/4.40/animation rigging
元記事:Animation & Rigging - Blender Developer Documentation
目次
[非表示]Blender 4.4:アニメーションとリギング
Slotted Actions(スロット化アクション)
アクションの構造が変わり、スロットの概念が導入されました (43d7558e5b)。簡単に言えば、スロットにより、同じアクション内に複数の「アニメーション」を格納できるようにします。
使用例
-
メッシュオブジェクト:シーン内の位置(オブジェクト)を、(オブジェクトデータに属する)シェイプキーの値や(オブジェクト毎に違う)フック用エンプティの位置と一緒にする
-
カメラオブジェクト:トランスフォーム(オブジェクト)とレンズパラメーター(オブジェクトデータ)
-
メタボールのトランスフォーム。メタボール群の全オブジェクトが同じアクションを共有できます
-
マテリアル。二つのデータブロック(マテリアル自身とそのシェーダーノードツリー)を効率よく管理できます
詳細
-
全アクションが「スロット化」されました。旧 blend ファイルのアクションはスロット化アクションにアップグレードされます。
-
(UI、オペレーター、
rna_struct.keyframe_insert
関数などによる)キー挿入で作成されたアクションは関連するデータブロック間でアクションを共有しようとします。(詳細) -
データブロックへのアクションの割り当ては、適切なアクションスロットに自動的に行おうとします。スロットに自動的に割り当てされない場合もあり、この時アクションはデータブロックを実際にアニメーションしません。詳細は下記をご覧ください。
アクションとスロットデータブロックタイプ
Blender 4.3までのアクションは、特定のデータブロックタイプと結びついていました。オブジェクトをアニメーションするアクションはマテリアルには割り当てできず、逆も不可能でした。これは互換性のある物をアクションセレクタですぐ選択できるという点では非常に便利でした。
現在、単一アクションは複数のデータブロックを同時にアニメーション可能で、上記の制約はアクションから各スロットにまとめて移動しました。どのアクションも、どんなデータブロックにでも割り当て可能になったのです。 そのスロットは特定のタイプと結び付けられるため、例えば前述のように、マテリアルをアニメーションするスロットは、オブジェクトには使用できず、逆もできません。
自動割り当て規則
アクション選択の動作を、Blender ユーザーにとって確実に動作するようにし、同時に Python スクリプトの動作も同じに保つよう尽力しました。この二つの目標が一致しない場合は、ユーザーにとっての信頼性とわかりやすさを優先しました。
アクションの割り当てにおけるアクションスロットの自動選択は下記のように行われます。最初にスロットを見つけたルールが優先されます。
- データブロックに、最後に割り当てられたスロット名が記録されているかどうか。もし新しく割り当てられたアクションにはその名前があれば、それが選ばれます。
- そのアクションにデータブロックと同じ名前のスロットがある場合、それが選ばれます。
- アクションにスロットが一つしかなく、何も割り当てられていない場合、それが選ばれます。
- アクションが NLA ストリップまたはアクションコンストレイントに割り当てられていた場合、そのアクションが単一スロットを持っており、さらにそのスロットが適合する ID タイプであれば、それが選ばれます。
通常のアクションの割り当て(NLA ストリップやアクションコンストレイント以外)では、最後のルール(「そのアクションが単一スロットを持っていれば、それを使用」)は適用されません。
これは少しだけ後方互換性に反しており、Blender 4.3の旧アクションでの最終状態(「このアクションによりアニメーションされている」)が、スロット化アクションの最終状態(「自動割り当てされたスロットがない場合、アニメーションしない」)と違うことがあります。これは下記のワークフローに対応するために意図的に行われています。
- 立方体のアニメーション作成でアクションが生成される
- 同じアクションで「モンキー」をアニメーションできるよう、アクションをモンキーに割り当て
- モンキーのキー挿入開始。新規スロットの自動生成と自動割り当てがモンキーに行われる
もし上記のルール4をこのケースで適用すると、二つめのステップで立方体のスロットがモンキー用にも自動的に選択され、モンキーのプロパティが立方体のアニメーションですぐに上書きされてしまいます。
スロット化アクションでの作業
アニメーションの統合
DopeSheet(ドープシート)の Action Editor(アクションエディター)モードから選択中の全オブジェクトのアニメーションを一つのアクションに統合できます(Action(アクション)メニュー→Merge Animation(アニメーションを統合))。データは常にアクティブオブジェクトのアクションに統合されます。この機能は選択中の各オブジェクトの関連するデータブロックにもアクセスして統合します。つまり、例えば単一オブジェクトのシェイプキーでさえもオブジェクトと統合できるということです。(34a18c7608、マニュアル(英文))
アニメーションの分離
同様にアクションエディターから、スロットや選択中のチャンネル領域を新規アクションに移動することもできます(Action(アクション)メニュー→Move Slots to new Action(スロットを新規アクションに移動))。この方法では全スロットが単一のアクションに移動します。これらのスロットのユーザーは新しいアクションに再割り当てされます。 (95b6cf0099、マニュアル)
各スロットをそれぞれ各自のアクションに分離することもできます(Action(アクション)メニュー→Separate Slots(スロットを分離))。そのアクション外の特定のスロットに移動するため、これらのスロットの全ユーザーはこの機能により新規アクションに再割り当てされます。 (85e4bd19f6、マニュアル(英文))
旧プロジェクトのスロット化アクションへのアップグレード
旧プロジェクトをアップグレードするのに何も特別なことをする必要はありません。Blender は自動的に旧 blend ファイルのアクションをスロット化アクションにアップグレードします。この機能は開いて保存してファイルが古い場合でも、blend ファイル間でアクションをリンクしている複数のファイルのプロジェクトでさえも適切に動作し、アニメーションの割り当てを維持してくれます。
-
アップグレードしたアクションはすべて "Legacy Slot" という名前の単一スロットを持ちます。
-
このスロットはそのアクションが使用しているのと同じタイプになります。アクションがマテリアルをアニメーションしている時は、その新規スロットもマテリアルタイプに紐づけされます。
-
アップグレードで統合されるアクションはありません。全アクションが別々のアクションのままになります。
前方互換性
Blender 4.4はスロット化アクションを旧バージョンの Blender と互換性のある方法で保存します。Blender 4.3以前では最初のスロットのみ見えます。その時にその blend ファイルを保存してしまうと、二つめ以降のスロットとそのアニメーションデータは失われてしまいます。スロット名も消えます。
もしマルチスロットのアクションがあり、旧 Blender と互換性を保ちつつ保存したい場合は、Separate Slots(スロットを分離) オペレーターで複数の単一スロットのアクションに分離してください。
Python API
Python API のリリースノートに、Python API への技術的な変更点があります。このセクションでは、単に API 内の概念的な変更について述べます。
-
Blender 4.4で導入されたスロット(slots)、レイヤー(layers)、ストリップ(strips)、チャンネルバッグ(channelbags)用の新しい Python API。
-
今も既存の F カーブとアクショングループにアクセスする Python API も利用可能ですが、「後方互換性用旧 API」として分類されています。これらは F カーブやグループの最初のスロットのみ操作し、これらの API により作成された F カーブやグループにも "Legacy Slot" という名前のスロットが作成されます。
-
新しいデータモデルも、将来のレイヤー化アニメーション対応のために、レイヤーとストリップを追加します。しかし、実際にはまだ対応していないため、下記の制限があります。
- アクションは0または1つのレイヤーを持つことができます。
- レイヤーは0または1つのストリップを持つことができます。
- そのストリップは、無限または0のオフセットの
keyframe
タイプである必要があります。
レイヤー化アニメーションのコンテクスト内のスロット化アクションについての詳細は、レイヤー化アニメーション(英文)をお読みください。
Pose Library(ポーズライブラリ)
ポーズライブラリが Pose Asset(ポーズアセット)とともに作業する時のワークフローがスムーズになるよう更新されました。(358a0479e8、マニュアル(英文))
- もう作成済みのポーズが現在のアクションとして設定されなくなりました。
- ポーズアセットを現在のファイル以外のアセットライブラリとして作成可能になりました。
- 現在のポーズからポーズアセットを更新できるようになりました。
- ポーズアセットが簡単に削除可能に。
- スロット(英文)を使用し、ポーズアセットに複数のアーマチュアのデータを格納できるようになりました。
注意: 外部ライブラリに作成したポーズアセットはアセット毎に一つのファイルとして保存されます。これらのファイルは Blender 内で開いて編集できません。代わりに提供されたオペレーターを使用する必要があります。これは既知の制限であり、#133878: WIP: Support Editing External Blendfile Data using PartialWriteContextにて取り組み中です。そのため、このオペレーターは、blend ファイルのローカルまたは Blender 内でこのオペレーターを使用して外部ライブラリに作成されたアセットでしか動作しません。
オペレーター
Create Pose Asset(ポーズアセットを作成)
ポーズアセットを作成すると、アセット名、ライブラリ、カタログが指定可能なポップアップウィンドウが表示されます。
これは3Dビューポートの Pose(ポーズ)メニューからもアクセス可能です。
アセットライブラリもアセットシェルフも表示されていない時にこのオペレーターを実行すると、オペレーターを実行した3Dビューポートにアセットシェルフがポップアップ表示されます。
また、複数のアーマチュアのポーズを含んだポーズアセットも作成可能になりました。単に複数のアーマチュアでポーズモードに入り、選択中のアーマチュアのボーンからポーズアセットを作成するだけです。 これは裏でスロット(英文)を使用し、アクション適用時にどのデータを使用すべきかを決めています。
PYTHON: 後方互換性のため、このオペレーターは以前と同じ名前になっています(
poselib.create_pose_asset
)が、プロパティactivate_new_action
は廃止予定で動作しなくなっており、Blender 5.0で削除される予定です。
Modify Pose Asset(ポーズアセットを変更)
アセットは次の4つの方法で変更できます。
- Adjust (調整):アセット内の既存のチャンネルの更新。ただしどのチャンネルも追加や削除をしません。
- Replace (置換):ポーズアセット内の全チャンネルを完全に現在の選択のチャンネルで置き換えます。
- Add (追加):選択ボーンのチャンネルをポーズアセットに追加します。既存のチャンネルは更新されます。
- Remove (削除):ポーズアセットの現在の選択のチャンネルを削除します。
これはポーズアセットの右クリックメニュー内にあります。
Delete Pose Asset(ポーズアセットを削除)
ポーズアセット上の右クリックメニューから削除可能です。現在の blend ファイル内のローカルと、外部ライブラリ内とでは挙動が違います。ローカルアセットでは単にアセット用のマークを解除するだけですが、外部ライブラリ内のアセットではそのファイルが削除されます。
リギング
-
アーマチュアの対称化(Symmetry)オプション有効時、ボーンコレクションのメンバーをミラー反転するように。詳細はマニュアル(英文)をご覧ください。(16c2e71ab0)
-
サイドバーの Normalization(正規化)が頂点グループのロックに対応しました。(d6da9710d0)
-
モディファイアーやコンストレイント、シェイプキーの削除時、これらへのドライバーも削除されるように。(5100a80f7f)
Graph Editor(グラフエディター)
F カーブの Noise(ノイズ)モディファイアーの値の生成アルゴリズムがアップデートされました。これはバグ報告(英文)を反映した物です。
- 現在、その値が-0.5から0.5の範囲から出ないようになりました。
- ノイズの形状をコントロールする二つの新しいプロパティ:Lacunarity(空隙性)と Roughness(粗さ)が追加されました。デフォルト値は従来と似た挙動になる物が選択されています。
- 旧ノイズを使用するチェックボックスがあり、旧ファイルではシーンの見た目が変わらないよう、自動的に有効になります。(2536ddac0d, Manual)
Constraint(コンストレイント)
- コンストレイントの関係ライン(コンストレイントを付けたオブジェクトとコンストレイントのターゲットの間に表示)が、ターゲットがない時に表示されないように (266d1e8d2f)。従来はターゲットがない場合、ワールド原点との間に表示されていました。