旧Blender導入
nif pluginの開発が進んでいてblender2.7x系でも使えるアドオン化され、更にスカイリムの対応が進んでます。
nif plugin最新版はまだまだ開発途上ですが、以下のページに使い方をまとめています。




※これより下にかかれているのは旧来のやり方です。

このページではBlenderの導入方法を解説します。
モデリングがしやすい最新の2.7xと入出力用に2.49bを2つ揃えることにします。
スカイリムで使うプラグインの多くが2.49bまでしか対応していないので、旧バージョンの2.49bはほぼ必須です。




Blender 2.49bの導入方法

インストールは順番が大事です。

  • Blender 2.49bからblender-2.49b-windows.exeバージョンをダウンロード。
    Blenderはインストーラー形式でないとうまくPyFFIが認識できない時があります。
    インストーラーは以下の設定の時にUse the installation directoryを選びます。
    (Use the Application directoryだとC:\Users\ユーザー名\AppData\Roaming\Blender Foundation\Blender\.blenderにスクリプト等が配置され、
    上記の場合はC:\Program Files (x86)\Blender Foundation\Blender\.blenderに置かれます)



  • Python 2.6.6 (32-bit)をダウンロードしてインストール。特に変更なしでそのままインストールします。

  • PyFFI 2.1.11 からPyFFI-2.1.11.cefd181.win32.exeダウンロードしてインストール。
    PyFFIのインストーラーの時点で下記のようにBlenderとPythonが認識されている必要があります。
    nifのimportがうまくいかない場合はたいていここでのミスです。




Blender 2.7xの導入方法

  1. Blender 2.7xZip形式のほう をダウンロードします。最新版は更新があった時に乗り換えが簡単なのでZip形式にします。
  2. 適当なフォルダに解凍します。あとはblender.exeを起動すれば使えます。



ImportとExport時に必要なもの


Nif Import

SkyrimのNifをそのまま読めるSkyrim .NIF importerを使えば特に作業(BlenderでFile→Import→Skyrim NIF)は要らないですが、
わりと読めないファイルが多く、重複した頂点があると面が欠けていたりしますのでちゃんとインポートできたか必ず確認して下さい。

Nif Scriptsのほうのnif importerは読み込む前に作業が必要です。その代わり細かく設定できるのでアニメーションやスケルトンを読むのにも使えますから是非覚えましょう。

Nifskopeでの作業

(例として巨人を読み込みます。FO3Archivesでdata\meshes\actors\giant\character assets\giant.nifを展開しておきます。)
Nifskopeでインポートしたいnifを開きます。
Block DetailsのところにNiHeaderがあります。それをクリックしてツリーを展開します。
※つまずきやすいポイント
Block Detailsが出てない→F3押す。
NiHeaderがない→最初にBlock Listsの何かの項目押すと出てこなくなります。
メニューバーからView→Reset Block Detailsをクリックでまた出てきます。
NifSkopeで開いたのに何も項目が出てこない→日本語の名前のフォルダやファイルには対応してないです。場所変えたりリネームしましょう。

バージョンをBlenderで読み込めるように書き換えます。数値をダブルクリックで編集できます。
User Version 12→11
User Version 2 83→34

書き終えたらCtrl+Sで一旦名前をつけて保存します。元とは違う名前にしましょう。(例Giant_11.nif)
もう一度開き直すと以下のようにBSLightingShaderPropertyとNiAlphaPropertyが出てきます。
読み込めないブロックなのでこれらをCtrl+Deleteで消します。
例では以上の2種類でしたが他にも読めないブロックがあるのでそれもあれば消しておきます。
Blenderでは読み込めないリスト
  • BSLightingShaderProperty
  • NiAlphaProperty
  • BSBehaviorGraphExtraData
  • bhkCollisionObject
  • NiStringsExtraData
  • BSInvMarker

またCtrl+Sで保存します。

Blenderでの作業

File→Import→NetImmerse/Gamebryo(.nif & .kf & .egm)です。

メッシュファイルを読み込むときは以下のとおりに設定します。

※ここでPython Script Error: Check Consoleのエラーが出る場合
Blenderとともに出る黒い画面の方がスクリプトログですのでこちらの最後の行あたりを読んでエラー内容を把握します。
ValueError: Unknown block type 'BSLightingShaderProperty'. 読み込めないブロックがあるとこのエラーが出ます。' '内が該当する箇所ですのでこの場合はBSLightingShaderPropertyをNifSkopeで消します。
PyFFiが入ってる場合:PyFFiのインストールに失敗してます。導入のところを見て再度インストールしてください。

String too longのエラーが出てたらフォルダ名(ファイルパス)やファイル名に日本語が含まれていないかどうか確認してください。
Blenderに限らず基本的にファイルパスに日本語を含めないでください。


特にエラーが出ず3D Viewに表示されたらImport完了です。


Nif Export

ウェイトがあるかどうかで作業が違ってきます。
ウェイトとはボーンに追随してメッシュが変形する仕組みです。動画で見るとイメージしやすいです。
動画だと三角錐がボーン、周りの四角がメッシュ。ボーンを回転させるとそれに合わせてメッシュが変形する。

Blenderでの作業

Importしたての状態からオブジェクトを右クリックして選択します。

マテリアルの設定

ここで設定したマテリアルは実際には使用されませんが、Nif出力する時にマテリアルの項目が無いと正しく動作しません。
(マテリアルがないとUVやノーマルマップ等のマッピングのデータが付かなくなる。)
Buttons WindowのShading(F5キー)をクリックしてマテリアル設定画面を選択します。
Links and PipelineタブのLink to ObjectからAdd Newを選択してマテリアルをオブジェクトに追加します。


追加ができたら、詳細を設定するためにTexture buttonsをクリック。再度Add Newでテクスチャを追加し、Texture TypeをImageに設定。


すると右隣に二つほどタブが追加されます。
ImageタブのLoadをクリックして、適当な画像を指定します。(実際には使われないのでなんでもOKです)


では、Mattrialボタン(赤い球体)を押して先ほどの画面に戻りましょう。
ここのMap InputタグからUVを選んでマテリアルの設定は完了です。


NIFが完成した後でテクスチャがずれていたり、表示が変になっていた場合は、このUVボタンを押し忘れている可能性があります。
表示がおかしくなった時には、この手順をもう一度繰り返して出力してください。

ウェイトを塗る(装備などのウェイトがある場合)

各部位のウェイトとは別にBP_TORSOのウェイトを塗ります。
F9でEditingに入ってLink and MaterialsのVertex GroupでNew押して、BP_TORSOとリネーム。
Tabキーでエディットモード入って、Aキーで全部の頂点選択します。
Weight1.0の状態でAssignボタンを押して、赤一色に塗ります。


スケルトンをつける(装備などのウェイトがある場合)

元となるnifをimportを参考にBlenderで読み込める状態にします。元となるnifとは例えば頭装備を作るとなると鉄の兜(Data\Meshes\armor\iron\f\helmet.nif)などを選びます。
※厳密に言うとウェイトを塗ったVertex Groupsに対応するスケルトンがなければうまく表示できません。NPC Head [Head]のVertex Groupsのウェイトを塗ったら、NPC Head [Head]のスケルトンを読み込む必要があります。

オブジェクトモードで出力するメッシュを選択して、File→Import→Netlmmerse/Gamebryo (.nif & .kf & .egm)を選びます。
設定は以下のように、赤枠のImport Skeleton Only + Parent Selectedを選んでOK押します。
これで選択したメッシュにスケルトンをつけることができます。


Nifの出力

出力するオブジェクトを選択した後、File > Export > Netlmmerse/Gamebryo (.nif & .kf & .egm)でスクリプトを起動。

出力ではそのオブジェクトにウェイトがあるかどうかで違います。
ウェイトがないもの→武器やインベントリ用のメッシュ、トマトやドアなどのオブジェクト。
ウェイトがあるもの→髪、防具、ボディ、クリーチャー。
ウェイトがあるかどうか確認方法:元のnifまたは元にしたいnifをBlock Listsのツリーの一番最初のがBSFadeNodeのはウェイトがありません。
NiTriShape下にBSDismemberSkinInstanceまたはNiSkinInstance(どちらもウェイトの設定)がある場合はウェイトがあります。
Blender上ではButton WindowのEditing(F9)を開き、Link and MaterialsのVertex groupsが空ならなしです。

ウェイトがない場合の設定。

ウェイトがある場合の設定。
※巨人等のクリーチャーの場合はExport Dismember Body Partsは不要かもしれない。

NifSkopeでの編集

そのままでは使えませんのでNifSkopeで編集します。

出力したNifのバージョン書き換え

NifSkopeで先ほど出力したNifを開きます。開いてすぐBlock DetailsのNiHeaderの三角をクリックして内容を表示。


Importした時と同じように今度はUser Versionを11→12とUser Version 2を34→83へ変更。


Ctrl+Sで一旦上書き保存しましょう。

設定の移植

ウェイトがあるとないとでは作業が違います。
(ウェイト設定を持っていくと崩壊する可能性がある、逆にウェイトがないnifはNiExtraStringsDataなどの特殊なブロックが付いてる場合が多いため持ってくるのが面倒)

・ウェイトがある場合
ウェイトがない場合は元になるnifからテクスチャや透過情報のみを移植します。

以下の赤枠の不要なデータを削除します(マテリアルの設定)。

元にしたいnifを開きNiTriShapeツリーのBSLightingShaderPropertyをCtrl+Cしてコピー、Exportした方のNiTriShapeを選択しCtrl+Vでペースト。
NiAlphaProperty(透過情報です。物によってはない場合もあり)も同様にコピー&ペースト。


続いてBSDismemberSkinInstance→Partitions→PartitionsのBody Partの部分を元のnifと合わせます。
Valueのところをダブルクリックするとその右側に下向きの三角形が出るのでそれを押すとプルダウンメニューが出ます。
そこから元のnifと同じにします。Partisionsが複数ある場合は同様の作業を繰り返します。
(例:頭防具の場合はたいていSBP_131_HAIRを選ぶ)
※ちなみに文字列を直打ちしても候補が出てきます。
コピペでもOK

・ウェイトがない場合
ウェイトがない場合は造形データだけ取り出して元になるnifに移植します。
以下を参照にしてください。
既存Skyrim Nifへの移植

テクスチャの設定

元のnifと同じテクスチャでいい場合はこの項目はやる必要がありません。
BSLightingShaderPropertyツリー内のBSShaderTextureSetがテクスチャの設定です。
Block Details内のTexturesの三角を押してツリーを展開するとテクスチャファイルのパスが表示されます。
花のマークを押すとファイルブラウザが出て変更したいテクスチャに変更します。
ただし絶対パスになってしまうので他のファイルパス同様にtextures\より前のパスは削ります。
例:グレーの部分が不要。 C:\Program Files (x86)\Steam\steamapps\common\The Elder Scrolls V Skyrim\data\ textures\...

確認

保存したら、メッシュフォルダ内に配置して確認します。
作業が必要ないので何かの置き換えにするとわかりやすいです。(例だとdata\meshes\actors\giant\character assets\にgiant.nifとして配置)
Creation Kitで確認します。エラーが出るため原因を特定しやすいです。
(例ならObject WindowのActors→Actor→EncGiant01→右クリック→Preview)
きちんと表示されるか確認します。

CKでうまくいったら今度はゲーム内で確認しましょう。


よくある失敗パターン


ウェイトありの場合

動きにメッシュが追従しない(出力したnifにBSDismemberSkinInstanceがついてない)

考えうる原因
  • Export時にExport Dismember Body PartsがONになってない
  • ウェイトがついてない。→EditModeでAで全選択してAssignでとりあえず全部塗っちゃうのをオススメします。コピーするならBlender最新のだとボーンウェイトコピーがないのでTransfar Weights使う。
  • 装備の場合はVertexGroupが出力前につけるスケルトンのNode(+BP_TORSO)が一致しないといけません。例えば頭装備ならNPC HeadとBP_TORSOのVertexGroupが必要
  • ボーンのParent設定してない。→オブジェクトモードで出力するオブジェクトを選択したまま、Importから髪を直接読み込みます。

SkinInstanceがついていてもウェイト情報が抜ける

  • マテリアルの設定がされてない可能性があります。バージョン変更して開き直した時にNiMaterialPropertyがない、NiTriShape→NiTriShapeDataのBlock DetailsのHas NormalsがNoになっている場合はマテリアルが適切に設定されてません。
もう一度マテリアルの設定を見なおしてみてください。

メッシュがゲーム内で伸びてしまう

ウェイト設定とスケルトンが一致しないと発生するので2.49bの時にスケルトンのImportからやり直します。
ウェイトコピーしたメッシュのスケルトンなら失敗しないです。

位置がずれる

スケルトンの位置情報がおかしいかもしれません。一旦Blender上のスケルトンを削除してImportから付け直します。

CK上では表示されるのにゲーム内で表示されない

BSDismemberSkinInstance→Partitions→PartitionsのBody Partの設定がおかしいかもしれません。
該当のnifを開いてBSDismemberSkinInstance→Partitions→PartitionsのBody Partの部分を元のnifと合わせます(=CKのArmorAddonのスロットデータと一致させる)。
Valueのところをダブルクリックすると右側に三角のプルダウンメニューが出るのでそれを押して合わせます。

例えば、鉄の兜(Data\Meshes\armor\iron\f(男性はmale)\helmet.nif)の置き換えするときに元の鉄の兜のPartitionsはSBP_131_HAIRで、置き換えモデルもSBP_131_HAIRすると表示できます。
これをSBP_142_CIRCLETにしても表示できないです。サークレットのPartitionsならサークレットの置き換えでないとできないです。

共通

モデルデータが表示されない(透明になる)

ウェイトなしのモデルデータはBSLightingShaderPropertyのSLSF1_Skinnedのチェックを外してください。
逆にウェイトありの場合はSLSF1_Skinnedにチェックを入れます。

テクスチャが反映されない

→紫色になる
テクスチャの読み込みができてません。TextureSetのファイルパスのミスか、テクスチャファイルを指定のフォルダに置いてないか確認してください。

ディフューズマップが効かない(色がついてない)

Vertex Colorsが付いてません。
コピーしたBSLightingShaderPropertyのShader Flags 2にあるSLSF2 Vertex ColorsがついてるとVertex Colors(頂点カラー)が必要になります。
このフラグを外すか、NiTriShapeDataのHas Vertex ColorsをYesにしてください。
または、Blenderの時点で以下の画像のVetex Colorsの欄で+ボタンを押すと頂点カラーが付きます。

blenderでnifエクスポートする時にエラーが出る(ImportError:no module named logging)

原因は不明ですが必要なモジュールがよめないと起きます。
python→pyffi→nif scriptsの再インストールしてください。


慣れてきたら(or どうしてもできない時)

以下のファイルを使ってImport/Exportの手順をかなり減らせます。

Nif Import/Export Auto Formatting
バッチファイルにドラッグアンドドロップするだけで、Blender2.49bにインポート可能な段階まで自動で整形するツールと、
Blender2.49bから出力したnifファイルをバージョン変更、不要ノードの削除、タンジェントスペースの更新まで自動で整形するツール。
要:Pyffi 2.2.2、Python3.3です。import/exportで使うバージョンと違いますが特に問題ありません。

Exportの方はバッチファイルにドラッグアンドドロップしたあとで必要な作業はパーティションの設定とテクスチャとアルファの設定を元のnifからコピーするだけです。