トップ  >  1. Blenderリリースノート翻訳  >  Blender機能別  >  Blender2.46 Constraint の改良
元記事:blender.org - Constraint Improvements


Constraint の改良



Blender の Constranit システムがリファクタリングされ、より拡張しやすくよりクリーンなコードになりました。そして、よりパワフルになり、ユーザビリティもあがりました。それにつれ、多くの Constraint が追加されてきました。また、いくつか注目すべきアーキテクチャの変更が行われ、パワフルな機能を多く追加することができました。

以下は新システムのハイライトの一部です。
[wiki]-全 Constraint での座標空間のコンバート
-複数のターゲットのサポート(適切な Constraint のみ出現)
-新 Constraint…ChildOf、Transformation、Script(PyConstraint など)[/wiki]


Constraint の評価


Constraint を評価する方法がクリーンアップされ、すべてがシングルパスで行えるようになりました。すべての Constraint はスタックの表示順で評価されます(IK と Rigid-Body-Joint 以外。この二つはすべての Constraint の処理が完了した後で動作するソルバーの、単なるインターフェイスとして動作するためです)。

つまり、それぞれの Constraint がそれ以前のすべての Constraint の結果を使用して評価され、各 Constraint の効果は、その Costraint の結果と、それ以前の結果とをブレンドした物になります。


座標空間の変換


Constraint を順番どおりに評価できるよう、その Constraint がそのオーナーとターゲットの行列を評価するのに、どの「座標空間」を取得するのかを更にコントロールできるようにするのと同時に、座標空間変換システムが考え出されました。

ある Constraint が評価される前に、すべての関連する行列が、(ワールド空間から)その Constraint が処理するのに適切な座標空間に変換されます。その後、これらはワールド空間へと再変換され、次の Constraint への準備が整います。

Constraint 内の座標空間の変換と関係ある場所で、Constraint の評価用に、どの座標空間がオーナーと(適用できるなら)ターゲットの行列で使用されるのかを指定します。

オーナー/ターゲットのタイプによって利用できる座標空間が変わります。
[wiki]-''オブジェクト用'':
--''World-Space'' - ワールド座標の原点との相対位置と、ワールド軸と比較した回転/スケーリング
--''Local (Without Parent)'' - 親との相対位置、回転とスケーリングは抽出された親の回転とスケーリングに適応されます。

-''Bone 用'':
--''World-Space'' - オブジェクトと同じ
--''Pose-Space'' - ObjectMode での Armature オブジェクトの Transform の効果を無視した物(Transform Properties はこれを表示)
--''Local with Parent'' - 親 Bone の効果が保持されたままなこと以外は「偽」の Local です。
--''Local'' - 「真」の Local Transform(Bone の Rest 位置との相対位置)[/wiki]


IK の二つのターゲット

IK Constraint が一つのターゲットに制限されない、新しい Constraint の可能性を見せている

マルチターゲットのサポート


システム的に Constraint が複数の数のターゲットを所有できるようになりました。従来、このシステムは Constraint がせいぜい一つのターゲットしか持てないことを前提としていました。これは大きな制限であり、PyConstraint が複数のターゲットを持つ能力を妨げていました。
この改良によるもう一つの恩恵は、IK Constraint で、このサポートのパーツを使用することで、Pole ターゲットが適切に処理されます。



Bone の中間点を指す Bone

Bone の中間点に向いている Stretch-to Constraint

Head/Tail (Bone ターゲットのみ)


ターゲットの位置を入力として必要とする Constraint で、新たに Head/Tail オプションができました(アニメーション可)。これは Bone のみ有効で、ある Bone の Head (太い先端)と Tail(細い先端)の間のライン上の割合(小数)で指定します。デフォルトの0.0で Head をターゲットとし、1.0では Tail をターゲットとします。この範囲を超える値も可能です(訳注:実際は UI 上でクリッピングされているようです)。

これにより、(以前は複雑になっていた)いくつかの設定が非常に簡単になりました。例えば、ターゲット Bone の色んな部分にヘルパー Bone を Parent しなくても、ひとつの Bone の中間点を、他の物のターゲットにするようなことができるようになりました。



Mesh の一部を指す Bone

Mesh の一部を Stretch-to Constraint が指すところを示すサンプル

VertexGroup ターゲット


Mesh と Lattice用に、Constraint のターゲットとして VertexGroup を指定するオプション("VG:" フィールド)が付きました。その「ターゲット」の位置と方向は、その VertexGroup 内の Vertex の位置と Normal の平均が使用されます。ターゲットオブジェクトの Transform も処理時に考慮されます。

これにより、Empty を Vertex 群に Vertex Parent し、その後 Bone に Copy Location Constraint を追加し、ターゲットを Empty にする必要が少なくなります。



新 Constraint



様々なパワフルで新しい Constraint が追加されました。これらは以前に計画されていたが、リリース時にはずされていた機能、またはリクエストの多かった機能です。

Script (PyConstraints)


この Constraint は、ユーザにより Python で Constraint をコーディングできます。あるスクリプトを PyConstraint として使用可能にするには、ファイル内に含める必要があります(バージョンによる互換性の問題を回避するため)。

PyConstraints は複数のターゲットを(スクリプトが要求するだけ)持つことができます。また、自身の設定を持つこともでき、ID Properties として格納され、スクリプトで定義もされます。これらの設定は 'Options' ボタンからアクセスできます(そう処理するコードがある場合)。

PyConstraint スクリプトの作成を始めるには、Text ウィンドウを開き、PyConstraint script template を選択します。これで必要なベアボーンのコードと、何をすればいいかの説明が付いた新しいスクリプトが作成されます。


Child-Of


この Constraint はアニメーション可能な複数の親子関係を可能にします。元々は Constraint のデザインの一部だったのですが、実装されていませんでした。

この Constraint で新しい親子関係を作成した時、通常、親を指定した後に 'Set Offset' ボタンをクリックする必要があります。これは親からの不必要な Transform をキャンセルし、オーナーが Constraint が適用される前の位置と方向に戻れるようになります。
特定の Child-Of Constraint のために、他のすべての Constraint を禁止して、'Set Offset' を適用しなければならないことに注意して下さい。

また、親がオーナーに影響する、各 Transform チャネルのON/OFFを切りかえることができます。実際には、これらをそのままにしておくか、特定の Transform のボタンをすべて OFF にするかのいずれかが、大抵の場合ベストでしょう。


Transformation


この Constraint は、Transform をあるタイプから別のタイプにしたり、ある範囲から別の範囲に変換することができます。代表的な使用としては歯車(下記の注意を参照)や、位置を元にした回転の設定などがあります。

注意:残念ながら、計算に関する根本的な問題がいくつかあるため、これを歯車に使用することはできません。要は上手く動作しない、ということです。

この Constraint のユーザインターフェイスはちょっと複雑ですが、以下のように非常にシンプルに分解できます。
[wiki]-左側=元(ターゲットからの)Transform、右側=先(オーナーの)Transform
-左側のコントロール:元 Transform の各軸(X, Y, Z)の範囲
-右側のコントロール:どの元チャネル(X, Y, Z)を各チャネル用に読み込み、入力の範囲をどの範囲にマッピングするか
-Loc/Rot/Scale ボタン:どの Transform が作用するか
-Extrapolate ボタン:範囲外の値を単純にクリッピングする代わりに延長します。[/wiki]


Limit Distance


この Constraint は、ターゲットの周辺に「影響の球」を設定します。オーナーはその内部、外部、表面上に移動が限定されます。

この Constraint の使用例の一つに、チェーンに「貼りつく」IK エフェクタを作成し、コントロールする、というのがあります。そのためには、チェーンの根元の位置にヘルパー Bone があることが必要となり(循環参照問題の回避)、また、そのチェーンをこれに Parent していなければなりません(ただしチェーンにはしない)。この IK エフェクタはこのヘルパー Bone をこの Constraint のターゲットとして使用することになります。

この Constraint を追加する方法として、[Ctrl]+[Alt]+[C]キーを使用し、ターゲットとオーナー間の距離を適切に初期化することをお勧めします。これは手動でも可能ですが、正しく行うのは非常に困難です。


改良された Constraint



従来の多くの Constraint も、より使いやすく改良されました。更に Constraint コードの大幅な再構築も行われました(これは現存のすべての Constraint に影響します)。これは新しい Constraint の追加や、現存の物の保守をより簡単にするために必要なことでした。


Action Constraint


Action Constraint がもっと多くの状況で動作するようリライトされました。また、自前で持っていた計算式の代わりに、新しい軸空間変換を使用するようになりました。

最も大きい変更点は、従来はターゲットの回転だけしか使用できなかったのが、位置や大きさも使用できるようになったことです。これが Peach オープンムービープロジェクトのリグにとって重要な物であったことが、この機能がどれだけパワフルな物かを証明しています。

