--

--.--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告:  トラックバック(-)  コメント(-) 

    2009

04.27

Basic Animation Tutorial


シンプルなアニメーションを使ったオブジェクトの一例
本ガイドの目的は、MOD製作者が、あらかじめ組み立てた基本アニメーションファイルを用いてごく単純なアニメーションを見せるオブジェクトを作成できるようになることです。更にこれらのアニメーションファイルは、より複雑なアニメーション群を作成することを視野に入れてカスタマイズされています。本ガイドは特に、アニメーションを作成、エクスポートするための3Dアプリケーション(たとえば3D Studio Max[外部]など)に縁遠く、使用するだけの知識を持たないMOD製作者に向けて書かれたものです。
とはいえ、アニメーションに関する知識、NifSkope[外部]の使用方法に関する基本的な知識は必要となります。
本ガイドは完璧であることも100%正確であることも保証できませんので、本記事に誤りがあった場合は自由に追加あるいは修正して構いません。
目次
1 アニメーションの分析
1.1 Controller Managers
1.2 Controller Sequences
1.3 Animation Controllers
1.4 Animation Interpolators
2 ステップバイステップガイド
2.1 変形アニメーションの作成
2.2 可視・不可視アニメーションの作成
2.3 透明度アニメーションの作成
2.4 テクスチャ変化アニメーションの作成
2.5 アニメーションの調整
2.5.1 変形アニメーションの調整
2.5.2 可視・不可視アニメーションの調整
2.5.3 透明度アニメーションの調整
2.5.4 テクスチャ変化アニメーションの調整
3 最後に

アニメーションの分析


画像1:アニメーションブロックツリー
.nifファイルに埋め込まれたアニメーションシーケンスは独特のブロック構造で成り立っています(画像1参照)。
以下は一般的な要素についての簡単な解説を列挙したものです。

Controller Managers

基本的にController Sequencesへのリンクを保持しており、NifSkopeでSpell→Attach .KFを選択し.KFを適用すると自動的に作成されます。

画像2:面倒なController Sequence設定
メモController Sequences内に、空白のリンクは存在するべきではありません。さもないと、その.nifファイルをロードしようとした瞬間ゲームがクラッシュすることになります。

Controller Sequences

Controller Sequencesは実際のアニメーションを構成するもので、.KFファイルに含まれる唯一の中身です。これらはAnimation ControllerのTarget、その種別、場合によっては特定のパラメータを指定するString変数と同じように、InterpolatorControllerのリンク情報を保持するブロックを持ちます。Controller Sequencesの名前もまた、特定のアニメーションスクリプトコマンドの変数としての役割を持つため、無意味ではありません(たとえば、PlayGroup[外部]もそうです。)。PlayGroup[外部]の場合は、スクリプトコンパイラーが正しいと判断する、ある特殊なネームセットとして使用することができます(AnimGroups[外部]参照)。
メモController SequenceIdleと名付けるとオブジェクトは自動的にアニメーションを使用し、NiControllerSequenceブロク内のCycle Typeの値がCYCLE_LOOPに設定されていれば、スクリプトをトリガーとして他のアニメーションシーケンスに上書きされます。

Animation Controllers

Dataブロックが実際のキーフレームデータを内包するのと同じように、Animation Controllersは特定のinterpolator(書き換え)ブロックを持っています。
  • NiTransformControllers
    Transform Controllersは、NiTriShapesNiTristripesNiNodesに対する変形、回転、スケーリングを適用するために使用されます。つまり、あなたの作ったオブジェクトやその一部を動的に動かし、旋回させ、膨らませたり縮めたりすることができるということです。
  • NiTextureTransformControllers
    Transform Controllersに似ていますが、TargetにNiTexturingPropertyを持たなくてはいけません。対象となるメッシュのUVに作用することができます。言い換えるなら、テクスチャをスクロールしたり、スピン、ズームイン、ズームアウトすることができるということです。
    メモ:正常に動作させるにあたって、あなたが変化させようとしているテクスチャはnormal mapを持つべきではありません。
  • NiAlphaControllers
    Alpha Controllersはオブジェクトの不透明度を変化させるために使用されます。これらはNiMaterialPropertyブロックをTargetに指定しなくてはならず、たいていの場合メッシュノード(NiTriStripesかNiTriShape)は添付されたNiAlphaPropertyが必要になります。Alpha Controllersを使用することで、オブジェクトをスムーズにフェードイン、フェードアウトさせることができます。部分的な透明度も可能ですが、ゲームには描画距離によるオブジェクトやアイテムのフェード機能があるため、不幸にして不幸にして少々バギーに振る舞います。
    メモ:正常に動作させるにあたって、フェードさせるメッシュノード上のテクスチャはnormal mapを持っていなくてはいけません。
  • NiVisControllers
    Vis Controllersは、ノードの可視性を切り替えます。つまりオブジェクトやその一部を動的に可視、不可視と切り替えることができるということです。また、オブジェクト、アイテムのフェード問題を回避するためにNiAlphaControllersと同時に使用されます。

Animation Interpolators

特定の種類のControllerは、また特定の種類のInterpolatorを必要とします。Interpolatorは単一のキーフレーム値を保持するか、データブロックを指し示します。
  • Animation Data blocks
    特定のAnimation Controllerのキーフレーム情報を保持しています。言い換えれば、これらは特定のアニメーションタイミングにおけるある変数(たとえば、変形、回転、スケーリング、不透明度、可視不可視など)や、どのように中割りを書き換えるかを規定します。

ステップバイステップガイド

以下は、.nifファイル中のある単純なアニメーションをどのように作成し、必要があればどのように調整していくかの手順一覧です。

画像3:基本的なNIFの準備は、アニメーションファイルを適用する前にしなくてはいけません。
  1. こちら[外部]からサンプルパックをダウンロードします。
  2. NifSkopeであなたの.nifを開き、画像3に見えるような画面にしてください。
    メモ:適用可能な.kfファイルであるためには、お手本ファイルにあるような、Base NiNodeが存在しなくてはいけません。サンプルによっては、また別にBranchという名前のNiNodeを持つか、もしくは.nifファイルのメッシュノードをTargetにリネームする必要があります。 また、このBase NiNodeBSX Flags Extra Dataブロックを追加し、アニメーションが正確に機能するためにFlagsの値を特定の数値(サンプルでは「11」になっています)にする必要があります。
  3. どのサンプルアニメーションを適用するか決めて下さい。
    Transform Controller Visibility Controller Alpha Controller Texture Transform Controller
    メモ:適用は、NifSkopeのメニューからSpells→Animations→Attach .KFで行います。少なくともバージョン0.9.5[外部]が必要です。それ以外では、.kfファイルにルートノードが多すぎるという旨のエラーメッセージが表示されてしまいます。

変形アニメーションの作成

  1. anim_scale.kfを適用します。その中に二つあるAnimation SequenceはBranch NiNodeをTargetとしており、1.5秒かけてサイズが1.0から0.0に縮小します(この手法を用いたサンプルオブジェクトについては、サンプルパックに同梱されているexample_scale.nifを参照のこと)。
対象となるオブジェクトが(まったくもって)その通りに動作しなかった場合、Tweaking an animationを見て下さい。

画像4:NifSkopeでTargetを割り当てる

可視・不可視アニメーションの作成

  1. anim_visibility.kfを適用します。その中に二つあるAnimation SequenceはBranch NiNodeをTargetとしており、ほぼ瞬時にオブジェクトを消滅させます。(この手法を用いたサンプルオブジェクトについては、サンプルパックに同梱されているexample_visibility.nifを参照のこと)。
    メモ:.kfファイルを適用した後に保存しようとすると、NifSkope[外部]はエラーメッセージを表示します。
    これは.kfファイルに含まれるNiVisController内のTargetリンクが空白になっているためです。これはTargetを割り当てることで修正できます。ただ単に、NiVisControllerTarget項目にBranch NiNodeのノード番号を入力するだけです(画像4を参照)。
    もっとも、このエラーを修正しないとアニメーションは動作すらしませんが。
対象となるオブジェクトが(まったくもって)その通りに動作しなかった場合、Tweaking an animationを見て下さい。

透明度アニメーションの作成

  1. anim_alpha.kfを適用します。その中に二つあるAnimation SequenceはTargetメッシュノードのNiMaterialPropertyをTargetとしており、1.5秒かけてフェードイン、フェードアウトします(この手法を用いたサンプルオブジェクトについては、サンプルパックに同梱されているexample_alpha.nifを参照のこと)。
    メモNiVisControllerを追加するのは、ゲームのオブジェクト、アイテムフェード機能によってAlpha値が上書きされてしまうのを防ぐためです。
    また.kfファイルを適用した後に保存しようとすると、NifSkope[外部]はエラーメッセージを表示します。
    これは.kfファイルに含まれるNiAlphaControllerNiVisController内のTargetリンクが空白になっているためです。これはTargetを割り当てることで修正できます。ただ単に、NiAlphaControllerTarget項目にTargetメッシュのNiMaterialPropertyノード番号を、NiVisControllerTarget項目に、Branch NiNodeNiMaterialPropertyをそれぞれ入力するだけです(画像4と同様です)。
    また自動的に作成されるNiMultiTargetTransformControllerもTargetメッシュをTargetとしています(これもエラーメッセージの原因になります)。これは必要ないので、NiMultiTargetControllerブロックを削除してしまいましょう。
    これらの修正をしないと、アニメーションは動作しません。
対象となるオブジェクトが(まったくもって)その通りに動作しなかった場合、Tweaking an animationを見て下さい。

テクスチャ変化アニメーションの作成

  1. anim_textransf.kfを適用します。その中に二つあるAnimation SequenceはTargetメッシュノードのNiTexturingPropertyをTargetとしており、1.5秒かけてテクスチャが左右にスクロールします(この手法を用いたサンプルオブジェクトについては、サンプルパックに同梱されているexample_textransf.nifを参照のこと)。
    メモ:.kfファイルを適用した後に保存しようとすると、NifSkope[外部]はエラーメッセージを表示します。
    これは.kfファイルに含まれるNiTextureTransformController内のTargetリンクが空白になっているためです。これはTargetを割り当てることで修正できます。ただ単に、NiTextureTransformControllerTarget項目にTargetメッシュのNiTexturingPropertyノード番号を入力するだけです(画像4と同様です)。
    また自動的に作成されるNiMultiTargetControllerもTargetメッシュをTargetとしています(これもエラーメッセージの原因になります)。これは必要ないので、NiMultiTargetControllerブロックを削除してしまいましょう。これらの修正をしないと、アニメーションは動作しません。

    メモ:テクスチャアニメーションはnormal mapを持つテクスチャでは動作しません。normal mapのないテクスチャをゲーム内で表示させるため、対象となるNiTriStripsのMaterialProperty内でemissive colorをデフォルトの黒から白(ffffff)に変更して下さい。
対象となるオブジェクトが(まったくもって)その通りに動作しなかった場合、Tweaking an animationを見て下さい。

画像5:キーフレームの値を調整した後で全体のフレーム時間を更新する

アニメーションの調整

本ガイドで使われている.kfファイルは、ごく基本的な種類のアニメーションファイルです。
以下は、前述の適用したアニメーションを調整する手順を示したものです。
メモ:もしあなたがキーフレームのtime値をデフォルトの1.5秒以上に変更したい場合、必要に応じてNiControllerSequence内のStop Time値を編集しなくてはいけません。さもないと、ゲーム内ではこれらのキーフレームが無視されてしまいます。

変形アニメーションの調整

  • スケーリングを変更する
    • NiControllerSequence内のNiTransformDataを開きます(見つけられない場合は画像6を参照)。
    • Block Detailsリストの中からScalesの項目を探します。
    • 必要であればScalesNum Keysの数値を増やし、Keysの横についている矢印をクリックして配列を更新します。
    • アニメーションKeysTime値とValueの設定を好きなように編集します。
    • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。

      画像6:Ni[…]データブロックに関連する位置
      メモNum Keysを0にすると、スケーリングをこれっきりで取り除くことになります。
  • 変形を加える
    • NiControllerSequence内のNiTransformDataを開きます(見つけられない場合は画像6を参照)。
    • Block Detailsリストの中からTranslationsの項目を探します。
    • Num Keysの数値を少なくとも2以上に変更し、Keysの横についている矢印をクリックして配列を更新します。
    • Interpolationの値を1か2に変更します(それぞれ直線的二次関数的に変化します)。
    • アニメーションKeysTime値とValueの設定を好きなように編集します。
    • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。
  • 回転を加える
    • NiControllerSequence内のNiTransformDataを開きます(見つけられない場合は画像6を参照)。
    • Block DetailsリストでNum Rotation Keysの項目を探し、その値を少なくとも2以上に変更します。
    • Quaternion Keysを使用するならRotation Typeの値を1、2、3のどれかに、XYZ Rotationsを使用するなら4に変更し、それぞれの配列を更新します。
    • Quaternion Keysは他のノード内の回転値のように正確に動作します(たとえば、NiTriStrips、NiNodeなど)。
    • XYZ Rotationsを使用するのであれば、新たに3つのKey Data配列が見つかりますが、これはそれぞれが軸に対応しています(画像Eを参照)。
      メモXYZ Rotations内のアングルはラジアンで計算されます(つまり、π = 3.1416 = 180°)
    • Interpolationの値を1か2に変更します(それぞれ直線的二次関数的に変化します)。
    • アニメーションKeysTime値とValueの設定を好きなように編集します。
    • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。

