「Nif Tips」の編集履歴(バックアップ)一覧に戻る

Nif Tips - (2016/08/07 (日) 12:51:28) のソース

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

#contents

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

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

*ノード番号の変更
Ctrl+矢印キー下か上

* ノードの追加
右クリック→Node→Attach Node

*特定の部位(ノード)につける
+BSFadeNodeを選択して&bold(){右クリック→Block→Insert→NiString&color(#cc0000){s}ExtraData}で追加する。
+Block Details内のtxtボタンを押して、&font(b,#134f5c){AttachT}と入力する。
+&bold(){Num Strings}を&bold(){1}にして、下のDataの更新ボタンを押す。
+Dataを&bold(){NamedNode&ノード名}にする。&br()たとえば、&bold(){NamedNode&NPC Head [Head]}だとこれを追加したnifは頭につく(xyz軸の基準点が頭になる)。

#image(AttachT.png)
Nodeごとに複数付ける場合は、BSFadeNodeのAttachTのDataを&bold(){MultiTechnique}とすると、NiNodeごとにAttachTの設定ができる。


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

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

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

詳しい説明は
[[Skyrim箱庭DIY 【Skyrim】NifskopeのNiAlphaPropertyによる透過設定の使い方>>http://skmod.hatenablog.com/entry/mesh/Nifskope5]]



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

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

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

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

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

**シーケンスの中身
***コントローラーとインターポレーター
&color(#134f5c){&bold(){NiControllerSequence}}下のツリーは以下の2つのタイプに分けられます。
&bold(){Controller(制御)}=何を制御するのかを指定
&bold(){Interpolator(補完)}=コントローラーで実際操作する数値と補完方法。要はパラメータ

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

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

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

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


**シーケンス全体の速度の調節
NiControllerSequenceにある&bold(){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がなくても勝手に補完してくれます。

**表示/非表示のアニメーションノード
&bold(){NiVisController}→表示非表示のコントロール
直前のノードのNiBoolInterpolator→NiBoolDataでタイミングの編集可能。
KeysのところにTimeとValueがあるのでそこで。Value 1が表示、0が非表示です。

**各コントローラーの解説
|&bold(){コントローラー名}|インターポレイター名||
|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年版>>http://s1925.blogspot.jp/2015/02/nif.html]]

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

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

**コリジョンメッシュの作成
最初にBlenderでコリジョンメッシュを作成。Box等で簡単なコリジョンメッシュ用のモデルを作ります。
#ref(img197.jpg)

完成したらLogicからコリジョンの指定。
#ref(img199.jpg)

Objectから詳細の設定。
#ref(img202.jpg)

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

#ref(img200.jpg)

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

#ref(img201.jpg)

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

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

#ref(img204.jpg)

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

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

#ref(Collision2.jpg)

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

&bold(){・うまくいかない時}
原因が全く不明ですが、Blenderで作ったコリジョンによってはChunk MergeでNif converted successfully.まで辿りつけずに、途中で止まってしまう場合があります。
正常に出力できるコリジョンのblenderとnifファイルを用意しました。ボックス状のものがコリジョンなのでそれを好きな形に変えて使ってください。
[[正常に出力できるコリジョン>http://cyclotron.moe.hm/up/skyrim/fileup/src/cysk0603.7z.html]]


*動くオブジェクトのコリジョン作成
皿や果物などの動くオブジェクトのコリジョンを自由に作ることは出来ないですが、上記のStaticオブジェクトでコリジョンを生成してから、動くオブジェクトに改変することはできます。
上記Staticオブジェクトのコリジョン作成を参考にChunkMergeでnifにコリジョン移植するまで進めます。&bold(){テンプレートは必ずイス(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()の設定をほとんどすべて移植します。
#ref(collision_nifsetting.png)

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

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

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

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


 
目安箱バナー