--

--.--

スポンサーサイト

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

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

    2009

03.24

Making Ridable Creatures

本チュートリアルは新たな騎乗可能クリーチャーを作成する手順を説明します。今回はmountainlionを騎乗できるクリーチャーにしていきますが、他の大部分のクリーチャーにも適用できます。
Note:本チュートリアルは上級者向けです。BSA unpacker、バイナリエディタ、NifSkopeなどの使い方を理解している必要があります。自作じゃなくてもいい方にはこちら[外部]もあるので、どうぞ。
目次
1 とにかく動作させる
1.1 Step1: クリーチャーを選ぶ
1.1.1 本ステップで必要なもの
1.1.2 すること
1.2 Step2: Skeletonの準備
1.2.1 本ステップで必要なもの
1.2.2 Bip02化
1.2.3 Hourse Nodeのコピー
1.3 Step3: 乗る/降りる Part1
1.3.1 本ステップで必要なもの
1.3.2 モーションを入手する
1.3.3 クリーチャーのセッティング
2 見栄えをよくする
2.1 乗り降りモーションを修正する
2.1.1 本ステップで必要なもの
2.1.2 すること
2.2 正常な騎乗モーションの追加
2.2.1 本ステップで必要なもの
2.2.2 すること
2.3 正常な「乗馬」AIの追加
2.3.1 本ステップで必要なもの
2.3.2 すること
2.4 ネコのサイズを変える(大きくする)
2.4.1 本ステップで必要なもの
2.4.2 すること
2.5 ぐわんぐわんな上下運動を減らす
2.5.1 本ステップで必要なもの
2.5.2 すること

とにかく動作させる

クリーチャーを選ぶ

本ステップで必要なもの

  • Oblivion
  • BSA unpacker
  • クリーチャーのメッシュ、モーションファイル

すること

バニラのメッシュファイルを抽出していない場合、まずはそれをしてください。使い方はBSA unpacker Tutorial[外部]を参照のこと。
まずはどのクリーチャーを使うか決めましょう。今回はネコを使います。メッシュを抽出したらMeshes\Creatures\mountainlionを開きます。
次に、mountainlionディレクトリを中身まるごとDataディレクトリにコピーします。あらかじめディレクトリ名のリネームもしておきましょう。本チュートリアルではlionRideとします。リネームし終えたら、Oblivion\Data\Meshes\Creatures\lionRideの構造になるようにします。

Skeletonの準備

本ステップで必要なもの

  • lionRideディレクトリ(さっき作ったもの)
  • hourseのSkeleton.nif
  • CS
  • NifSkope
  • バイナリエディタ XV132[外部]は無料でダウンロードも小さいです。

Bip02化

CSを開いている方は、既存のmountainlionを開き、クリーチャータイプをhourseに変えてみて下さい。unreferenced nodesがどうのこうのというエラーメッセージがボコボコ出てくると思います。原因はモーションです。OblivionにおけるhourseはNPCや他の動物と異なるSkeletonを使っており、クリーチャータイプがhourseになると、Oblivionがその異なるSkeletonを要求してくるためです。
しかし安心して下さい。Skeletonに違いはあれど、その違いも、通常のクリーチャーがBip01 bone nameというボーン名なのに対し、hourseはBip02 bone nameというボーン名を使うという点だけです。数字一つ違うだけなのです。バイナリエディタを使ってhourse用Skeletonに改造するのも難しいことではありません。
そこで、lionRideディレクトリのnif、kfをバイナリエディタで開き、以下の作業を全ファイルに行ってください。(Note:Visual Studioユーザへ。Visual Studioではテキストの検索、置換が出来ないようです。)バイナリエディタで「Bip01」というString(文字列)を検索し、「Bip02」に置換してください。一気に全置換した方がいいでしょう。ファイル一つにつき40~50箇所あるはずです。

Hourse Nodeのコピー