可視・不可視アニメーションの調整

  • NiControllerSequence内にある、NiBoolInterpolatorの更に下位にあるNiBoolDataを開きます(画像6と同様です)。
    メモNiVisControllerキーフレームデータのinterpolationタイプはUNKNOWN_KEYでなくてはいけません。
  • 必要ならNum Keysの値を増やし、Keys配列を更新します。
  • アニメーションKeysTime値とValueの設定を好きなように編集します。
    メモ:Valueに入力できる値は1(=可視)か0(=不可視)のみです。
  • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。

透明度アニメーションの調整

  • NiControllerSequence内にある、NiFloatInterpolatorの更に下位にあるNiFloatDataを開きます(画像6[外部]と同様です)。
  • 必要ならNum Keysの値を増やし、Keys配列を更新します。
  • アニメーションKeysTime値とValueの設定を好きなように編集します。
  • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。
    メモ:メッシュノードのNiAlphaPropertyで設定を変更すると、なかなかに興味深い結果を生み出すことができます。自由に試してください。

画像7:V軸に沿ってテクスチャを変形させるInterpolatorブロックの見つけ方

テクスチャ変化アニメーションの調整

Texture Transform Controllersについては、5つの動きがあります。
  • U軸に沿ってテクスチャを動かす(左右)。
  • V軸に沿ってテクスチャを動かす(上下)。
  • テクスチャを回転させる。
  • U軸に沿ってテクスチャを拡大縮小する。
  • V軸に沿ってテクスチャを拡大縮小する。
サンプルのanim_textransf.kfファイルではこれらの作業が全て含まれますが、そのうちのキーフレームデータを持つ一つだけが視覚的な成果としてインパクトがあります。それぞれの動きがそれぞれにNiFloatDataブロックを備えたNiFloatInterpolatorを持っています。
  • NiControllerSequenceブロックを選択する。
  • Controlled Blocksの項目を展開し、さらにその下位の項目も展開する。
  • Variable Offset 1というラベルのBlocksを探すと、NiFloatInterpolatorが入力され、動きを決定するString Valueを見つけることができるはずです(画像7を参照)。
  • もし変更したい動きに関する情報を持つ正しいBlockを発見できたら、そのブロック内のInterpolatorリンクの矢印をダブルクリックします。すると、編集しなくてはいけないNiFloatDataブロックに移動することができます。これは大半のデータブロックも同様に出来ます。
    • 必要ならNum Keysの値を増やしてKeys配列を更新します。
    • アニメーションKeysTime値とValueの設定を好きなように編集します。
      メモ:UVの組み合わせは通常0~1の間の値を持ち、軸に沿った移動は、値を2にすることでテクスチャを二度スクロールさせることになります。 スケーリングの値を変更すると通常通り動作しますが、値が高くなるほど、テクスチャは小さくなります。この場合はエッジに沿って繰り返されます。
    • 必要であれば、他のNiControllerSequencesでも同じ手順を繰り返します。

最後に

本ガイドを何度も繰り返すことで、複数のColtrollersを単一のController Sequenceに統合する手順がわかるかもしれませんし、実例を作ることもできるかもしれません。
現在、TestingHallのテーブルの上にサンプルファイルを配置した.espが同梱されています(ゲーム内のコンソールで「coc testinghall」とタイプすれば行くことができます)。
原文:http://cs.elderscrolls.com/constwiki/index.php/Basic_Animation_Tutorial 09-04-27

Tutorials:  トラックバック(-)  コメント(-) 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。