装備のBBP対応

装備のBBP対応

乳揺れさせよう!

Oblivionの時はBBBと言っていた乳揺れですが、SkyrimではBBPと言います。
標準(バニラ)の状態では決して揺れることはありません。乳揺れするために必要な条件は3つ。

  1. 胸のボーンを含むスケルトン
  2. 胸のボーンに追従するウエイトを持つメッシュ
  3. 胸のボーンを動かす機構

これらはバニラの状態では揃っていないのです。BBPを実現するにはこの3つを導入する必要があります。

胸のボーンを持つスケルトンは「BBP対応」と言われるスケルトンで「XP32 Maximum Skeleton」が有名です。
胸のボーンに追従するウエイトを持つメッシュも「BBP対応」とされるものです。「ウエイト」とは、メッシュの特定の部位が、ボーンの動きに追従して動くようにあらかじめメッシュの各座標に設定しておいた数値で、BBPの場合だと、胸のボーンが上がるとそれに追従して胸のメッシュが上がるようにウエイトが設定してあります。
ボーンを動かす機構は「hkx」ファイルと呼ばれる、ボーンの動きをアニメーションとして定義したファイルです。hkxファイルは「立ちモーション」、「走りモーション」など一つの「モーション」に対応する「アニメーション」が一つ記述されていて、たとえば「立ちモーション」なら、立っている状態のボーンそれぞれの状態を時間経過に沿ってアニメーションとして記述しています。バニラでは胸のボーンはありませんので、バニラのhkxファイルにも胸のボーンの記述は入っていません。そのため、hkxファイルをBBP対応に置き換えたモーションの時だけ乳揺れすることになります。……これまでは…

この原稿を執筆中(2013年11月)に大きな出来事がありました。「HDT Support」というSKSEプラグインの出現です。

実は、ボーンを動かす機構にはhkxファイル以外にもう一つあります。HAVOKという物理シミュレーション機構です。ボーンがコリジョン(衝突)や慣性など物理法則に従って動く機構です。死体になって崖から落ちるとき、岩にぶつかってはね飛ばされたりとてもリアルな挙動をしますが、あれが物理シミュレーションによる効果です。通常、ボーン自体にその定義を仕込んでおき、ゲーム中でその効果が現れるのですが、HDT SupportはHAVOKの定義がされていないボーンでも「後付けで」定義をして、ゲーム中で物理シミュレーションさせてしまいます。

つまりHDT Support環境では、BBP対応ボーンとBBP対応装備が導入されてさえいれば、hkxファイルはバニラのままで動作に合わせて自然に乳揺れするのです! \(^o^)/

BBP対応ボーンはXP32を導入すれば済みます。
問題は、お気に入りの装備がBBP対応でない場合です。誰かがそのメッシュに、胸のボーンに対応したウエイトをつけてやらねばなりません。

メッシュにウエイトをつける作業はフリーで手に入るツールのみでできます。手順はオブリビオンの時に比べるとちょっと難しくなりましたが、手順を踏めば機械作業でできますし、Blenderは難しそうですが好きこそものの上手なれです。さあ、これを読んでいるあなた。今こそBBP職人として技を磨き、自分とみんなを喜ばせましょう。

オブリビオンで乳揺れさせたい一念でBlenderを使い始め、未だに乳揺れでしかBlenderを使えてない私がご案内させていただきます。


BBP化の大まかな流れ

  • 環境整備
    作業用フォルダの作成。ツール類のインストール、改造。
  • メッシュファイル(_0.nifと_1.nif)の加工
    胸のボーンの移植。Blender 2.49bでインポートできるように加工…NifSkopeでの作業
  • _0.nifメッシュの胸にウエイトをつける
    Blender 2.49bでインポート。ボーンウエイトコピーでウエイト付け。ウエイトの修正。メッシュの修正。_0.nifメッシュファイルをエクスポート…Blender 2.49bでの作業
  • _1.nifメッシュの作成
    Blender 2.6上で_0.nif体型を_1.nif体型にモーフィング。一端セーブ…Blender 2.6での作業
    Blender 2.49bで_1.nifメッシュファイルをエクスポート…Blender 2.49bでの作業
  • メッシュファイルのノード並び替え
    PyFFI Nif Fix 0.3で、メッシュファイルのノード並び替え…PyFFI Nif Fix 0.3での作業
  • メッシュファイル(_0.nifと_1.nif)をSkyrim仕様に加工
    Blender 2.49bで読めるようにした加工で失われた属性を元に戻す…NifSkopeでの作業
  • ゲームで検証

BBP化マニュアル

ここでは、BBP化するMODとして「UNP Female Armors - UNP Armors version 2_1」内のbarkeeperを例に説明しています。図版に出てくるBlender 2.49bは日本語化してありますが、本文では英語版に準拠しています。日本語化するには最上部にあるバーの下辺をつかんでウインドウを下方に引き出して「Language & Font」から設定できます。

下準備

  • 作業フォルダの作成
    ドキュメントフォルダ下に「3Dwork」などといったわかりやすい名前でフォルダを作っておき、このフォルダ下にウエイト付けするファイルや、素体などの素材を入れておくようにします。パスに日本語が含まれてはいけません。NifSkopeで開けなくなります。フォルダ構成ですが、Blenderのファイル選択画面はちょっと変わってます。親フォルダに移動するのが楽なので、参照するファイルは「3Dwork」に適当なフォルダを作成して置いておくと探しやすいです。参照するファイルとして必要なのは、胸のボーンとウエイトを持った素体(UNPBなど)、小さ目のjpgファイル(何でも可)、BBP検証用のkfファイルなど。
  • Skyrimは「体重スライダ」で0体型から1体型まで変化させることができます。その仕組みのため衣装MODや防具MODを展開すると0体型用と1体型用の二つのメッシュがセットで入っています。ファイル名の末尾に「_0.nif」か「_1.nif」の付いたファイルがそれです。以後XXXXX_0.nif、XXXXX_1.nifと表記しますが、それら二つとも作業フォルダに入れておきます。
  • ツールを参照してツール類(Blender 2.49b、Blender 2.6.x、PyFFI、NifSkope)をインストールします。Blender 2.49bはnifファイルのインポート・エクスポートに必要です。Blender 2.6.xは_0.nif体型を_1.nif体型にモーフィングするのに使います。Blenderの使い方はBlender2.49b以前のFAQなどを参照してください。また、初期設定として起動時のカメラや照明、キューブの削除と初期設定の保存などもしておきます。また、2.49bの環境設定は上のバー(「i」という字が見える)の下の境にカーソルを持って来てカーソル形状が上下矢印になったら左ドラッグでパネルを引き出すことができます。
  • PyFFI Nif Fix 0.3(Blenderで出力後のNifをある程度までSkyrim用に自動編集するPytonスクリプト。ツール参照)はPython 3、PyFFI py3kが必要で、Blender 2.49bの環境(Python 2.6.x)とぶつかるので、私は別パソコンに構築しました。一つのPCに共存するには「複数バージョンのPythonをインストールする」といった工夫が必要です。
  • PyFFI Nif Fix 0.3の改造
    PyFFI Nif Fix 0.3は自動的にBSLightingShaderPropertyとNiAlphaPropertyを追加しますが、BBP化だとこれらはオリジナルから移植するのでこの処理は不要です。数多くBBP化する場合少しでも手間を減らしたいので、PyFFI Nif Fix 0.3.pyをエディタで開き、259行目「#アルファの追加」~281行目「#ファイル書き出し」の前の行までを削除し、「PyFFI Nif Fix 0.3 for BBP.py」として保存します。
  • NifScriptの改造
    NifScriptをインストールしたら「Blender 2.49bインストールフォルダ\.blender\scripts\bpymodules」にある「nif_common.py」の870行辺りのmin_val = 4, max_val = 18 を min_val = 4, max_val = 30とmax_valを大きな値に書き換えます。

_0.nifの下準備(おっぱいボーン付き素材の作成)

  • オリジナルの保存、NifSkopeで開く
    XXXXX_0.nifをXXXXX_0_Original.nifという名前で複製し、NifSkopeで開きます。普通にNifSkopeがインストールされていればnifファイルをダブルクリックすれば開かれるはずです。さらにおっぱいボーンを持つnifファイル(UNPBなど)のnifも同様にfemalebody_0_Original.nifという名前で複製し、NifSkopeで開いておきます。
  • おっぱいボーンをコピー
    UNPBの方から「NPC L Breast」と「NPC R Breast」をブロックコピー(Ctrl-C)して、コピー先のルート(Block Listの一番上)にブロックペースト(Ctrl-V)します。

  • コピーされたボーンは名前が変わってしまうので、元ファイルのボーンの名前をコピー(ボーンを選択し、Block Detailsのstringを右クリック>Edit String Index選択>文字BOXの中の文字列を全選択、コピー)して…

  • ペーストした先の新ボーンを、先と同様に(ボーンを選択し、Block Detailsのstringを右クリック>Edit String Index選択>文字BOXの中の文字列を全選択)してペーストして、同じ名前に書き換えます。

  • 両胸のボーンがコピーできたら次はNiHeaderのユーザーバージョンの変更をします。まず、表示モードを現在のツリーモードからリストモードに変更します。

そして、UserVersion 12 →11、UserVersion2 83 →34 と書き換えます。

書き換えたら、次の作業のためにツリーモードに戻しておきます。

  • XXXXX_0_BoneAdd.nifとしてセーブし、XXXXX_0_BoneAdd.nifを再ロードします。すると、ユーザーバージョンに合わない余分な項目がルートからはじき出されるので、それらをCtrl+Delでブロック削除します。

削除したら上書きセーブします。

  • このあとBlenderでこのファイルをインポートしますが、そのときエラーがでて読み込めない場合は、Blenderのログファイルを読み、指摘されたNifツリーをブロック消去します。あとで戻す必要があるので削除した項目は覚えておきます。

_1.nifの下準備

  • おっぱいボーンをコピーしない以外は上記「_0.nifの下準備(おっぱいボーン付き素材の作成)」と同様です。箇条書きにすると
    XXXXX_1.nifをXXXXX_1_Original.nifにリネーム。NifSkopeで開く
    NiHeaderの次の項目の値を変更(UserVersion 12 →11、UserVersion2 83 →34)
    XXXXX_1_BlenderLoadable.nifとしてセーブ、再ロード
    余分を削除、セーブ

