テクスチャ変更MODの制作チュートリアル
TEXT by Regard
※このページは書きかけのページです。
このページはFemale Real TextureおよびRegard FemaleCostumeの制作過程などで収集した制作関連の情報を元に、これからテクスチャ差し替えによるMOD制作を行う人に向けてまとめたものです。
==チュートリアル全容==
# テクスチャMOD基礎知識
# 必要なツールの準備
# NifSkopeでの下準備
## 適当なメッシュを探す
## UVマップテンプレートを取り出す
# 画像ソフトでテクスチャを作る
## UVマップに合わせて作成する
## アルファチャンネルを理解する
## テクスチャをDDSでエクスポート
## ノーマルマップを作る
## ノーマルマップをDDSでエクスポート
## DDSエクスポートの注意点(Mipmap)
# NifSkopeでの仕上げ
## テクスチャファイルを差し替える
## アルファプロパティを調整する
## ゲーム内で利用するアイコンを作る
# CSでのMOD作成
## 販売用NPCを作る
*** 配置
*** Dialogの設定
*** AIの設定
*** 番外編:顔を移植する
## コンテナを作る
*** 配置
*** オーナーシップを設定する
*** 鍵をかける
# デバッグ
==テクスチャMOD基礎知識==
さて、まずは具体的なテクスチャ張り替えによるMODの動作原理について説明していきます。
Oblivionでは3Dモデルの取り扱いにおいてメッシュ(Mesh:ポリゴンの形状データ)とテクスチャ(Texture:ポリゴンに貼り付ける絵)に分けて管理しています。
メッシュデータおよびそのメッシュが利用するテクスチャの情報はnif形式で格納されており、Oblivion\data\meshes以下に配置されています。テクスチャの実体データはDDS(Direct Draw Surface形式)形式で格納されており、Oblivion\data\textures以下に配置されています。
nifファイルではtextureの『参照先』をパスとして記録しており、そのパスに示されたDDSファイルがテクスチャの実体として読み込まれて表示に利用される仕組みになっています。
何となく予想が付いたと思いますが、もともとのnifファイルで参照しているDDSファイルと同名別内容のDDSファイルを作って差し替えてしまえば、テクスチャ差し替えが出来るわけです。
テクスチャ張り替えMODの場合、自分が実現したい「形」に近いメッシュを探してそれを元に流用するというスタイルになります。実例は後で挙げますが、テクスチャには『透過』という機能があり、3Dモデルの形がそのまま表示されるわけではなく、不必要なメッシュ部分に透過テクスチャを貼り付けることによって見た目をある程度は変更することが出来ます。
===テクスチャサイズのお話===
DirectXのプログラムをやった人や、Oblivionの高画質テクスチャMODをつかったコトのある人は気づいてると思いますが、テクスチャのサイズというのはデフォルトで決められたサイズから変更することが出来ます。
少し詳しく解説するとプログラム内部でテクスチャを処理する際には、オブジェクト毎で利用するテクスチャのサイズが違うため、必ずテクスチャのサイズを確認して相対値で処理を行います。
ですから、システム的になんの変更を加えなくてもテクスチャを単に大きなモノ(小さくてもいいですが)に差し替えるだけで反映されます。
テクスチャサイズを変更するにあたって注意すべき点は一つだけで、一片の長さが2n乗数である正方形にする必要があるということです。具体的に言えば実用的なテクスチャサイズは128, 256, 512, 1024, 2048, 4096です。
単純に既存のものの解像度を4倍(辺長を2倍)にしてもテクスチャの品質は向上しないので、テクスチャのサイズアップ時にはほぼ一から作り直しになると考えてください。といっても参考になる既存テクスチャがあるのでかなり楽に作成できますが。
===4096テクスチャは必要か?===
貼り付ける対象の大きさ次第ですが必要です。ってかまだ足りないです。
Female Real Textureを例に具体的な話をすると、乳首ではテクスチャサイズが4096でもテクスチャソースが乳首に占める大きさというのはせいぜい100ピクセル四方も無いぐらいです。
この100ピクセル四方しかないテクスチャを貼り付けたモデルは、SS撮影のタメに思いっきり寄ると画面内での表示は200ピクセル四方程度に引き延ばされてしまいますので、元テクスチャ情報の1/3~1/4の情報密度しか再現できないコトになります。
これが2048テクスチャだとさらに1/4されるわけですから、リアリティなんてどっか吹っ飛びます。
なのでこの場合は理想を言えば画面表示ピクセル<テクスチャサイズになる8192テクスチャが必要。ただし、この場合は256MBもの元データ量があるためVGAカードのVRAM容量が2GBとかの時代が来たら使えそうです。(実際はテクスチャは圧縮されてるのでそこまでいらないけど)
とまぁここまで筋違いな話を展開しましたが、実際の所はテクスチャの共用化をやめてモデルデータからきちんと適切なUVマップを展開してやれば4096テクスチャで解決できる問題です。
ただ、そんな根性はないので当面は無理ですけど。
==必要なツールの準備==
さて、ここからは具体的な制作のお話を始めます。まずは、テクスチャ作成に必要なツールを揃えましょう。
# 画像編集ソフト(PhotoshopもしくはGIMP推奨)
# DDSプラグイン
# **[http://www.niftools.org/wiki/index.php/NIF_File_Format_Library_and_Tools NifSkope]**
先ほど説明しましたが、テクスチャの形式はDDS形式というあまり一般には見かけない形式を使っています。
テクスチャ作成においてはこのDDS形式を読み書きできるプラグインの導入が必須となり、具体的にはNVIDIAがPhotoshop向けに提供しているNVIDIA Texture Tool Photoshop Pluginか、同プラグインのGIMP向けオープンソース版のGIMP DDS Pluginを利用します。
最初にDD形式について少し解説しておきます。DDS形式の正式名称はDirect Draw Surface形式というものでDXT1~DXT5までの5種類のフォーマットがあり、用途ごとにフォーマットを選択します。
Oblivionでは**メインテクスチャにDXT3形式**、**ノーマルマップにDXT1形式**を使います。
現実的にはGIMP+GIMP DDS Pluginの組み合わせが無料で利用できるため、多くの人はこの組み合わせで作業することになると思います。
筆者はもともとPhotoshopを使っているので制作作業はPhotoshopで仕上げ行程にのみGIMPを使っています。
実はNVIDIAが提供しているPhotoshopプラグインでは大きなサイズのテクスチャ利用を想定していないようで、2048サイズまでのものであれば問題ないのですが、4096サイズのものは保存に失敗してしまい使えません。
逆にオープンソース版のGIMP用プラグインは完成度が高くそのような制限は無いため、全てGIMPで作業する方が効率的です。
また、ノーマルマップ作成のためのフィルタもGIMP版の方が優秀だったりします。
最後にNifSkopeです。これはOblivionで利用されているnif形式のファイルビューア&エディタで、テクスチャの差し替えや、後述するUVマップのテンプレート出力で利用します。
==NifSkopeでの下準備==
===適当なメッシュを探す===
まずは元となるメッシュを探す作業です。
これはNifSkopeを使って根気よく探すしかありませんがいくつかポイントを挙げておきます。
# ゲーム内に出てくるアイテムの場合は、CSを使って参照しているnifを見つけることが出来ます。
# 望むメッシュと全く同じものが見つかることはないので、テクスチャを張りたい部分がメッシュとして覆われているものを流用しましょう。(例:ノースリーブのシャツを作るために既存の半袖シャツのメッシュを流用して不必要な部分は透過テクスチャで消す)
# NifSkopeで余計なメッシュ部分を消すことが可能ですので、例えば肩当てが付いた鎧の肩当て無しヴァージョンを作ることが出来ます。
===UVマップテンプレートを取り出す===
さて、適当なメッシュは見つかったでしょうか?うまく見つけられたなら、今度はUVマップのテンプレートを取り出す作業です。
UVマップとはなんぞや?という人はググってください。簡単に言えばポリゴンの表面にどのようにテクスチャを位置あわせさせるのかを定めたものです。
このマップ情報を平面化してテクスチャ作成の元にしたものがUVマップテンプレートです。
今回はFemaleCostumeでつかったAleanne氏作の[http://www.tessource.net/files/file.php?id=7166 Clothes and armor pack for Corwyn Fantasy Figures]に含まれるGothic Underwear(vounderwear.nif)というメッシュを利用することにしました。
※注意:TESSourceのMOD作者は寛容な人が多く、大抵のMODの再利用を認めてくれています。その場合の条件は元MODのreadmeなどに記載されており、大抵はCreditに名前と元になったMODを書くことぐらいしか条件になっていません。今回のAleanne氏のMODももともとはGrowlfのメッシュを元にしているそうです。
では、具体的な作業に入ります。まず先ほど特定したvounderwear.nifをNifSkopeで開いてみてください。
次のような表示になると思います。

まず左側ペインのツリー表示になっているところに着目してください。**0 NiNode**が一番の親要素で、その下に子要素が存在しています。
メッシュは0 NiNodeの直接の子要素として定義されることになっており、そのノード名は**NiTriShapes**か**NiTriStrips**です。
モデルによっていくつかの子要素が含まれる場合がありますので、その要素を順番に左クリックしてみてください。選択した要素は右のレンダリングペインで白いワイヤーフレーム表示となって選択中のメッシュを示してくれます。
目的のメッシュ部分が見つかったら、その子要素を右クリックして【Texture→Export Template】とたどってください。
これはnifファイルに含まれるUVマップの情報をワイヤーフレーム化して出力してくれる便利な機能です。

そうすると次のような出力先を指定するダイアログが出てきます。

ここで注目して欲しいのが【Size】です。これはテクスチャの辺長を示しており、デフォルトでは512になっています。これを自分で作ろうとするサイズに合わせて変更してください。
今回は1024を選びましたが、キレイに作るなら2048もしくは4096の指定をしてください。
出力されるのはTGAフォーマットの画像ファイルです。見慣れない形式ですがGIMPやPhotoshopで扱うことが出来ます。
実際にvounderwearから出力したUVマップテンプレートは次のようなイメージでした。分かりやすくするために背景を黄色にしていますが、実際には白背景です。

これでテクスチャを作る準備が整いました。後はGIMPやPhotoshopで塗り描きしていくことになります。
==画像ソフトでテクスチャを作る==
===UVマップに合わせて作成する===
===アルファチャンネルを理解する===
===テクスチャをDDSでエクスポート===
===ノーマルマップを作る===
===ノーマルマップをDDSでエクスポート===
===DDSエクスポートの注意点(Mipmap)===