mountainlionのSkeletonはおおむね準備ができました。このSkeletonにNodeを三つ追加する必要があります。まず、その目的を述べておきます。騎乗可能クリーチャーは特殊なActorParent、EntryPointというノードを持ちます。
EntryPointはそのクリーチャーに騎乗する時、プレイヤーがどこから乗るかを規定します(通常は左側ですね)。これはまたクリーチャーから降りる際にも必要になります。
ActorParentはそのクリーチャーに騎乗している時、プレイヤーがどこに乗っているかを規定します。これを別ボーンの子にすることで、プレイヤーがクリーチャーのどこに騎乗するか規定します(例:Spine2の子にすると、プレイヤーはクリーチャーの背中にへばりつくことになります)。しかし、これにも興味深い問題があります。ボーンの位置、倍率、回転はクリーチャーのSkeletonで決定されていますが、これらはモーションによって変更、上書きされてしまうものでもあります。プレイヤーが騎乗する位置を微調整するActorParentの位置、倍率、回転もまた確実に変更することはできないわけです。何かの動作をさせることで値が上書きされてしまうわけですから。そこで三つめのノードの登場です。
三つめのノードはモーションにもモデルにも関連づけられていない、新しくて風変わりなノードです。このノードがSkeletonの中で果たす役割は、位置、倍率、回転を持つこと、そしてActorParentを子として持つことです。これが持つ変形情報を完全無欠の状態でActorParentに渡すことができ、プレイヤーもクリーチャーに騎乗できるようになります!
では、ノードを追加していきましょう。lionRideディレクトリにあるSkeleton.nifをNifSkopeで開いて下さい。まずは中身のない空っぽのノードを挿入します。Block Listで右クリックし、Block→Insertをクリックします。挿入したいノードの種類はNiNodeなので、NiN...のセクションからNiNodeを選びます。挿入したらツリー構造の一番下に移動させます(ノードを左クリックし、Ctrl+↓を押し続ければいいです)。値を何かユニークな(他と被らない)名称にしましょう。今回は「xform」として話を進めます。ここでは他に何も変更する所はありません。Skeleton.nifを上書き保存して下さい。
さて、Meshes\Creatures\Hourseディレクトリを開き、そこにあるSkeleton.nifをNifSkopeで開いて下さい。
NifSkopeでActorParentという名前のノードを探し(たぶんノード番号は195です)、右クリックしてBlock→Copy Branchでコピーします。そのままさきほどのlionRideディレクトリにあるSkeleton.nifをもう一度開きます。
lionRideのSkeleton.nifに戻ったら、Block Listで右クリックし、Block→Paste Branchします。これでActorParentが必要なデータを保持したまま、lionRideのSkeleton.nifにコピーされました。次にリンクを繋がなくてはいけません。xformのBlock DetailsでNum Childrenをダブルクリックし、数値を1増やします。リストをリフレッシュし、新たに出来た、子を繋ぐためのリンクポイントにActorParentノードの数値を書き込みます(おそらくこの数値は266になっているはずです)。
あなたがプレイヤーに騎乗して欲しいボーンをSkeletonから選びましょう。今回はBip02 Spine2です。件のノードに移動し(ノード番号36)、新たな子ノードリンクを作成してxformを指定して保存しましょう。
最後のステップも似たようなものです。HourseのSkeletonに戻り、EntryPointノード(おそらくノード番号は291)をコピーし、lionRideのSkeletonにPaste Branchします。このノードはScene Rootの子にします。現時点でSkeletonが使えるようになっています!

乗る/降りる Part1

本ステップで必要なもの

  • さっき作ったlionRideディレクトリ
  • hourseの乗馬、下馬モーション
  • CS

モーションを入手する

さて、ここまでで改造してきたクリーチャーに乗馬、下馬モーションを追加する必要があります。Meshes\Creatures\Hourse\idleanimsディレクトリへ移動し、hoursemount.kf及びhoursedismount.kfをMeshes\Creatures\lionRide\idleanimsディレクトリにコピペします。それぞれcatmount.kf、catdismount.kfにリネームしておきます。

クリーチャーのセッティング

CSを起動し、Oblivion.esmを開きます。オブジェクトウィンドウにあるCreatureから既存のmountain lion(CreatureMountainLion)を探しましょう。このIDのクリーチャーを複製します(筆者は新IDをRidableMountainLionにしました)。クリーチャーの名前をRiding Lionとかそんな感じに変えます。
他にする必要のある変更は、クリーチャータイプをCreatureからHourseに変えること、Skeleton.nifを、先程改造していたlionRide\Skeleton.nifに変更することです。誰かを攻撃してしまわないよう、AIウィンドウのAgressivenessを下げます。FactionからCreature Factionを削除します。この時点でどこかに配置してみましょう。筆者はいつも、Market Districtのどこかに配置することにしています。Note:この時点ではエラーメッセージは何も出ないはずです。もし出たら、なにかミスをしているはずです。
クリーチャーを配置したら、espとして保存し、再度読み込んでみましょう。クリーチャーのidleモーションを改変する必要があるためです(保存→再読み込みしないとidleモーションが上手く表示されないみたいです)。
CSで再読み込みしたら、メニューからGamePlay→idle animationsを開きます。ウィンドウの左側からあなたが作ったクリーチャーに対応するディレクトリを探して下さい。(lionRideディレクトリがあるはずです。)ここで乗馬、下馬に相当するidleモーションを追加していきます。lionRideエントリの上で右クリックし、Insert Childをクリックします。挿入された子のIDはlionMountDismountとし、Must return a fileにチェックを入れ、条件の項目に「Getsitting > 0」という条件を追加します。
次に、lionMountDismountに子を二つ作成し、片方をlionMount、もう一方をlionDismountというIDにします。lionMountにはcatMount.kfを指定し、lionDismountにはxatDismount.kfを指定しましょう。lionMountの条件項目には「Getsitting == 12」を、lionDismountには「Getsitting == 14」を記入します。
これらを終えた時点でespをセーブし、Oblivionで読み込んで、試してみましょう!
…で、おそらく騎乗中のlionの見た目はありえないことになっていて、プレイヤーもありえないことになっているはずです。でもご安心を!次のセクションではこれをなんとかしていきますから。

見栄えをよくする

ここからは、さきほど作った騎乗可能クリーチャーにちゃんと乗ることができるよう、クリーチャーをブラッシュアップしていく発展編に入ります。

乗り降りモーションを修正する

本ステップで必要なもの

すること

乗り降りモーションの修正は実はとても簡単です。必要なのはプレイヤーがhourseの上に移動する動きです。ですから、プレイヤーモーションが適切な位置にあるhourseの参照関係を取り出すことができれば、騎乗できるネコに最適なモーションを手に入れることができるはずです! まずはじめに、Oblivion Mount Project Animation Warperをダウンロードして下さい。乗り降りモーションからhourseの部分を取り出すことができるようになります。
OMPAWをダウンロードし解凍すると、master、merge、outputというサブディレクトリを含むディレクトリが作成されるはずです。hoursemount.kfとhoursedismount.kfをmasterディレクトリに移動させ、kfmerge.exeを実行して下さい。
モーションファイルからhourseの動きを取り出したいので、最初に表示されるMain Menuで「2」をタイプし、モーションをフィルタリングします。既にわかっているhourseのボーン参照は必要ないので、次に表示されるCustom Bone Filterで「E」をタイプし、除外します。また、hourseが「Bip02 ****」や「hourse」のつくボーンを持つSkeletonを使っていることもわかっています。ですから、次のメニューで「P」をタイプし、タイピングの手間を減らします。
Bip02、bip02、Hourse、hourseという文字列を含むボーンをフィルタリングしたいので、次の入力でこれらを一つずつ入力し、最後に「F」をタイプします。
最後にプログラムからファイル名かディレクトリを尋ねられます。hourseのモーションはmasterディレクトリにあるので「master」と入力すると、masterディレクトリにある全てのファイルに対してフィルタリングが実行されます。さて、outputディレクトリに移動し、hoursemount.kfとhoursedismount.kfをlionRide\idleanimsディレクトリに移動させます。今まであったcatMount.kfとcatDismount.kfは削除してください。それから移動させてきた新しいモーションファイルをリネームし、さっき削除したファイルのファイル名にします。
ゲーム内で新しいモーションの動作を確認して下さい。もはやネコがおかしな具合に伸びたりすることはないはずです!
kfmerge.exeで入力することになるコマンドは以下の通りです。
2
E
P
Bip02
bip02
Hourse
hourse
f
master

正常な騎乗モーションの追加

本ステップで必要なもの

すること

