バイクの車体の仕組み
このページではバイクのnifファイルの分割について解説します。
nifファイルの分割について

普通に1つのオブジェに見えるバイクですが、実は4つのパーツに分割されていて、CSでバイクのnifファイルとして4つ指定しています。
分割する理由は、オブジェクトアニメとしてそれぞれ別々に回転させるために必要だからです。
フレーム(親) | ステアリング周り | 前輪 | 後輪 |
---|---|---|---|
![]() | ![]() | ![]() | ![]() |
左右へのバンクと、ウィリー/ストッピーの上下の傾き | 左右へ切れるのみ | 左右へ切れ、さらに垂直方向へ回転する | 垂直方向へ回転するのみ |
色が付いていないのはテクスチャが貼られていないからだけなので気にしないで下さい。
まず親となるフレーム(NR500Frame.nif)があり、この親の位置や回転などは全て子に影響します。親が前に進めば他もついてきますし、左右へバンクすれば他も同様に傾くわけです。
子についてですが、まず原点の位置(見づらいですが、赤と緑の軸の交点)を見てください。前輪後輪は軸受部分、ステアリングはトップブリッジ下となっています。つまりフレームへの取り付け位置です。フレームの原点位置が変ですが、これには理由がありここでは触れません。
各nifが回転するときは原点を中心とします。なので各パーツは親から分割する必要があり、さらに原点を親との取り付け位置にする必要があります。
前輪をステアリングの子にして、左右の切れ角を引き継ぐという手もありましたが、メリットはそれだけだし何か不具合が出る可能性も考えられたのでしませんでした。
skeleton.nifの構造について
構造的には以下のようになっています。
Bip02 バイク全体と人全体 Bip01NonAccumB … Bip01PelvisB … Bip01SteeringB ステアリング周り Bip01FWheelB 前輪 Bip01RWheelB 後輪 Bip01SpineB フレームと人全体 ActorParent 人全体(以下は人の構造通り) Bip01 … Bip01NonAccum … Bip01Pelvis … Bip01Spine Bip01Thigh.L Bip01Thigh.R Bip01SideWeapon
※「…」は上と同じという意味です。
基本的には馬の「skeleton.nif」と似ていますが、バイク用に少し改造されています。この「skeleton.nif」は「名無しの人」さんがアップロードされたサンプルMODのものを少しいじってできています。


各nifの取り付け位置として、nifファイルの「NiStringExtraData」に「skeleton.nif」に存在するBone名を指定することで、その場所にくっつきます。
そのため、まず「skeleton.nif」の「Bip01PelvisB」の子供としてステアリング・前輪・後輪用の3つの新しいBoneを作り、「Translation」と「Rotation」を調整して取り付け位置に正しく位置させます。3つのnifファイルそれぞれの「NiStringExtraData」に自分のBoneを指定して、フレームはそれらの親にあたる「Bip01PelvisB」を指定します。
ここから下は完全に製作者用の話で面白くないです。
おまけ:nifの分割のやり方
まず全体が含まれるnifをBlenderにインポートして、該当するパーツだけを残して他を全て削除します。
次にそのパーツの原点位置をフレーム取り付け位置に合わすために移動します。ここでは車輪(前輪後輪)とステアリングの2つで使った方法を書いておきます。
車輪
車輪の場合は、原点の位置は車輪パーツ群をまとめて1つと見たときの(ほぼ)中心です。全てのパーツを選択して移動、目視で原点に合わすこともできますが、ここは他のやり方として座標を0に戻すやり方も書いておきます。
車輪ユニットの原点からの座標を確認するために一旦メッシュを結合します。全てのパーツを選択後、<Ctrl+J>で1つのメッシュとして結合することができます。その後、EditModeで結合したメッシュを全選択した際のプロパティを見てみると(なければ<N>で表示)、原点0からこのメッシュ(車輪ユニット)の中心点までの座標が表示されているのでこれをメモります。車輪の場合、車輪ユニットの中心が取り付け位置である軸受のほぼ中心となるので、この値がそのまま使えます。メモったらアンドゥで結合をキャンセルします。EditModeで見れる座標は1つのパーツしか確認できないため、一旦全体を結合したわけです。
その後、「1つのパーツをEditModeで全選択後、プロパティのXYZの座標を全てを0にして原点に戻す」という工程を全てのパーツで行い、全パーツを原点に戻します。車輪の場合、これでほぼ軸受の中心が原点位置となります(ほんのわずかにズレはありますが許容範囲内)。
あとはnifとしてExportすればOKです。BlenderからExportされたnifファイルはいくつかの情報が抜けているので、NifSkopeでオリジナルなどと比較して無い情報を「Copy/Paste Branch」で追加します。確か「BSXFlags」が無くなった記憶があります。
そして、「skeleton.nif」の該当のBoneの「Translation」に先ほどメモった値を入れてBoneの位置を変えます。数字の単位がBlenderはNifSkopeの10分の1なので、10倍した値を使って下さい。
ステアリング
ステアリングの原点の位置はステアリングユニットの中心ではありません。フレームとの取り付け位置、トップブリッジの下です。車輪でやった「メッシュを結合して座標をメモる」というやり方で出る座標は「原点からこのステアリングユニットの中心点までの座標」であるため、そのままでは使えずプラスαする必要があります。

最初に車輪と同様に、他のパーツを全て削除してステアリングだけ残し、メッシュを1つに結合してその時の座標をメモり、アンドゥで結合を戻します。
次にオブジェクトモードで全パーツ選択後、正しい位置(トップブリッジ下が原点に接す位置)に移動します。そこでもう一度メッシュを1つに結合した後にEditModeで全選択して座標をメモり、またアンドゥでキャンセルしてnifとしてExportです。
「skeleton.nif」の該当のBlenderの「Translation」には、最初にメモった座標と2回目にメモった座標を足した値を10倍して入れます。最初の座標は「原点からステアリングユニット中心までの座標」、2つ目の座標は「ステアリング中心から本来の原点であるトップブリッジ下までの座標」というわけです。
こうして設定すれば、ちゃんとステアリングはフレームとの取り付け位置を中心に左右に切れてくれます。
ちなみにステアリング周り(というよりフロントフォークという方がわかりやすい)はキャスター角だけ斜めになっていますが、分割されたnifとしては回転軸の関係上、フロントフォークがZ軸(縦軸)と平行になっていないといけません。
トップブリッジ下の取り付け位置とフロントフォークや前輪取り付け位置とはY軸方向に少しズレているので、ハンドルを切ると少し前輪の位置がズレます。
ところでNR750はキャスター角24度のはずなのに、このBlenderフリー素材出身のNR750は25度になってます。素材を作った人が正確な数値を知らなかったのかも。