まどかぱ〜く!掲示板
[新規順タイトル表示] [ツリー表示] [新着順記事] [留意事項] [ワード検索] [過去ログ] [表示色変更] [管理用]

  [No.817] Re: ネプテューヌmk2とVのtidファイルの変換 投稿者:まくちゃん  投稿日:2012/09/21(Fri) 22:45:36

どうも。
ネプテューヌmkII、Vに使われているTIDファイル自体は圧縮や暗号化がされていなく画像は1ファイルに1枚のみなので簡単です。
基本的にデータ部分がDXTなのでヘッダ領域を解釈すればDDSファイルに変換できます。

以下のことは私の解釈なので間違いや足りないものがあると思います。

※TIDデータはPS3なのにビッグエンディアンです。

■ファイル構造
1. ヘッダ
2. データ情報
3. イメージデータ
の3つで構成されています。

■ヘッダは32byte or 16byteの2種類があります。

※このBBSシステムだとCの構造体が書けないので書き方を変えてます。

// TIDヘッダ構造体
struct stTID_HEADER
 u32 Signature;    // TIDx
 u32 FileSize;     // ファイルサイズ
 u32 DataOffset;   // データ先頭オフセット
 u32 n4;        // 謎
 u32 Flag;;       // 01 or ファイル名
 u32 NameOffset;  // ファイル名文字列先頭オフセット
 u32 n7;        // pad?
 u32 n8;        // pad?

■Signatureはアスキー文字でTIDが入ります。
4byte目の1byteはデータフォーマットとして解釈できます。

0x81:DXT1 or DXT5
0x83:32bit RGBA
0x87:32bit RGBA 高速転送用
0x89:DXT1 or DXT5
0x91:DXT1 or DXT5 (トゥーン用)
0x93:32bit RGBA
0x97:32bit RGBA 高速転送用
0x99:DXT1 or DXT5 (ミップマップ)

■2種類のヘッダを見分ける方法
自分はFlagに入っている値で判別してデータ情報のオフセットを変更しています。
0x00000001であれば0x20から開始
それ以外であれば0x10から開始

■データ情報
Flagから判断したオフセットから始まる構造体です。
Formatが0の場合32bit RGBAとして判断しますがSwizzleされた高速転送用の場合unSwizzleする必要があります。
するかしないかはヘッダの4byte目の値が0x87であるかで判別できます。
Swizzleされたテクスチャは主にキャラクターの3Dモデルの表情に使われるアニメーション用です。
イベントや立ち絵などには使用されていません。
またこの値でDXT1かDXT5かを判別できます。

struct stTID_INFO
 s8 name[0x20];   // ファイル名の文字列
 u32 InfoSize;     // データ情報のサイズ?
 u32 Width;       // 横幅
 u32 Height;      // 縦幅
 u32 n13;       // 謎
 u32 n14;       // 何かのフラグ?
 u32 n15;       // 謎
 u32 DataSize;    // イメージデータサイズ
 u32 DataOffset;   // イメージデータのオフセット
 u32 n18;       // 謎
 u32 Format;     // DXT1/DXT5などの文字列
 u32 DataSize2;   // イメージデータサイズその2
 u32 n21;       // 謎

■イメージデータ
イメージデータはDDS用のデータになっていたのでエンディアン変換やRGBAの配置を変更しなくても良かったはずです。
(自分のソースを見た感じ)

では頑張ってください。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ ※必須
文字色
Eメール
タイトル sage
URL
メッセージ   手動改行 強制改行 図表モード
メッセージには上記と同じURLを書き込まないで下さい
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
プレビュー   

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No 暗証キー