ここからは趣味の領域です。このステップをこなせば、hourseのように見えhourseのように乗れるクリーチャーが手に入ります! まず、kfmerge.exeのあるディレクトリに移動し、master、merge、outputディレクトリを空にします。
最初にベースとなるlionRideディレクトリの全モーションファイルをmasterディレクトリにコピーします。次に、hourseディレクトリからも全てのモーションファイルをmergeディレクトリにコピーします。この時点でマージの準備はだいたい終わっています。まず、hourseとlionが同じファイル名を使っているか確認する必要があります(ないでしょうけど)。
hourseはlionよりモーションが沢山あることがおわかりかと思います。lionにないモーションは、気にしないで下さい。mergeディレクトリにあるhourseモーションのうち、lionと同じ役割だろうなと思えるモーションファイルをlionディレクトリのモーションと同じファイル名にリネームしていきましょう。たとえば、lionのrunfoward.kfとhourseのfastfoward.kfです。この場合hourseのfastfoward.kfをrunfoward.kfにリネームします。全てのファイルを対応させる必要はなく、idle、walking、running、turningで十分です。その後、hourseのidle.kfをdefault.kfというファイル名で複製します(プレイヤーが一致しないモーションを要求した際のデフォルトの乗り手位置として振舞います)。
さて、kfmerge.exeを実行しましょう! 初めのMain Menuで「1」をタイプし、「Merge Animation」を実行します。次のMerge Filter Menuで既存のhourseモーションをフィルタリングするため「2」をタイプし「Hourse」を選択、次のMerge Time Scale Menuでは「1」をタイプし「Use source timing」を選択します。最後のMerge Convert Mode Menuでは「2」、Batch Mergeを実行します。すると、マージ処理されたlionとhourseのモーションがoutputディレクトリに出力されるはずです。
kfmerge.exeで入力することになるコマンドは以下の通りです。
1
2
1
2

正常な「乗馬」AIの追加

本ステップで必要なもの

  • CS
  • 作成した騎乗可能なクリーチャー

すること

このステップはチョー簡単です! やったね! CSを起動し、自作した騎乗クリーチャーのespを開いて下さい。
クリーチャーのedit windowを開きます。まず全てのFactionを削除し、誰かに攻撃されないようにします。次に、クリーチャーのAIボタンを押し、クリーチャーのAgressionを下げ(筆者はいつも0にしています)、全てのAIパッケージを削除して以下のAIパッケージを追加します。
  • aaaDefaultStayAtCurrentLocation
  • HorsePCStay
  • HorsePCStandStill
  • HorsePCGoHome
これで、ファストトラベルなどの際にも既存のhourseと同じように振舞います。

ネコのサイズを変える(大きくする)

本ステップで必要なもの

  • CS
  • NifSkope

すること

CSを起動し、espを読み込みます。lionのedit windowを開き、statタブでBase Scaleを1.75に設定して動作確認してみて下さい。
おお! lionがでっかくなりますね! ですが乗るとギャフン! あなたまで巨大になります! さあ、Oblivionを終了してlionのSkeleton.nifをNifSkopeで開きましょう。今こそ上の方で追加したxformノードが活躍する時です。このノードのBlock Detailsを見てみましょう。
当面の問題は、騎乗した時にlionのスケーリングがプレイヤーにまで渡されて影響を及ぼしてしまうことです。1.75倍くらいに成長します。ですが反撃の余地はあるのです。プレイヤーは、xformノードに加えられた変形情報もまた受け取ることができるのです。そこで、xformノードに1/1.75、つまり0.5714倍のスケーリング情報を与えてやれば、プレイヤーはほぼ元通りのサイズになるのです! xformノードのscaleプロパティを開き、0.5714と入力しましょう。Skeleton.nifを保存し、ゲームを起動してチェックしてみましょう。やった! lionは大きくなりますがプレイヤーは正しい大きさのままです!

ぐわんぐわんな上下運動を減らす

本ステップで必要なもの

  • NifSkope

すること

おそらくゲーム内でlionに乗ると、プレイヤーの位置がちょっとおかしく、騎乗中はやばいくらい揺れていることに気づくでしょう。これはxformノードがSpine2の子ノードになっているためで、そのせいでやたらと揺れるのです。解決法としては、xformノードをすぐ近くのノードに移動させるという手があります。そうすればプレイヤーは正しく座り、シェオゴラス的動きではなくなります。
NifSkopeに移りましょう。xformノードのBlock Detailsをもう一度開いて下さい。Spine2ではなく、Spine1の子ノードに変えます。それから、translationにそれぞれx:8、y:-4、z:0を加えます。(この値は適当です。)Skeleton.nifを保存して動作チェックしましょう。やりました! おめでとうございます!
原文:http://cs.elderscrolls.com/constwiki/index.php/Making_Ridable_Creatures 09-03-24

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

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