ウエイトコピー元の下準備

  • UNPBのfemalebody_0.nifを、上記「_1.nifの下準備」同様にしてfemalebody_0_BlenderLoadable.nifを作成します。

Blenderへインポート、ウエイトコピー、_0.nifエクスポート

Blender 2.49bでの作業です。Blenderを開いたら画面上に何も無いことを確認してください。キューブやカメラなどがある場合は「a」キーを押して全部選択したのち「x」キーで削除します。「a」キーは押すたびに全選択⇔全選択解除を繰り返します。現在のモードは「Object Mode」になっています。画面は縦に並んで大きく3つに分かれています。「i」「#」「〓」と書かれています。画面の枠は境目にマウスカーソルを持ってくると上下矢印になりますので、移動させることができます。また、「i」や「〓」画面の中はホイールボタンのドラッグで上下左右にスクロールさせることができます。
  • レイヤー1に_0.nifファイルをインポートします。「View Select Object」という文字が並んだバーの真ん中あたりに「田田田田田」という感じに四角いボタンが2列10個並んでいます。一番左上のボタンを押すとレイヤー1に切り替わります。ショートカットキーは「1」キー(テンキーではない方)。上のバーの「File」メニューからImport>NetImmerse/Gamebryo(.nif & .kf & .egm)をクリック。ファイル選択画面になるのでフォルダ移動し、XXXXX_0_BoneAdd.nifを選択、Import NIFボタンを押します。次にインポートオプションが出るので「Restore Default Settings」ボタンを押した後OKボタンを押します。ファイルが取り込まれ、画面にオブジェクトが表示されます。もし、この時点でエラーが出た場合はエラーコンソール(Blenderというタイトルの付いたDOS窓のようなウインドウ)を参照してエラーの原因を探します。ほとんどの場合、Nifscriptsが読めない要素が入っているためで、その要素をNifSkopeで取り除いてから再度インポートします。
  • ボーン削除と親クリアをします。Skyrimのメッシュを扱うときはBlenderに何かをインポートしたら、必ずボーン削除、親クリアをする必要があります。
    ボーン削除は、横に伸びた棒のどれかを右クリック、選択されてピンクになったら「x」キーで削除します。

