法線コンストレイントを使用すると、オブジェクトの方向を NURBS サーフェスまたはポリゴン サーフェス(メッシュ)の法線ベクトルに一致させることができます。法線コンストレイントは、特殊で複雑なシェイプのサーフェス上でオブジェクトを移動させるときに便利です。法線コンストレイントを使用しなければ、こうしたサーフェス上でオブジェクトを移動したりアニメートしたりすることは、退屈で面倒な作業になってしまいます。たとえば、キャラクタのフェースに沿って流れ落ちる涙を作成したいとします。このような場合は涙を直接アニメートする代わりに、涙をフェースのサーフェスにコンストレイントすることができます。
詳細については、法線コンストレイントを作成するとコンストレイント > 法線(Constrain > Normal)を参照してください。
一般に、法線コンストレイントはジオメトリ コンストレイントと一緒に使用します。ジオメトリ コンストレイントの詳細については、ジオメトリ コンストレイントを参照してください。
法線コンストレイントのコンストレイント対象オブジェクトの方向
コンストレイント対象オブジェクトの方向は、エイム ベクトル、アップ ベクトル、およびワールド アップ ベクトルの 3 つのベクトルによって制御されます。ベクトルのワークスペースには表示されませんが、それらがコンストレイント対象オブジェクトの方向に与える影響を推定することができます。
コンストレイントを効果的に使用するために、これらのベクトルがどのように機能するのかを理解する必要はありません。初めてコンストレイントについて学ぶのであれば、このセクションの以降の部分は省略しても構いません。しかし、法線コンストレイントの高度な調整を行いたい場合は、これらのベクトルを使用しなければなりません。また、これらのベクトルについての知識があれば、コンストレイント対象オブジェクトがなぜ突発的に回転することがあるのかを理解する助けになります。
これらのコンストレイントは、エイム ベクトルが指定した方向を示すようにオブジェクトを回転します。次に、アップ ベクトルができるだけ近くでワールド アップ ベクトルを示すようにエイム ベクトルを軸にオブジェクトをツイストします。
エイム ベクトルとアップ ベクトルが同じ方向を示していると、この 2 つ目の回転は実行できません。エイム ベクトルを軸にオブジェクトを回転する方法がどうであれ、アップ ベクトルがこれ以上ワールド アップ ベクトルに近づくことはありません。
反転のまったくない状態でコンストレイント対象オブジェクトを任意の方向に向けることができるため、このエフェクトは便利です。エイム ベクトルをオブジェクトの方向に向け、そこで停止させるために必要な回転が最小限行われます。ただし、回転は現行位置を起点として行われるため、毎回同じフレーム シーケンスをチェックしないと、同じ結果は得られません。レンダリングがめちゃくちゃになる可能性があるため、この状況は避けたほうが賢明です。
エイム ベクトルを使用すると、コンストレイント対象オブジェクトがターゲット ベクトルの方向を常に向くようになります。エイム ベクトルはコンストレイント対象オブジェクトのピボット ポイントから始まり、ターゲット ベクトルの方向に一致します。
オブジェクトがどのように回転してターゲット ベクトルの方向に一致するかは、エイム ベクトルがオブジェクトのローカル空間を基準にしてどのように定義されているかによって決まります。たとえば、既定では、エイム ベクトルはローカルな正の X 軸と同じ方向を向くように定義されています。したがって、既定では、コンストレイント対象オブジェクトのローカルな正の X 軸はターゲット ベクトルの方向に一致することになります。
オブジェクトがどのように回転するかはエイム ベクトルによって制御されているわけではないので、エイム ベクトル自体は、オブジェクトを完全にコンストレイントすることはありません。エイム ベクトルに沿って回転しているオブジェクトの方向はアップ ベクトルとワールド アップ ベクトルによって制御されます。
アップ ベクトルは、エイム ベクトルに沿って回転しているコンストレイント対象オブジェクトの方向を制御します。エイム ベクトルと同様に、アップ ベクトルもコンストレイント対象オブジェクトのローカル空間を基準にして定義されます。既定では、アップ ベクトルはシーンのワールド空間を基準にして定義されるワールド アップ ベクトルと同じ方向を向きます。アップ ベクトルは、それ自身をできるだけワールド アップ ベクトルの方向に一致させることによって、コンストレイント対象オブジェクトをエイム ベクトルの周囲で方向付けます。
ターゲット オブジェクトを移動すると、コンストレイント対象オブジェクトのエイム ベクトルがターゲット ベクトルと同じ方向に向くようになり、それによってコンストレイント対象オブジェクトが方向付けられます。それと同時に、コンストレイント対象オブジェクトはアップ ベクトルに従ってエイム ベクトルに沿うように方向付けられます。
たとえば、既定では、アップ ベクトルはローカルな正の Y 軸と同じ方向を向くように定義されています。コンストレイント対象オブジェクトのローカルな正の X 軸は、既定のエイム ベクトルによってターゲット ベクトルと同じ方向を向きます。同時に、オブジェクトのローカルな正の Y 軸は、オブジェクトのアップ ベクトルによってワールド アップ ベクトルと同じ方向を向きます。エイム ベクトルとアップ ベクトルは、コンストレイント対象オブジェクトの方向をコンストレイントするために共同で機能します。
既定では、アップ ベクトルはワールド アップ ベクトルの方向にできるだけ一致し続けようとします。しかし、ワールド アップ ベクトルの機能はさまざまな方法で制御することもできます。たとえば、ワールド アップ ベクトルをワークスペースのワールド空間を基準にして定義する(既定値)代わりに、他の何らかのオブジェクトのローカル空間を基準にして定義することもできます。このようなオブジェクトをワールド アップ オブジェクトと呼びます。
特定の状況において、コンストレイント対象オブジェクトがそのエイム ベクトルに沿って急回転することがあります。なぜこのようなことが起こるのかを理解するためには、エイム ベクトル、アップ ベクトル、およびワールド アップ ベクトルがどのように機能するのかを理解する必要があります。コンストレイントについて初めて学ぶのであれば、このセクションを省略しても構いません。詳細については、この前の項のエイム コンストレイントのコンストレイント対象オブジェクトの方向を参照してください。
エイム ベクトルの向きがアップ ベクトルと同一または反対の方向に近付くにつれて、コンストレイント対象オブジェクトはより急速にエイム ベクトルに沿って回転します。エイム ベクトルが完全に同一または正反対の方向に向くと、コンストレイント対象オブジェクトは突然エイム ベクトルに沿って 180° 回転することがあります。
このような急速な回転によって、望ましくないローリング現象が発生します。ローリング現象は、ワールド アップ ベクトルを移動またはアニメートすることによって防ぐことができます。詳細については、エイム コンストレイントのモーション ヒストリ依存現象を制御するを参照してください。
モーション ヒストリ依存現象とは、同じオブジェクトでも、以前にアニメート、または操作された履歴を持つか持たないかによってモーション エフェクトに違いが生じることをいいます。
たとえば、オブジェクトを繰り返しアニメートした場合、繰り返すごとにオブジェクトが同一フレームで微妙に異なる動きをする結果になったとしたら、そのオブジェクトはモーション ヒストリ依存現象です。あるフレームにおいて、オブジェクトは前回つけられた方向によって異なる方向を向いているかもしれません。反対に、繰り返すごとにオブジェクトがまったく同じように動いたとしたら、そのオブジェクトはモーション ヒストリ非依存現象です。
予想通りのモーション エフェクトが必要な場合は、モーション ヒストリ依存現象が問題となります。しかし、予想できないようなモーション エフェクトが欲しい場合には、オブジェクトのモーション ヒストリ依存現象を利用することもできます。
特定の状況において、コンストレイント対象オブジェクトの方向がモーション ヒストリ依存現象を起こすことがあります。なぜこのようなことが起こるのかを理解するには、エイム ベクトルおよびアップ ベクトルについての知識が必要です(エイム コンストレイントのコンストレイント対象オブジェクトの方向を参照)。
エイム ベクトルとアップ ベクトルが同じ方向を向くように定義した場合は、コンストレイント対象オブジェクトがモーション ヒストリ依存現象を起こすことがあります。たとえば、エイム ベクトルをコンストレイント対象オブジェクトのローカルな Y 軸を基準にして定義したにもかかわらずオブジェクトのローカルな Y 軸を基準にしているアップ ベクトルの既定の方向を変更しないと、このようなことが起こります。詳細については、エイム コンストレイントのモーション ヒストリ依存現象を制御するを参照してください。
コンストレイント対象オブジェクトは、コンストレイントのワールド アップ タイプ(World Up Type)アトリビュートをなし(None)に設定してもモーション ヒストリ依存現象を起こすことがあります。詳細については、ポイント コンストレイント アトリビュートを編集するを参照してください。