Nif Tips
おもにNIF Skopeを使った小技集です。


BSLightingShaderPropertyのデータ

Skyrimのマテリアル設定ノードであるBSLightingShaderPropertyについてのデータベースです。
自己発光やグロスの強さなど設定できます。

NifSkope 2.0のカメラ操作

カメラの平行移動 中クリックドラッグ
カメラのズーム 中クリックスクロール、右クリックドラッグ
カメラの回転 左クリックドラッグ、矢印キー、A,Dキー(左右のみ)

NifSkopeのツールチップ

Nameのところにマウスを乗せておくと、その項目が何を意味するのか表示されます。英語なのですがわかりやすいです。

ノード番号の変更

Ctrl+矢印キー下か上

ノードの追加

右クリック→Node→Attach Node

特定の部位(ノード)につける

  1. BSFadeNodeを選択して 右クリック→Block→Insert→NiString s ExtraData で追加する。
  2. Block Details内のtxtボタンを押して、 AttachT と入力する。
  3. Num Strings1 にして、下のDataの更新ボタンを押す。
  4. Dataを NamedNode&ノード名 にする。
    たとえば、 NamedNode&NPC Head [Head] だとこれを追加したnifは頭につく(xyz軸の基準点が頭になる)。

Nodeごとに複数付ける場合は、BSFadeNodeのAttachTのDataを MultiTechnique とすると、NiNodeごとにAttachTの設定ができる。


BSDismemberSkinInstanceからNiSkinInstanceに変換

たまにオブジェクト(口や目など)がNiSkinInstance場合があって、これをあわせないと表示されなかったり乱れたりします。
NifSkopeでBSDismemberSkinInstanceを選択→右クリック→Block→Convert→NiS...→NiSkinInstance

NiAlphaProperty

透過に関するノードです。
Flag値とThreshold値(=しきい値)で制御しています。

4844→スレッショルド値(テクスチャのアルファチャンネルの色)以上の部分を表示する。それ以外は非表示。ジャギが出て汚いが表示は安定する。
4109→半透明も扱えてきれいだがアルファ病(半透明同士で重なると)が発生する場合がある。
4333→同上。ただしブレンド方式が違くて、濃い(黒い)エフェクトなどで使う。


NifSkopeでのエフェクトアニメーション調整

本格的なエフェクトアニメーションの作成は難しいですが、NifSkopeで位置やサイズ、速度や色の調整ならできます。

基礎知識

アニメーション付きのnifファイルを開くとたいていは以下の四つがついてます。
これがアニメーションの設定項目です。

NiControllerManager がアニメーション設定の親玉です。
NiMultiTargetTransformController はここで登録したものを一括してトランスフォーム操作(移動・回転・拡縮)できます。最初にあるのはBSFadeNodeとNiNodeを指定するのが通例。
NiControllerSequence は各シーケンスの設定です。エフェクトアニメーションはたいていシーケンスという区切りで分かれています。
NiDefaultAVObjectPalette はアニメーションさせるオブジェクトの指定です。この一覧にないオブジェクトはアニメーションできません。

※この四つがないタイプもある。イベントで発動しなかったりシーケンスで区切ったりする必要のないもの。たき火など。(data\meshes\effects\fxfirewithemberslogs01.nif)

エフェクトの再生方法

BSBehaviorGraphExtraData Behaviour Graph File にBehaviorファイルを指定することで再生方法を変更できます。
再生方法 Behaviorファイル シーケンス名など解説
開始と終了のある持続 Magic\BeginLoopEnd.hkx mBegin , mLoop , mEnd の各開始、持続、終了のシーケンスを持つもの。例えば灯火の魔法エフェクトなど
自動再生 GenericBehaviors\Autoplay.hkx シーケンス名は AutoPlay 。または AutoLoop もつけれる。ドラゴンのブレスなど
ロード時再生 Magic\IdleOnLoad.hkx ロード時に再生される。

シーケンスの中身

コントローラーとインターポレーター

NiControllerSequence 下のツリーは以下の2つのタイプに分けられます。
Controller(制御) =何を制御するのかを指定
Interpolator(補完) =コントローラーで実際操作する数値と補完方法。要はパラメータ

これらは必ず二つでセットになります。
たとえば、爆発のエフェクトを作るとき、コントローラーで拡縮(スケール)を指定して、インターポレイターはその数値なので0.0秒は1.0倍→0.5秒は2.0倍みたいな指定をします。

どのノードが何のコントローラーとインターポレイターを割り当てられているかはツリーを見たただけでは分かりにくいです。
そこでNiControllerSequence→Block Detailにある Controlled Blocks は、どのNiNodeがどのControllerとInterpolatorが付いているかを確認できます。

NiTextKeyExtraData

NiTextKeyExtraData はシーケンスの再生時間を指定できます。
Text Keys→Text Keys→EndのTimeが再生時間です。
リロードしないと反映されないので一旦Saveしてリロード(Alt+X)します。

※エフェクトがEndの時間でも消えない場合
物によっては勝手に消えるんですが、エフェクトそのものの終了はNiTextKeyExtraDataで AnimEnd を指定しないといけません。


シーケンス全体の速度の調節

NiControllerSequenceにある Frequency は頻度というよりは周期なのでエフェクトの再生速度が変わります。
これもリロードしないと反映されないので一旦Saveしてリロード(Alt+X)します。
2.0にした場合、2倍速く再生されますが、アニメーションの総再生時間は変わりません。
これはStopTimeまでの時間を基準にした場合の周期です。

例えば1.3秒のアニメーションを倍速く半分の時間にしたい場合はFrequencyは2.0
NiTextKeyExtraData→Text Keys→Text Keys→EndのTimeの指定を0.65。
シーケンスのStopTimeはそのままです。

エフェクトの動きやタイミングの変更

Block Listのウィンドウ内のNiControllerManager→NiControllerSequenceのツリーを開く
BlockDetailsのウィンドウに移って編集したいオブジェクト名のControlled Blocks→Interpolatorの青矢印をクリック。
移動したツリー(NiTransformInterpolator)下のNiTransformDataを選択→Block DetailsのScalesが大きさ、Translationsが移動です。
Keys→Keysと開いてTimeが時間、Valueが大きさまたは座標軸です。
時系列順にKeysが並んでます。ここを変更してどのタイミングでどれだけ大きさ・移動を変更するか決めれます。
Timeが0.0秒の時にScalesのValueが1.0倍で、Time1.0秒で2.0倍なら、Time0.5秒は1.5倍になります。Keyがなくても勝手に補完してくれます。

表示/非表示のアニメーションノード

NiVisController →表示非表示のコントロール
直前のノードのNiBoolInterpolator→NiBoolDataでタイミングの編集可能。
KeysのところにTimeとValueがあるのでそこで。Value 1が表示、0が非表示です。

各コントローラーの解説

コントローラー名 インターポレイター名
BSEffectShaderPropertyFloatController NiFloatInterpolator Type of Controlled Variableで指定した項目を変更可能。例えばEmissive Multipleなら色の強さ。※
BSLightingShaderPropertyFloatController NiFloatInterpolator 上記のライティングシェーダー版。※
BSEffectShaderPropertyColorController NiPoint3Interpolator 上記と似ているがこれは色の変更で独立している。
NiMultiTargetTransformController NiTransformInterpolator Extra Targetsに指定したオブジェクト全般の移動・回転・拡縮。
NiVisController NiBoolInterpolator 表示・非表示のコントローラー


※NiControllerSequence→Block Detail→Controlled Blocks→Controlled BlocksにあるVariableをType of Controlled Variableの番号を指定する必要あり。※要検証
上から順に0から1,2,3…となる。エフェクトでのEmissive Multipleは0、ライティングの0はRefraction Strength。
Type of Controlled Variableを変更した場合はリロード(Alt+X)しないとプレビューには反映されません。


Staticオブジェクトのコリジョン作成

※ここに書かれているのは古い方法で、古いBlenderとMorrowind形式を使わなくてもできます。
Nifにコリジョンを追加する方法 2015年版

NifSkopeで生成できるコリジョンは自動生成なので、自由な形にすることはできません。ですが、いくつかのツールを併用して自由な形のコリジョンを作成する事ができます。
ここではすでに完成したNifファイルに、自由な形のコリジョンを追加する方法を解説します。
この方法ではStaticつまり建物やイス等の固定されたオブジェクトのコリジョンしかできません。
Staticオブジェクト以外のコリジョン作成はこの下の項目で解説します。
(Staticオブジェクト以外のテンプレート設定するとそのテンプレートのコリジョンが出力してしまいます。)

ツールの項目を参照に、ChunkMergeをダウンロードしてください。

コリジョンメッシュの作成

最初にBlenderでコリジョンメッシュを作成。Box等で簡単なコリジョンメッシュ用のモデルを作ります。

完成したらLogicからコリジョンの指定。

Objectから詳細の設定。

うまくコリジョンの設定ができていれば、Texturedモードでこのように表示されるはずです。


コリジョンとオブジェクトの両方を選択して Morrowind Nif でエクスポート。設定は下記の通り。


すでに完成しているNifファイルと区別するため、***Morro等の名前を付けておきます。

ChunkMergeによるコリジョンの差し替え。

ChunkMergeを起動。
  1. 最初にNif.xmlファイルを読み込みます。これはNifSkopeのフォルダにあるのでそれを指定。
  2. templateディレクトリの指定。自作Nifに近いSkyrimNifを選択。(StaticならStatic、ActiverならActiverのNif)
  3. TESV.exeを選択。


Nif-Fileは自作のNif(既存のコリジョン流用版)、Collision-Fileに先ほど出力したMorrowindのNif、Templateは自作したNifに一番近いファイルを指定。ChunkMergeはコリジョンメッシュのみをMorrowind Nifから移植するものなので、その他のコリジョンノードはSkyrimのものをそのまま利用します。ですので、Templateで指定するNifが重要になってきます。座れるイスのNifはmeshes/furniture下にあるので、今回はそれを指定しています。

Convertボタンを押してNif converted successfullyと表示されたら完成。
CKで配置し、F4キーでコリジョンの形を確認できます。


左が既存のコリジョン流用版、右が自作コリジョンです。
まだ開発途中のツールですので、エラーが起きる可能性もあります。バックアップをとりながら作業を進めていってください。

・うまくいかない時
原因が全く不明ですが、Blenderで作ったコリジョンによってはChunk MergeでNif converted successfully.まで辿りつけずに、途中で止まってしまう場合があります。
正常に出力できるコリジョンのblenderとnifファイルを用意しました。ボックス状のものがコリジョンなのでそれを好きな形に変えて使ってください。
正常に出力できるコリジョン


動くオブジェクトのコリジョン作成

皿や果物などの動くオブジェクトのコリジョンを自由に作ることは出来ないですが、上記のStaticオブジェクトでコリジョンを生成してから、動くオブジェクトに改変することはできます。
上記Staticオブジェクトのコリジョン作成を参考にChunkMergeでnifにコリジョン移植するまで進めます。 テンプレートは必ずイス(meshes\furniture\common\commonchair01.nif)等のStaticオブジェクトを指定してください。
※Staticオブジェクトではないテンプレートの場合はテンプレートのコリジョンを持ってきてしまいます。


形や材質の近いオブジェクトを探して用意します。(FO3 Archive等でSkyrim - Meshes.bsaから探す)
たとえばティーカップを作ったのなら、コップのnif(meshes\clutter\glazedcup01.nif)やジョッキ(meshes\clutter\dining set\basictankard01.nif)を元にします。

元にするnifのbhkRigidBodyの設定を動くオブジェクトにしたいnifのbhkRigidBodyT()の設定をほとんどすべて移植します。

合わせなくてもいいのは、Shape、TranslationとCenter(この2つは数値すべてを0にしないとコリジョンの位置がおかしくなる)です。
重要なのは Inertia(イネーシャ、慣性) でここの設定をしないと風に流れるかのごとく等速直線運動繰り出します。

Massは物理エンジン上の重さ。ゲーム内で動きが軽すぎると思ったらここはいじっても良いです。
Motion Systemが基本的な挙動の違いを決めてます。
固定オブジェクトは MO_SYS_BOX_STABILIZED 、動くのは MO_SYS_SPHERE_INERTIA がほとんどだと思います。

落としたり触ったりした時の音などのマテリアルの設定は bhkCompressedMeshShapeData→Chunk Materials→Chunk Materials→Skyrim Material です。
bhkMoppBvTreeShapeもおそらく設定する必要があります。

例えばSKY_HAV_MAT_SOLID_METALを設定すると金属音(金属皿やゴブレットなどはこの設定)になります。

NifSkope 2.0でのメッシュの頂点位置編集

本格的に造形するには全く向いてませんが、ちょっとした修正には便利です。

  • Nifskope 2.0 Dev6をダウンロードします。
  • 画像の赤枠アイコンのSelect Vertexを押す。
  • 緑色の編集したい頂点を左クリックする。
    頂点を選択しても 見た目が変化しない ので注意。
    どこの頂点を選択したか確認するには、画像の赤枠Select Objectモードに戻すと選択した頂点が青くなってます。

  • Block Details内のVerticesで選択した頂点の数値がハイライトされているので、そこのXYZの数値を変更します。