「a」キーを押して全て選択して、「Alt-P」キーを押して親をクリアします。

  • レイヤー2にXXXXX_1_BlenderLoadable.nifをインポートし、ボーン削除、親クリアします。レイヤー2への切り替えは、「田田田田田」の左上2番目のボタン、または「2」キー(テンキーじゃない方)です。

  • レイヤー3にウエイトのコピー元(UNPBのfemalebody_0_BlenderLoadable.nif)をインポートし、ボーン削除、親クリアします。インポートしたメッシュがウエイトコピー先のメッシュと位置が合わない時は、メッシュモードで位置合わせをします。UNPBのメッシュはUNPと位置が違うので、位置合わせが必要になります。
    位置合わせをするには、まずレイヤー3を選択します。視点を変更するにはマウスのホイールボタンを押しながら3D画面をドラッグします。ホイールの回転で視点の拡大縮小ができます。Shiftキーを押しながらホイールボタンでドラッグすると視点は平行移動します。Ctrlキーを押しながらテンキーの「1」を押すと正面からの視点になります。反応しない場合はマウスカーソルが3D画面上にあるかを確認してください。見やすい位置にしたら右クリックでオブジェクト、この場合だと女体を選択します。輪郭がピンクになり、選択されたことが分かります。
    位置合わせする相手を表示するため、Shiftキーを押しながらレイヤー1を選択します。するとレイヤー3とレイヤー1が同時に表示されます。次に、画面の下の方の「View Select Mesh」のメニューが並んだバーの「Object Mode」を「Edit Mode」に変更します。Tabキーを押してもいいです。Tabキーの場合はもう一度押すと直前のモードへ戻ります。「Edit Mode」になると、選択されたオブジェクトが黄色い点と線の網で表示されます。この状態では黄色い点が選択された頂点、ピンクが選択されていない頂点です。頂点を一つだけ選択するには右クリックを使います。全ての頂点を選択するには「a」キーを使います。「a」キーは何度も押すと全選択⇔全選択解除を繰り返します。キーを押しても反応がない場合はマウスカーソルが画面内にあるか、漢字モードなっていないか確認します
    Edit Modeで移動したいメッシュの頂点を全て選択して、中央あたりに出た赤い矢印と青い矢印をマウス左ボタンでドラッグして位置を合わせます。直前の操作を取り消すには「Ctrl+z」でアンドゥできます。間違って何かのキーを押してコマンドに入ってしまったら「esc」キーでキャンセルできます。
    ウエイトのコピーが目的であれば、だいたいの位置が合っていれば十分です。

  • これまでの作業で、レイヤー1には_0メッシュ、レイヤー2には_1メッシュ、レイヤー3にはUNPBの_0メッシュが配置されています。次に_0メッシュにウエイトをコピーする作業に入ります。
    「Object Mode」に戻り、レイヤー1を選択します。図のように胸元を露出した衣装の場合、乳揺れする部分は衣装とボディーの二つあります。まず衣装を右クリックで選択し、「Edit Mode」に入ります。全ての頂点が選択されていると思いますが、「a」キーで一度全ての選択を解除してピンク色にします。頂点を範囲選択できるコマンドを使います。その前に真横から見た視点にしたいので、テンキーの「3」を押します。「b」キーを一度押すと十字のカーソルに変わります。さらにもう一度「b」キーを押すと今度は円のカーソルになります。マウスホイールで円の大きさを変えられます。左クリックすると円の範囲内の頂点が選択されて黄色に変わるので、ちょうど胸の範囲くらいに調節して揺らしたい部分を選択します。現在のモードでは奥行きや重なりに関わらず、円内の頂点全てが選択されますので、正面から胸を選択すると胸だけでなく背中の頂点まで選択されてしまいます。ホイールボタンを押すと範囲内の頂点の選択を解除します。余計な部分を選択してしまったらホイールボタンで選択解除します。選択し終わったら「esc」キーでコマンドから抜けます。

  • 「Tab」キーを押し「Object Mode」に戻ります。このモードに戻っても選択した頂点の状態は変わりありません。試しに「Edit Mode」にしてみると、胸の頂点が黄色く選択されたメッシュが表示されます。
    「Object Mode」に戻ったら、今度はボディーを選択し、上記同様に胸回りの頂点を選択します。終わったら「Object Mode」に戻りましょう。

  • ウエイトをコピーします。複数選んだオブジェクトのうち、一番最後に指定したオブジェクトがコピー元になり、残りのオブジェクトすべてにウエイトがコピーされます。まずコピー先のオブジェクトを選択します。複数指定できます。レイヤー1で「a」キーを押して全選択します。次にコピー元を指定します。レイヤー3を表示し「Shift」キーを押しながらボディーを右クリックします。最後に「Shift」キーを押しながらレイヤー1を選択すると、レイヤー1とレイヤー3が一緒に表示され、コピー元とコピー先のオブジェクトが選択された状態になります。
    「最上部のバーの左端に「i」と書かれたドロップボックスがあります。クリックして「Scripts Window」を選びます。

  • 「Scripts」>「Object」>「Bone Weight Copy」を選びます。

  • Quality:3、Update Selected と設定して、OKを押します。エラーが出なければウエイトのコピーは完了です。

  • 各パーツにマテリアル設定します。 設定するのは「UV」と「テクスチャ」です。まず、レイヤー1でドレスを選択します。下の「Panels」のバーの「Shading(F5)」ボタンを押し、同じ並びにある「Material buttons」を押したら、下のパネル内にある「Links and Pipeline」という枠内にある「Add New」ボタンを押します。

  • すると、パネルがたくさん表示されるので右端の「Texture」という枠(画面外にあるときは、ホイールボタンでスクロール)にある「Add New」ボタンを押します。

  • すると「Texture」の枠内にタブが3つ出てきます。その中の「Map Input」を選び「UV」というボタンを押してください。

  • 次に、バーの中の「Texture buttons(F6)」ボタンを押します。「Texture」と書かれたタブ内に「Texture Type」という文字があり、その下にリストボックスがあります。そこから「Image」を選択してください。

  • すると右側に「Image」という枠があらわれますので、「Load」ボタンを押します。

  • ファイル選択画面がでますので、なにか適当な画像を選択します。後で置き換えられるのでなんでもかまいません。画像を選択した、という設定が必要なのです。

  • これで、ドレスへのマテリアル設定は完了です。ほかのオブジェクトにもマテリアルを設定しなくてはなりません。先ほど作ったドレスへのマテリアル設定を流用します。まず、中央の3D画面でボディーをマウス右クリックで選択します。ボディーにピンクの輪郭線が付きます。その状態で下のパネルの「Material buttons」を押します。「Add New」リストボックスの左側上下三角を押すと、今まで作ったマテリアルが表示されます。今は一つだけですのでそれを選択すると、ボディーへのマテリアル設定ができます。

  • すべてのオブジェクトにマテリアルを設定し終わったら_0メッシュの作業は終わりです。Fileメニューから「XXXXX_0_AllInOne.blend」と名前をつけてセーブします。

_0メッシュをエクスポート

  • 今はオブジェクトモードになっているはずです。この状態でレイヤー1を選択します。もし、選択されてピンクの輪郭が付いているオブジェクトがあったら「a」キーを二度押し(すべて選択されていたら一度押し)してすべての選択を解除してください。次に、ボーンをインポートします。メッシュをインポートしたときに削除したボーンですが、メッシュをエクスポートするときはボーンをつけて出力します。FileメニューからImport>NetImmerse/Gamebryo(.nif & .kf & .egm)を選択します。
  • ファイル選択画面で「XXXXX_0_BoneAdd.nif」を指定、次のオプション画面で「Import Skeleton Only + Parent Selected」押したのち「OK」を押します。すると「XXXXX_0_BoneAdd.nif」からボーンのみが読み込まれて3D画面にピンクの横棒が複数表示されます。
  • 「a」を2回押しして全選択します。
  • 「Shift」キーを押しながらボーンを選択(右クリック)します。ボーンが薄いピンクに変化します。
  • 「Ctrl-P」を押し「Armature」を選択
  • 「Don't Create Groups」を選択

  • これでボーンがインポートできました。今は全選択された状態ですので、このままエクスポートします。「File」メニューからExport>NetImmerse/Gamebryo(.nif & .kf & .egm)を選択します。ファイル名に「XXXXX_0.nif」を指定します。次のオプション画面では「Fallout 3」押してから、「Stripify Geometries」「Stitch Strips」「Smoothen Inter-Object Seams」「Flatten Skin」「Use BSFadeNode Root」をオフに、「Max Bones」を最大値にします。


_1.nif体型へモーフ

Blender 2.68で、全てオブジェクトモードでの作業になります。

  • Blender 2.68を立ち上げて、「File」メニューから「Open」を選び「XXXXX_0_AllInOne.blend」をロードします。レイヤー2を表示し、右クリックで衣服を選択します。レイヤー2にあるのは_1.nifのメッシュです。

  • 次にレイヤー1を表示し、同じ衣服を「Shift」を押しながら右クリックで選択します。もし、間違ってボディーを選択してしまったら、一つ前の「レイヤー2」からやり直しましょう。ここでは選択する順番が大事です。_1メッシュの後に_0メッシュが追加選択される必要があります。

  • そして「Shift」を押しながらレイヤー2選択します。レイヤー1とレイヤー2が同時に表示されます。

  • いよいよモーフィングです。「Data]-「Shape Keys」パネルの「▼」から「Join as Shapes(形状として結合)」を選択します。この時点で「選択中のメッシュの頂点数は同じでないといけません」エラーが出た場合、Blender 2.49bでの作業で頂点を削除したりするミスが考えられます。

  • ShapeKeysの囲みの中に二つ項目(基本ノイズ、BarKeeperTorso.00)ができるので、下の方を選ぶとName:の下に棒グラフが出ます。それを右いっぱいスライドすると_0メッシュが変形して_1メッシュと同じ形状になります。

  • 次にボディーを処理したいところですが、衣服が邪魔です。「隠す」機能を使いましょう。今はレイヤー1とレイヤー2が同時に表示され、_0メッシュと_1メッシュが両方選択された状態です。「h」キーを押してください。選択された衣服が非表示になります。

  • この機能はBlender 2.49bでも使えます。先ほどの「ボーンウエイトコピー」する前のメッシュの編集でも、この方法を使って処理済みオブジェクトを隠していけば、処理漏れしにくくなります。
    残りのパーツにも同様にモーフ処理をしていきます。すべてのパーツの処理が終わったら「Alt-h」で全て表示し、レイヤー1を選択して表示させ、「a」で全選択解除してください。

  • 最後に保存です。「File」メニューから「Save-As」でオプションの「Legacy Mesh Format」にチェックを入れ、「XXXXX_1_v268.blend」としてセーブします。

_1.nifファイルへエクスポート

Blender 2.49bでの作業です。

  • Blender 2.49bの「File」メニューから「XXXXX_1_v268.blend」を開きます。確認を求められるので、OKを押してください。
  • 「_0メッシュをエクスポート」の手順でボーンをインポートして「XXXXX_1.nif」としてエクスポートします。

メッシュの並べ替え、Skyrim形式への変換

PyFFI Nif Fix 0.3 for BBP(Python 3、PyFFI py3k必要)の作業です。私はPyFFI Nif Fix 0.3はバージョン違いのPythonをインストールするのに別パソコンを使いましたので、その環境での説明になります。PyFFI Nif Fix 0.3 for BBPはPyFFI Nif Fix 0.3を改造してBSLightingShaderPropertyとNiAlphaPropertyを追加しないようにしたものです。無改造のPyFFI Nif Fix 0.3でも同じ作業になります。

  • PyFFI Nif Fix 0.3 for BBPを用意した別パソコンにXXXXX_0.nif、XXXXX_1.nifを転送します。次にPyFFI Nif Fix 0.3 for BBPを起動し、ファイル選択画面でXXXXX_0.nifを選択します。すると「ノードを並び替えてください」というダイアログが出るので、そのまま「OK」を押します。

  • 「変更後のBodyPartIDを入力してください」はデフォルトの「32」のままでオーケーです。「OK」を押すと処理がなされて、元のファイルに上書きして終了します。

  • XXXXX_1.nifも同様に処理します。「パーツの順序の並べ替え」はソートされているのでXXXXX_0.nifもXXXXX_1.nifも同じ順序になりますが、もしオリジナルと同じ順番にしたい場合は手動でうごかします。そのときXXXXX_0.nifとXXXXX_1.nifは同じ順序にパーツが並ぶようにしなくてはなりません。
  • 処理が終わったXXXXX_0.nifとXXXXX_1.nifを元のパソコンに転送します。

Skyrim仕様にNifデータを戻す

NifSkopeでの作業です。「_0.nifの下準備」でBlenderに合わせて削除したり変更した部分を戻します。「UserVersion 11 →12、UserVersion2 34 →83」はPyFFI Nif Fix 0.3が処理済みなので、戻す手間が省けています。
  • 返送された「XXXXX_0.nif」、「XXXXX_1.nif」をNifSkopeで開き、さらに「XXXXX_0_Original.nif」もNifSkopeで開きます。
  • 削除したNifツリーを元ファイルからブロックコピー&ペーストします。「BSLightingShaderProperty」、「NiAlphaProperty」、「INVツリー」などです。「BSLightingShaderProperty」は元のNifファイル「XXXXX_0_Original.nif」の「Block List」の枠内にある「NiTriShape」のツリーの下にあります。ツリーの展開は小さい三角「▽」をクリックです。マウスの右クリックでBlock>Copy Blanch、または「Ctrl-C」キーでコピーできます。「XXXXX_0.nif」、「XXXXX_1.nif」にも同じ「Value」を持った「NiTriShape」がありますのでそのツリーにペーストします。すると今まで無地だったオブジェクトにテクスチャが張られて色が付きます。また、「NiAlphaProperty」も同じツリーにありますがこれは透明部分の指定ですので、無い場合が多いです。これをペーストすると、衣服の裾などの形状にほつれなどの表現が追加されたりします。
  • 無改造のPyFFI Nif Fix 0.3を使った場合は「BSLightingShaderProperty」と「NiAlphaProperty」はPyFFI Nif Fix 0.3が適当なデータを挿入しているので、「XXXXX_0.nif」、「XXXXX_1.nif」から削除してからの作業になります。
  • INVツリーなどは名前も元ファイルと同じに変更します。
  • 肌のNiTriShape > NiTriShapeData > BS Num UV Sets の値「4097」を「1」に変更します。
  • 「XXXXX_0_Original.nif」とよく見比べて違うところが無いか確認したら「XXXXX_0.nif」、「XXXXX_1.nif」を上書き保存して終了です。

以上で、BBP化の作業は終了です。元のMODのメッシュと交換してインストールし、ゲームを起動して確認します。

今後の予定

「UNP Female Armors - UNP Armors version 2_1」の服(Clothes)はすべてBBP化してみたのですが、一筋縄ではいかないものもありました。そういった難物をBBP化する話題を補足として記事にしたいと思っています。解決には先人がネットに書き残してくれた情報にずいぶんと助けられました。この場を借りてお礼を申し上げます。

とりあえず、誰かの役に立つかもしれないので手元のメモからそのままコピーして貼り付けておきます。

  • 乳揺れの確認
(使用スケルトンは"UNP BBP Scale Skeletons Fixed-7524-1-1.7z")
 レイヤー1で全選択
 インポートNif「skeleton_female_bbp_blender.nif」
  「Import Skeleton Only + Parent Selected」押す
  「Keyframe File:」に「SkeletonBreastAnime.kf」指定
 タイムラインパネルでプレイボタン押す
 関係ないところが動いたり、中身が飛び出していないかチェックする
 終わったら、元ファイル(XXXXX_0_AllInOne.blend)ロードし直す

  • ゲーム上でテスト ゲーム起動してすぐに確認できる方法
  メッシュのフォルダが分かっている装備に着替えておき、ゲームセーブしておく。
  そのフォルダを開き、当該メッシュを安全な場所に保存しておく。
  テストしたいメッシュの名前を、当該メッシュ名にリネームして上書き。
  ゲーム起動。
  コンソールで「showracemenu」。重量は左端から右端まで試す。_0.nifと_1.nifのメッシュの順番が入れ替わっていれば、中間重量でメッシュが崩れる。
Blenderで崩れるケース…モーフ後にメッシュの数を変えた(追加、削除、分割etc)。モーフ後にボーンウエイトコピーした。
PyFFI Nif Fix 0.3で崩れるケース…パーツの順番を間違って指定した
NifSkopeで崩れるケース…メッシュの削除、順序変更、ツリーのコピペ時に間違った

  • ウエイトペイントのテクニック
他のメッシュに隠れた部分を塗る方法
複数のウエイトが重なって、動きが悪くなり、肌が服から飛び出す場合
ボーンをインポートして、不具合のあるポーズを取らせながらウエイトペイント
ボーンが削除された状態でウエイトに関わる頂点グループの指定する方法(アウトライナーを使う方法、「Shift」+左クリックの方法)
ウエイトをスポイトコマンドみたいにメッシュから読み取る方法(「Ctrl」+左クリックの方法)

  • おかしな影の原因
Showracemenuで重量スライダを動かすと、_0.nif~_1.nifの間でモーフィングするのだが、重量0~0.9までは_0.nifの法線がつかわれているっぽい。そして重量1になったときメッシュも法線も_1.nifのが使われるのだけど、影の付き方ががらっと変わるのに悩まされていた。
どうも、NifScriptsの問題のようだ。
まず、以下の記事を参考に重なっているメッシュが問題だと分かった。
http://izumokog.blog.fc2.com/blog-entry-90.html
メッシュが重なっているところを0.001ずらしてみたところ、いままで悩まされていたおかしな影が無くなった。
しかし、この方法では重なったメッシュ一つ一つに対処しなくてはならない。
Blender 2.49bのプラグインの「export_nif.py」のソースを眺めていたら、次のような記述があった。
(略)
「# set normals on shared vertices」とあるところで、座標の一致した頂点の法線をコピーしているっぽい。「self.EXPORT_SMOOTHOBJECTSEAMS」はスイッチか?
Nifscriptsのエクスポートオプションを見ると「Smoothen Inter-Object Seams」というのがあった。
これをオフにしてエクスポートしたところ、おかしな影は出なくなった。

  • ウエイトペイントすると崩れる
_0.nifを作った後、_1.nifをBlender 2.68でモーフィングさせて作り、2.49bでウエイトを手動で修正するのだが、clothesのarchmage、barkeeper、beggarclothes、blacksmith、chefと問題なくできていたのに、farmclothes01でつまずいた。
_1.nifのウエイトを修正してエクスポートすると、ゲーム上で中間重量のメッシュが壊れる。いわゆる、メッシュの順番が変わった症状。
v2.68のモーフィングで作った_1.nifをウエイトをいじらないで、そのままボーンをつけてエクスポートすると壊れない。
困ったな。_1.nifは大きく揺らしたいのだが、これではできない。
仕方ないから、_1.nifでウエイトを修正するのはあきらめ、_0.nifに_1.nif級のウエイトをボーンウエイトコピーし、そのままモーフィングしたものを_1.nifとして使う。

  • メッシュの数が足りない
farmclothes03のfarmerrobef_0.nifをBBP化する作業中、Outofitのモーフィングで「選択中のメッシュの数はおなじでないといけません」とエラーになった。
どうも、インポートの時にとりこぼしているようだ。Nifskopeで見ると_0.nifと_1.nifのNiTriShapeDataの頂点数(Num Vertices)はどちらも3382。
しかし、インポートしてメッシュを編集したときに最上部にでる頂点数は_0.nifのほうが一つ少ない2481。_1.nifは2482。
試しに、一度インポートした_0.nif(メッシュが一つ少ない方)をエクスポートしてみたが、Num Verticesは3382で変わらず。頂点が消えているわけではないのか?
数千の頂点を全て比べるのは不可能で、途方に暮れたが、いくつか試した中で、メッシュ編集モードの選択メニューの「閉じてない部位(Non-Manifold)」で選択した頂点のなかで、_1.nifと数が異なる部位があった。
調べたい部分以外を、選択解除(Bコマンド、マウス中ボタン選択)して比較を繰り替えす
_1.nifで重なっている頂点が、_0.nifではマージされているようで、頂点を結合してみたが、モーフィングの段階で、数が同じなのでエラーは出ないがメッシュがめちゃくちゃになった。
その頂点だけでなく、その頂点を含む一続きの閉じてない部位を選択して、重複頂点の削除(Remove Doubles)をしたところ、どうやら頂点の順番は保たれたようで、うまくモーフィングできた。

  • _1.nifに_0.nifの足が付いてた
farmclothes04をBBP化して、ゲームで確認しているとき、足下を見たら足首でずれが生じている。
当初は、メッシュがずれたのかと思っていたが、Blenderでメッシュを移動させようと比較対象に_1.nifの素体を読み込ませて、重ねてみたら足が細かった。_1.nifに_0.nifの足が付いていたのだった。
_1.nifにそのまま読み込める足が無くて、BBP化済みのclosesから移植したりもしたが、モーフィングでめちゃくちゃに崩れる。
大元ならいいかと「UNP Body sections- Modders Resource-9221-1-5」にある「armslegs_1.nif」を使った。
farmclothes04の足からはみ出る分のメッシュを削除。_1.nifをインポートしたレイヤーに移動して、置き換えた。
Blender v268でモーフィングしたが、太ももの切り口でメッシュが崩れている。ただ、数カ所直せば使えそうだ。頂点の順番が違うためなので、頂点の位置を入れ替えれば良さそうだ。
BBP化のマニュアル通りモーフィングしたあと、足のメッシュを編集する。
移動元の頂点を選択し、メモ。テキストエディタに3座標をコピーしておく。
コピー先の頂点を追加選択(Shiftキー押しながら右クリック)
以下は「ピボットをアクティブエレメントにして s 0」の手順。
ピボットをActive Elementにする
sキー押して(Mesh-Transform-scale)
「0」(ゼロ)入力、エンターで確定
移動先だった頂点を選択するため、二度右クリック
先ほど控えておいた座標を入力(コピペ)
2頂点の交換完了
以上の方法でメッシュを修正して、_1_v268.nifとして保存。あとはマニュアル通りに。

  • ずれた体の移動量取得
扱うMODによって、同じ体型にもかかわらずインポートしたときの位置が違うことが多々ある。メッシュモードで移動して位置合わせするのだが、その移動量の取得方法。
スナップを使ってgコマンドで移動量を見る方法もある。
Blenderで表示される座標は小数点以下第4位までだが内部的にはもっと多く、表示桁を入力しても拡大してみるとずれている。
参考「[Blender/Memo]ちょっとした問題の解決法をメモ」http://ameblo.jp/niveuscornix/entry-11598094798.html
現在BBP化しているUNP Armors BBBの場合、素体に対して
x=0
y=0.2894
z=-0.3288
と表示されるが、拡大するとずれている。
表示は小数点以下第4位だが、入力は第5位も受け付けるので、試してみると
x=0
y=0.28942
z=-0.32879
で、かなり近くなった。

  • ボディーメッシュの削除、軽量化
「merchantclothes」ではボディーメッシュの隠れる部分をシュリンクさせて使っているが、露出するのはほんの一部分。
いままでBBP化作業をしてきて、安定してモーフィング出切るようになってきたので、ボディーメッシュの削除に挑戦してみた。
_0メッシュと_1メッシュを全く同じところで削除しなくてはならないが、腕や足の場合は、手首足首側からメッシュの輪っかを数えてやるとそろえることができる。今回は手首、足首とも9段数えて残りのメッシュを削除した。
できた手首足首メッシュは、G:\ErogeSinjiMydocument\Documents\3Dwork\Skyrim\UNP Meshesに「female_wrists_low_ankles_long_0_BlenderLoadable.nif」として保存した。
首回りの場合形状が複雑なので、_0メッシュで衣装から隠れる部分をシュリンクさせ、_1メッシュはその形状に合わせて仮にシュリンクさせる。選択した頂点数が同じかどうかはユーザー設定ウインドウに表示される。一度セーブし、Blender v2.68でモーフィングしてみればどこが異なるかが分かるので、v2.49bに戻って頂点の選択を修正。同一になったらいらない頂点を削除する。

  • 中間重量でテクスチャに隙間
「merchantclothes」をBBP化していてまた新たな問題が発生した。
ゲームに組み込むと、中間の重量で肩に隙間ができて向こうが透けてしまうのだ。
当初疑ったのはUVマッピング。しかし、画像に対して位置を変えたりしてみたがやはり隙間ができる。
この隙間は、重量「0」か重量「1」だとできない。0.5のとき最大になる。どうもメッシュの問題っぽいのだが、似たような現象はネットでは見当たらない。
一週間くらいあれこれ試しては挫折したが、ふとバニラのメッシュをNifskopeでみたところ、衣服メッシュが分割されておらず、一つの「Dismember partition」で構成されている。
Blenderのnifスクリプトで出力すると、必ず分割されてしまう。「Blender NIFインポート・エクスポートのチュートリアルup00332」を参考にBlenderで頂点グループを割り当てたりもしてみたが、無駄だった。
「skin partition blender」をキーワードにいままで何度も検索したが、何度か見た「SKYRIM MOD作成支援/相談スレ」(http://oblivion.z49.org/logs/skyrim_dev/1332341878.html.gz#R82)に、こんな記述があった。

82 :名無しさんの野望 sage : 2012/04/04(水) 08:04:12.34 ID:mKM0/Cip
体型modをblenderから作る場合、
SkinPartitionBlocksを正しく3つに分けるにはどうしたらいいですか?
83 :名無しさんの野望 sage : 2012/04/04(水) 10:45:00.10 ID:rTNRimYc
82
NifScript弄らないと難しいんじゃないかな

多分femalebody_0.nifとかでSBP_32_BODYが二つになっちゃう件だと思うんだけど
FO3の仕様なのか知らないけどMaxBonesが最大18になっててこれを超えると勝手に分割されちゃう
nif_common.pyの870行辺りの
min_val = 4, max_val = 18,

min_val = 4, max_val = 30,
とかにすればいい もちろんエクスポートのconfig画面のMax Bonesも増やさないとダメ

Nifスクリプトが勝手に分割しているっぽいのは気がついていて、ソースを眺めようと思っていたが、「nif_common.py」にその設定があるとは、この書き込みがなければ分からなかっただろう。
ソースを書き換えて、エクスポート時にMax Bonesも増やしてエクスポートしてみると、SkinPartitionBlocksは一つになり、ゲームに組み込んでみると隙間は無くなった。

  • できるだけメッシュを結合
「Skyrim:BBP化>ボディーメッシュの削除、軽量化」で、首回りと手、足のメッシュは別々のところから持って来たので、エクスポートすると、肌のメッシュが2つのNiTriShapeになる。
Blenderで、これらのメッシュを「Ctrl+J」で結合しておけば、一つのNiTriShapeになるので、NifSkopeでのコピペ作業も楽になる。

  • 自作の部分ボディーモデルでデータ肥大化2
さんざん試してみたが、一度nifスクリプトでインポートしたメッシュを再度nifでエクスポートすると、肥大化するのは避けられないようだ。しかも再度インポートするとフラット面になってしまう。
一度Nifスクリプトで取り込んだNifファイルを後で再利用するには、必ずBlenderファイルで保存するのを鉄則にするべきだ。
Blender形式のファイルからオブジェクトを部品として再利用するには、ファイル>ライブラリ(Shift+F1)。
「Object」を選び、オブジェクトの名前を選択する。このときに出る名前は、「リンクとマテリアル」パネルでつけられたオブジェクト名。また、配置するレイヤーを「Active Layer」ボタンで指定できる。指定しなければ元いたレイヤーに配置される。

添付ファイル