軸空間変換は、オーナーを駆動するのにどの値を使用するかの選択が広がることを意味します。しかし、それ以外にも現在は削除された 'Local' オプションのバグの多い性質も明らかにしました。結果的に、このバグの多い 'Local' オプションに頼るリグ(Bassam Kurdali 氏による 'Mancandy' キャラクタのあごなど)が壊れることになりました。

他の注目すべき変更点として、Action Constraint が Bone 同様、オブジェクトでも使用可能になったことがあります。


Copy (Loc/Rot/Scale) Constraint


すべての Copy Constraint に 'Offset' オプションが付きました。これはオーナーのオリジナル Transform を、ターゲットからの Transform の上に適用できます。これでその結果を調整できます。

軸空間変換のサポートがこれらの Constraint で大々的に使用されることで、より強力なコピーの組み合わせが可能となります。一般的には、同じ軸空間タイプをオーナーとターゲットの両方で使用するのが、精密な結果を受け取るためには望ましいのですが、時には他の組み合わせでも面白い結果が得られるかもしれません。

ここで、ある状況で起こりうる問題とその解決策について記します。
[wiki]-Copy Location Constraint を使用し、Local-Local 軸空間にしている場合、時々 'Offset' 設定を ON にする必要があるかもしれません。これは前方循環と連動して Bone が動かない問題についての回避方法です(その代表として、執筆時当時のバージョンの Mancandy リグがあります)。
[/wiki]

Limit (Loc/Rot/Scale) Constraint


Limit Constraint のすべてに 'For Transform' オプションが付きました。このオプションはその Constraint を、オーナーが Transform された時、直接 Transfrom 結果を使用するようにし、一旦その限界(右側のスペース内)に達すると、Transfrom Properties パネル内の値の変更を止めます。

これらの Constraint でも、軸空間変換のサポートは大々的に使用されています。ターゲットがない場合、「オーナー」空間のみが使用可能になります。変換により、値をどう制限するかという設定の自由度が上がります。


Clamp-To Constraint


オーナーがターゲットに指定した Path をループして追従するオプション'Cyclic' が付きました。以前は、オーナーが過去に移動していれば、バウンディングボックスの辺の境界が計算に使用され、そのオブジェクトが境界に一番近いカーブ上に置かれました。
このオプションはカーブ自身がサイクリックな場合のみ非常に便利なのですが、他の場合でも使用可能です。有効にするには、単に Cyclic オプションを ON にして下さい。

また、依存グラフがこの Constraint を改良するために統合されました。そのため、カーブを編集した時、この Constraint のオーナーがリアルタイムで移動します。


Transform への CrazySpace(TM)補正


Follow-Path、Clamp-To、Child-Of などの Constraint で CrazySpace の問題に悩まされることなく Transform できるようになりました。CrazySpace に対する逆補正が、この問題を抱えているオブジェクトや Bone の Transform 時に適用されるようになりました。


Proxy の統合


Constraint が Proxy 保護されている Bone 内にあるときでも、Constraint をその Bone に「ローカル」として追加することができるようになりました。従来は Constraint を追加しても、ファイルの読み込み時に Proxy の同期が起こり、クリアされていました。

このような方法で追加された Constraint は、「ローカル」のタグが付けられ、ファイル内に入ります。これらは常に Constraint スタックの最後に追加され、Proxy-Constraint の上に移動することはできません。これは Proxy ファイルからの Constaint の変更時や、ファイル読み込み時の Constraint の順番の解決に問題が生じた時のような、混乱した状況を避けるためです。

UI で、Proxy 保護された Cosntraint をリネームや移動、削除ができなくなりました。これらのコントロールや名前は、ラベルやアイコン(ゴーストやロック)で描画され、それらがProxy(ゴースト)保護(ロック)されていることを示します。また、Constraint の設定を変更しようとすると、この Constraint は Proxy 保護されており、編集できないと、ポップアップに表示します。


上下ボタン


Constraint がもう上下移動できない場合、該当するボタンが隠れます。これはグレイアウト(これは現在の UI ツールキットでは不可能)する代わりで、ユーザによる行為を禁止するのに役立ちます。

以下のような状況で行われます。
[wiki]-Constraint がスタックの一番上にある
-Constraint がスタックの最下段にある
-Constraint が Proxy 保護された Constraint のすぐ下にある
[/wiki]

元記事:blender.org - Constraint Improvements
プリンタ用画面
友達に伝える
投票数:61 平均点:10.00
前
Blender2.46 スキニング
カテゴリートップ
Blender機能別
次
Blender2.46 MeshDeform モディファイア

ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki