Blenderで入出力
このページではBlenderでスカイリム用のメッシュファイルの入出力についてを解説します。
開発版なのでまだ不完全ですが、Blender2.49bを使う旧方式よりメリットが多いのでこっちのほうをおすすめします。



更新情報

  • 2017/8/24 ボタン一発で出せるExport nif Script for Skyrimを追加。
  • 2017/8/23 顔ファイル(FaceGen)の読み込みの項目を追加。 エラー別のtoo many values to unpack~の対処法について記載。
  • 2017/7/02 Nif plugin for Skyrimがはじめからインポートのスケール0.1倍、エクスポートのスケール10倍設定になっていたのでそのままデフォルトに。動作には支障ありません。オプションの方を1倍スケールにしました。
  • 2017/2/15 いくつか画像の追加。Texturesフォルダの作成を追加。
  • 2016/4/13 旧方式からこっちをメインにするために内容を改変しました。
どれをダウンロードしていいかわかりづらいので、動作安定+スカイリム用の出力設定に改変したNif plugin for Skyrimを配布しています。
  • 2016/4/08 Niftools Dismember Flags Panelの+の追加ボタンで追加できない問題を(勝手に)修正

必要なものをそろえる


nifファイルの閲覧・編集:NifSkope 2.0.dev5
BSAファイルの解凍:B.A.E. - Bethesda Archive Extractor

Blender 2.7xの導入方法

  1. Blenderのダウンロードページへ行きます。
  2. Blender 2.7xを .ZIPのほうをダウンロードします。OSが64bitであれば、64bit、Mod Orgnaizerを経由する場合は32bitを選んでください。
  3. 適当なフォルダに解凍します。あとはblender.exeを起動すれば使えます。

Steam版も導入が楽で自動で更新してくれるのでおすすめします。
※Blenderは3か月ぐらいに一回のペースで0.01刻みの更新をしていて、2.7系は互換性がずっと保たれ続けるので自動アップデートはかなり利点あります。


Blender Nif Plugins

Blenderでnifファイルの入出力に必要なプラグイン(アドオン)でまだテスト用のビルドではあるんですが、すでに実用的です。
最新の2.7xの対応やスカイリムの暫定対応がなされています。

旧方式に比べてのメリット

  • 使いにくいBlender2.49bを経由せず直接最新のBlenderにインポート/エクスポートできます。
  • pyffiやnifscripts等すべて含まれているので煩わしいセットアップ作業が不要。→ このアドオン一本あれば動く。
  • スカイリムのnifを事前編集なしに直接読み込めます。→バージョンの書き換えや(一部)不要ノードの削除不要。
  • フォルダ構成さえ正しければテクスチャ・UV・マテリアル設定、正しいボーン設定を保持したままインポートできます。→2.49bではできなかったこと
  • エクスポート時にバージョンの書き換えや不要ノードの削除、パーティションの変更等の必要なし。テクスチャ設定も出力できます。

まだ出来ないこと

  • アニメーションの入出力。アニメ付きnifも不可
  • NiStringExtraDataとNiAlphaPropertyの出力。
  • BSEffectShaderPropertyが読み込めません。つまりエフェクト系はほぼ読めません。
  • コリジョン(当たり判定)のエクスポート。出せることには出せますが、ゲームがクラッシュします。


バグ情報や対応/非対応の情報


未発見のバグありましたらnif toolsに直接連絡するか、コメントフォーム設置したのでここに書くかしていただけると助かります。
エラー出たけどこうしたら直った等の情報もお願いします。

動画

nif tools公式の導入ビデオ

アセット作成チュートリアル Blenderで作成したオブジェクトをSkyrimへ持ってくるまで by Tamu75

インストール

  • Nif plugin for Skyrimをダウンロードします。
  • 展開して io_scene_nifフォルダ"Blenderのフォルダ\Blenderのバージョン\scripts\addonsフォルダ" に入れる。
  • Blenderの UserPreference→Addons 開いて、検索窓にnifと打って Import-Export:NetImmerse/Gamebryo nif format を表示させ、その一番右端をチェック。
  • 左下 Save User Setting を押して設定を保存。
    ※ImportError:No module named 'pyffi' が出て入れられない場合
    ドライブ名:\Users\ユーザー名\AppData\Roaming\Blender Foundation\Blender\バージョン\scripts\addonsの方にio_scene_nifフォルダ を入れてみてください。

インポート

File→ImportからNetImmerse/Gamebryo(.nif) を選択。
設定はファイルブラウザの左下に表示されます。
設定項目はそのままでも読めます。

{インポート時にMeshesファイルとTexturesファイルが同じ階層のフォルダにあってnif上で指定してあるテクスチャがある場合は
テクスチャ設定を読み込んでくれます。ぜひテクスチャの方も解凍しておきましょう。}

インポート時にテクスチャが読み込めない場合、黒いメッシュで表示されますがバグではないです。
View Port ShadingをSolidに、
プロパティウィンドウのShading→Matcapにチェックを入れます。

武器nifの読み込み時の注意点

武器にはEdgeBloodという血糊のエフェクトが大抵ついていて読み込めません。
ですのでインポート前に事前にnif skopeで削除してください。

  1. EdgeBloodを選択して、Ctrl+Deleteで削除できます。
  2. 同様にEdgeBlood01も削除します。
  3. File->Save As... でインポート用に別名で保存します。例:xxx_import.nif


顔ファイル(FaceGen)の読み込みの注意点

nif形式で読み込むと頂点数が変わってしまうので、入出力してもゲームでは使えません。
通常はOBJ形式で入出力します。

obj形式での読み込み

nif skopeで出力したい顔ファイルを開き、顔のNiTriShape(~Head~)を 選択 して、File>Export>Export .OBJで出力。
BlenderでFile>Import>Wave front(.obj)で+ Keep Vert Order を選択して、Y Forward Z upで読み込みます。

読み込んだらTキーでツールシェルフ開いて、Tools>Shading:>Smoothをかける。スムースかけないとカクカクになってしまうので。
あとはお好みで編集しますが、頂点を分割したり追加したりはしてはいけません。

obj形式での出力(差し替え)

Object modeで顔ファイルを選択し、
File>Export>Wave front(.obj)で+ Keep Vertex Order を選択して、Y Forward Z upで出力します。

Nifskope 1.20 Alpha2(2.0はImport不可)で読み込みに使った顔ファイルを開きます。
顔のNiTriShape(~Head~)を選択して、File>Import>Import .OBJで読み込みます。
これで差し替えの完了です。

nif形式での読み込み

このやり方で読み込んでもゲームでは顔ファイルとしては使えません。
nif形式で読み込みたい場合はそのままでは読み込めないのでBSFaceGenNiNodeSkinned>NiTriShape>BSDismemberSkinInstance>Skeleton RootのValueを0にします。
これをすべてのNiTriShapeで行います。首のあたりがひっくり返りますが、読み込みには問題ありません。別名で保存して、あとは下記のインポートと同じで読み込んでください。

ワークフロー

モデル制作→UV展開→テクスチャ→ここで ベースメッシュと差し替え もしくはnif項目の手動設定→ウェイトを塗る→エクスポート


エクスポート前の設定

スカイリムのnifからインポートしたものはエクスポートに必要な設定を保持してるのでそのままエクスポートできます。
自作メッシュの場合はメッシュを差し替えて設定を引き継ぐパターンと、一から手動で設定するパターンがあります。

メッシュを差し替えて設定を引き継ぐ方法

nifの設定を手打ちするのはけっこう大変なのでベースメッシュを読んでメッシュだけ差し替えるのが簡単です。
ベースにするメッシュをnif importで0.1倍スケールで読み込みます。
たとえば、頭装備で髪型を非表示するものは鉄の兜等のnifファイルを読み込みます。髪型表示したい時のベースはサークレットにします。

オブジェクトモードで作った モデル→ベースメッシュの順 に選択。Ctrl+Jで統合。
エディットモードで位置合わせ。
元のメッシュはエディットモードで削除。元メッシュの選択はCtrl+L(選択頂点に接続されてるメッシュ全選択)で選択します。
ベースメッシュのマテリアルは 削除せず にそのまま引き継いでテクスチャのパスだけ変更します。

ウェイトがある場合は、頂点グループをアサインし直して、塗りなおしかコピーして仕上げる。

一から手動設定

一から作った場合は手動で設定していきます。
一から設定する場合でも元となるメッシュ(髪なら髪、武器なら武器のバニラのnifファイル)を見つけて、それに設定をあわせて行きます。

Texturesフォルダの作成

作業中の.Blendフォルダがあるところに Texturesフォルダ を作ります。
そうでない場合に出力時にエラーになります。

たとえば: Textures\Clutter\Food\XXX\ のように実際に配布する場合のフォルダ構成にしておくとパスの変更がいらないので楽。


マテリアル

法線情報が欠落するのでマテリアルが必須です。このあたりは2.49bと同じ作業です。

1.プロパティウィンドウからMaterialを新規作成。
2.となりのTextureアイコンからNewを押してテクスチャを新規作成してます。
3.Type:を Image or Movie にし、左のアイコンかOpenを押して画像の指定をします。

4.MappingをUVにして、Map:を選びます。

ノーマルマップの設定

前述のマテリアルの2.以降と手順は同じです。
マテリアルはそのままでテクスチャを作って画像をし、UVを設定します。

Texturesプロパティ内のImage Samplingの Normal Map にチェックを入れます。
Infulenceの Geometry:Normal のみチェックを入れます。


シェーダーの設定

オブジェクト(立方体のアイコン)→Niftools shader→ShaderTypeBSLightingShaderProperty に選ぶ。
それ以下のフラグのチェックは元となるnifファイルを参考にしてください。
※BS Lighting Shader Object Typeは現在Defaultのみ対応
※ウェイトがある場合はSkinnedに必ずチェックしてください。


バージョン設定

NifObject Panel から
Nif Version 20.2.0.7
User Versionを 12
User Version 2に 83
ここまでは固定です。

中段Nif Root Node:NiNodeですが、元となるnifをnifskopeで開いて、一番上段のノード名に合わせます。

エフェクト、スケルトン、ウェイトのないメッシュは BSFadeNode
ウェイト付きメッシュは NiNode

BSXFlagはnifskopeで見てBSXFlagsノードがある場合は、Block Details内のInteger Dataにあわせます。


スロット(DismemberFlag)の指定

ウェイトと装備スロットがある場合のみ設定します。
元となるメッシュにBSDismemberSkinInstanceのノードがある場合が該当します。
元となるメッシュを BSDismemberSkinInstancePartitions→Partition→Partitions の設定と合わせます。



自作モデルにスケルトンを入れたい場合は
オブジェクト→スケルトンの順番 でShift+右クリックで2つ選択。
Ctrl+PでArmature Deformを選びます。


エクスポート前のチェックリスト


  • バージョンはあってるか?
  • Nゴン(多角形ポリゴン)はないか? Mesh Lintというアドオンで調べることが可能※Blender アドオン参照。分割しておく。
  • ウェイトの塗り残しはないか?分割やメッシュ(頂点)の修正度にその箇所はウェイトの塗り直しが必要。アサインで予め全部頂点塗っておくと便利。
  • オブジェクトモード時のメッシュのスケールが1.0倍になっているか? プロパティパネルでScale値で確認可能。Ctrl+A→Scaleで1.0倍に直せる。

エクスポート

出力したいオブジェクト選んで、
File→ExportからNetImmerse/Gamebryo(.nif)

Game:Skyrimを選択
Smoothen Inter-Object Seam、Skin Partition、Flatten Skin、Force DDSにチェック。

※2.49bで作ったデータ(nif importをバージョン変更ありで経由している場合)は大きさが0.1倍になってるので、 Scale Correction Export10.0 にして出力します。
これはImport時に0.1倍の大きさで読みこんだ場合も同じです。


エクスポート用のスクリプト

Export nif Script for Skyrim
エクスポートは上記の手段で行えますが、これはエクスポートの選択したオブジェクトひとつをボタン一発で出力します。
バージョンやシェーダーの設定を自動的に行うのでよく起こりがちなエラーを回避できます。
使い方や詳しい説明はリンク先のブログ記事に記載してます。


エクスポート時のエラー別トラブルシューティング

ポップアップでエラー出ますが、クリックすると消えるのでそのあと確認したい場合はEditor Typeをinfoにするとログが読める。

エラーはこの行を読みます。下から二行目あたり。

Export version expected shader. no shader applied to mesh '<bpy_struct, Object("XXXX")>', these cannot be exported to NIF. Set shader before exporting.
→シェーダーが付いてない。プロパティの Object→niftools shader→ShaderTypeBSLightingShaderProperty に選ぶ。

Cannot export mesh with unweighted vertices . The unweighted vertices have been selected in the mesh so they can easily be identified.
→ウェイトが塗れてない頂点が存在する。エラーが出た時点で塗れてない頂点が選択状態になっている。この状態でEditor ModeのVetex GroupsでAssignすると早い。

Some polygons of <bpy_struct, Object("xxx")> not assigned to any body part. The unassigned polygons have been selected in the mesh so they can easily be identified.
→ウェイトの設定ミス。UNPで起こる。Object DataのVertex Groupsに末尾に.001(例:SBP_32_BODY.001)が付いたデータがあるのでマイナスボタンを押して消す。
 001が付いてない方の元データ(例:SBP_32_BODY)を、Edit Modeに入ってAキーで全選択、Assignボタンを押す。

Assertion Error
→重複頂点などの論理矛盾の箇所がある。エディットモードに入って、全選択→ツールシェルフ→Tools→Remove Doublesで直る。
→上記で直らない場合は、三角ポリゴンと四角ポリゴンが混合しているメッシュの可能性が高い。メッシュ→Faces→triangulate facesで直る。
 ※出力時に自動で三角ポリゴンに分割するので本来は三角と四角ポリが混在していても問題無いですが、このようにエラーが出る場合もあるようです。

AttributeError: 'TextureHelper' object has no attribute 'context'
→指定したテクスチャファイルはTexturesフォルダ内にないと出るエラー。Texturesフォルダを作成または移動して、プロパティウィンドウのTexture→Images指定しなおしてください。

ValueError: need more than 1 value to unpack
→nifのバージョン指定がされてない。Niftools Object Panelの項目でNif Versionを 20.2.0.7 にする。

ValueError: too many values to unpack (expected 4)
→nifのバージョン指定のミス。Niftools Object Panelの項目でNif Versionを 20.2.0.7 にする。
 スケルトンも同じ数値でバージョン指定しましょう。

'xxx': version does not match selected export settings
→バージョンの不一致。おそらくエクスポート設定がOblivionになっているのでSkyrimに変える。

Texture is set to use UV but no UV Map is Selected for Mapping > Map
→UVマップの設定がされていない。 プロパティウィンドウのテクスチャ項目→Mapping→Map: から UVmap を選択。

症状別トラブルシューティング


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

考えうる原因
  • Export時にSkin PartitionがONになってない。
  • ウェイトがついてない。→EditModeでAで全選択してAssignでとりあえず全部塗っちゃうのをオススメします。コピーするならBlender最新のだとボーンウェイトコピーがないのでTransfar Weights使う。
  • 装備の場合はVertexGroupが出力前につけるスケルトンのNode(+BP_TORSO)が一致しないといけません。例えば頭装備ならNPC HeadとBP_TORSOのVertexGroupが必要
  • 出力時にメッシュにスケルトンがついてない→ モディファイアからArmatureで出力用のスケルトンをつける。

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

  • Blender上でマテリアルの設定がされてない可能性があります。
 NiTriShape→NiTriShapeDataのBlock DetailsのHas NormalsがNoになっている場合はマテリアルが適切に設定されてません。
 もう一度マテリアルの設定を見なおしてみてください。

位置がずれる

スケルトンの位置情報がおかしいかもしれません。一旦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 にチェックを入れます。

スケールの設定ミスで小さすぎて見えてない場合があります。ゲーム内でしたらコンソールのtwfでオブジェクトの原点位置に小さくメッシュが見えたりします。
0.1倍で読み込んだ、もしくは昔blender2.49bのデフォルト設定で読み込んだメッシュはExport10倍の設定で出してください。

テクスチャが反映されない(ゲーム内で紫色になる)

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

手足がずれる。

Partitionの設定が間違ってます。
BlenderのNiftools Dismember Bone Flags Panelの一番上(Start Net Bonesetがついてるもの)以外を削除します。
その一番上のVertex GroupsをEdit Modeで全選択して、Weight1.0でAssignを押して塗り直し。


一部分または全部が表示できなかったり、一部分が伸びたりする

一部分の場合はその箇所に正しくウェイトが塗れてません。出力時につけるスケルトンや、頂点グループ名が間違ってる可能性があります。


修正されたエラー


AttributeError: 'MeshHelper' object has no attribute 'context'
ウェイト全部塗れてない。Editor ModeのVetex Groupsでメッシュ全選択してからAssignで全てにウェイト塗った状態だと塗り残しが無くなります。 12/04版で修正

Mesh only has one Vertex Color layer default alpha values will be written - For Alpha values add a second vertex layer, greyscale only
→頂点アルファが非対応なので単純に付けただけの頂点カラーを削除してください。 ただのダミーの頂点カラーが必要時はnif側でNiTriShapeDataのHas Vertex ColorsのNoをダブルクリックで付けれます。 シェーダーの方VertexColorのフラグ外してたほうがいいです。 12/02版で修正。


その他

  • NiSkinInstanceからBSDismemberSkinInstanseにしたいとき。
BSDismember~ってなんぞやといえば、パーティション(≒CK上の装備スロット)を設定します。
ウェイト付きメッシュで身に付けるものはほぼ必須です。

オブジェクトモードで設定したいオブジェクトを選択し、逆三角アイコンを選択して、
NifTools BSDismember Flags Panelを開きます。
Partition Countはパーティション数。その下はパーティション名を入れます。
元にするnifと同じ設定にしてください。

肌が浅黒くなる。

BSLightingShaderPropertyのSkyrim Shader Typeが今のところ、デフォルトしか対応していません。
nif skopeでボディのNiNodeのBSLightingShaderProperty、Skyrim Shader TypeをSkin Tintにして、Shader Flags 1のFaceGen Tint RGBにします。


リンク


元のnif plugin:Nightly Dev builds - Pre-Alpha 4
そのGithub版


  • Mod organizor 使ってる人は32bit verのblenderをダウンロードしましょう -- tokikake (2014-10-25 14:26:56)
  • UNPB体型でしか確認してませんが、上で書かれてる .001のついたveretx groupの削除と、ウェイトの移し替えやると、exportはできるんですが、元ファイルのNiSkinpartitionのウェイトも変更することになると思うんですが、いいんでしょうか? -- 名無しさん (2014-10-25 17:12:44)
  • partitionblock数(UNPB体型だと2つ)も当然2から1に変更されますよね -- 名無しさん (2014-10-25 17:37:11)
  • ああわかりました。partitionblockだけ元ファイルからもってきて、手動で修正ですね。 メッシュ修正しただけですが問題なく動いてます。 -- 名無しさん (2014-10-25 20:29:54)
  • スケルトン読み込むと、一部名前が書き換わりますね。大腿骨のNPC L Thigh [LThg]がNPC Thigh [Thg].Lみたいに -- ちびくま (2014-11-23 05:59:32)
  • ボーン名はBlenderの命名規則に則って変更されます(ウェイトペイントが左右対称に出来たり)。エクスポート時に戻るので心配なく -- tktk (2014-12-16 22:36:12)
  • nifファイルを出力する際に指定するテクスチャが「Textures」という名前のフォルダ配下にない場合にエラーが出ました。出力時したnifファイルのテクスチャのパスを「Textures」という名前のフォルダ配下の相対パスにしてくれるからなのかなと思います -- ponzu (2015-01-09 02:09:53)
  • 剣や斧のnifファイルをインポートする際、BSShaderTextureSetを持たない方の血糊のNiTriShapeは削除しないと読み込めませんでした。 -- ponzu (2015-01-09 02:13:06)
  • Fで新たに作った面のみテクスチャが変に表示されてしまう不思議 -- 名無しさん (2015-01-25 19:14:31)
  • これそのままメッシュ読み込むとマテリアルがないって警告出てインポートできませんよね -- 名無しさん (2015-03-12 16:59:45)
  • 基本的に殆どが読み込めます(マテリアルなくても)。そのまま読めないのは武器とか一部ありますね。 -- tktk (2015-03-14 11:37:29)
  • Niftools Object Panelってblenderにあるのか。20.2.0.7なのにエラーでてまうわ -- 名無しさん (2015-04-08 21:11:26)
  • ブレンダー上だとあるのに、出力すると表示されない 選択してるのにっていうかボディにくっつけてるのに出力するとそこだけ穴あいて表示されない -- 名無しさん (2015-07-11 21:18:35)
  • TTypeError: bpy_struct: item.attr = val: enum "MATERIAL" not found in ('BOUNDBOX', 'WIREFRAME', 'SOLID', 'TEXTURED', 'RENDERED') -- 名無しさん (2015-10-18 10:56:08)
  • いけねミスった 上記のエラーが出てインポートできないんですがどうすればいいんでしょうか -- 名無しさん (2015-10-18 10:56:54)
  • 読み込めるし出力できるんですが、どうやっても、テクスチャが変わってしまう。パスは同じなのに黒くなる。Nif scope でにらめっこしても違いがないはずなんですが。 -- 名無しさん (2016-04-16 18:56:26)
  • UNPBのメッシュをそのままインポートしてテストしても同じ。ノード名などは元に戻してます。 ただもともとhas normal はNOなのでそのままにしてますけど。 -- 名無しさん (2016-04-16 18:58:00)
  • あと、いくらルート名をそろえてもエクスポート後は、ファイル名がルート名になりますよ -- 名無しさん (2016-04-16 19:07:33)
  • 自己解決しました。 BSLighting shader property の、Shader Flags1 で、Facegen data tint にチェックがついてなかった。 リンク先参照でわかりました。 -- 名無しさん (2016-04-16 19:55:21)
  • 'NifExport' object has no attribute 'get_object_matrix'のエラーは、どうすれば回避できますか? -- 名無し (2016-08-25 23:37:08)
  • TypeError:'NoneType'object is not subscruptable というエラーでエクスポートができません・・・。 -- 名無しさん (2016-09-07 23:29:03)
  • エクスポート時に「"データ" has missmatched nif version, user version or user version 2」のエラーが出る。user version :12 user version 2:83ではエクスポートできない。 -- 名無しさん (2016-09-17 20:26:19)
  • TypeError:'NoneType'object has no attribute error で、Facegendata顔メッシュがインポートできないです -- 名無しさん (2016-09-24 05:38:41)
  • バージョン設定画面がないです -- 名無しさん (2017-03-17 15:52:03)
  • 肌色が変化する理由の一つにspecular, (glosiness)の値が変わっている時があります。 -- tokikake (2017-04-02 12:31:50)
  • あとfacegen のnif file のimport, export は可能なのでしょうか?どう設定しても成功しません -- tokikake (2017-04-02 14:13:48)
  • ValueError: too many values to unpack (expected 4) のエラーが出てエクスポートできません -- 名無しさん (2017-05-28 10:53:45)
名前:
コメント: