有關輻射4 nif 格式的研究心得
本篇相當枯燥, 除非對modding有極大熱情再繼續, 另外建議有摸過010 Editor的來看會比較容易了解
周末花了點時間研究了一下 FO4 nif 檔案的結構, 的確是跟Skyrim的差很多, 看來Nifskope 與 3ds/blender 插件的開發會大大的延遲, 原來的nifskope的開發者
一開始以Skyrim推出後兩周出新版的速度來推估FO4的工具開發進度, 但目前看起來 FO4 nif把從 morrowind以來一直沿用的NiTriShape/Data與skin結構整個丟棄, 弄了個
BSSubIndexTriShape與BSSkin出來, 接下來除了要反推新結構的格式外還要修改nifskope的render, 看起來初版我猜要一個月以上吧, 3ds/blender 插件的話就更遙遙無期了....
下面要分享目前我對FO4 nif結構的初步心得, 以目前的了解的程度, 已經可以移值一些沒有skin的物件(例如頭盔, 手環等), 文後是順便練手一下把skyrim裡面的牛角頭盔
初步移植到FO4裡的截圖.
**FO4 Nif 的一些整理
1. nif header中, user version 2 -> 130, 並多了一個export info欄位
2. 大多數的資料結構沒變 (NiNode等)
3. BSSubIndexTriShape 在頂點座標與UV map上採用hfloat取代float表示
4. BSSubIndexTriShape Vertex Color 疑似直接用ushort取代float表示
5. BSSubIndexTriShape 不再儲存normal, tangent, bitangent資料, 可能是讀進內存中再算
6. 手工移植的流程(以頭盔為例)
a) 先找一個FO4 頭盔的 nif (最好只包含一個bone node, 因為現在還沒搞定skin的資料)
b) 將要移植的NiTriShape中的頂點數目與三角形數目寫入FO4 nif BSSubIndexTriShape 對應的欄位, 並適當的在對應的位置插入空白使結構大小與欄位相符
c) 利用 010 editor的script將NiTriShapeData中頂點, UV, 三角形寫入BSSubIndexTriShape結構 (或是自己寫程式做binary資料轉換....)
d) 將Vertex Color填0xFFFFFFFF, 未知欄位就照原本nif中的方式填
e) 進遊戲中應該就可以看到原本FO4頭盔的外型改變了
以下是利用010 editor (功能很強大的binary格式分析工具) 解析出來初步的 BSSubIndexTriShape的template file(尚未完整, 有些nif還是會有不一樣的欄位跑出來, 但暫時夠用),
有很多無意義的命名代表目前功能未知(需要改一改進遊戲看看才知道對應到什麼).
typedef struct (uint flags_1) {
hfloat x,y,z; //looks like vertex
hfloat uk_1;
hfloat uvx, uvy; //looks like uv map
ushort color;
if (flags_1 & 0x00000003) {
byte o1_FFFFFFXX <fgcolor=cRed, bgcolor=0xffffaa>;//always 0xFFFF_FF follow 00 or xx
}
if (flags_1 & 0x00000002) {
byte o2 <fgcolor=cBlue, bgcolor=0xffffaa>;//always 0xFFFF_FF follow 00 or xx
}
intu1 ; //looks like some flag, same for most vertices
intzero1 ; //always zero
intu2 ;//usually 0x0001_0000, or zero
} VertexFO4;
struct BSSubIndexTriShape {
NiObjectNet parent_1;
NiAVObjectparent_2;
uint u1;
Ref uk_ref3;
uint vertex_flag_1 <format=binary>;
uint u13 <format=binary>;
uint num_triangles;
ushort num_vertices;
ushort u21<format=binary>;
ushort u22_zero;
VertexFO4 vertices(vertex_flag_1);
Triangle triangles;
uint again_num_vertices; //or max vertices index?
uint uk_2;
Ref uk_ref_1;
uint uk_3;
Ref uk_ref_2;
uint num_uk4;
struct {
uint uk_4;
} uk_4;
uint uk_41;
Ref uk_ref_3;
uint uk_5;
Ref uk_ref_4;
uint uk_6;
struct {
uint uk1, uk_8029b786, zero;
} uk_7;
ShortLenStringmesh_path;
};
{:3_48:}{:3_48:}{:3_48:} 看不懂 支持一下 单靠热情很难坚持下去,楼主加油。 必须要支持 期待上古辐射~~~~~~~~~~~ 先赞一个! 但是 这个方法目前只能做到导入单一骨骼蒙皮的模型而且看截图 shader数据都丢失了模型的法线数据也木有还是老老实实等支持F4的NifSkope吧
B社对于导入自建模型从来都是不支持态度希望第三方工具加快进度不用等官方CK就可以MOD了
页:
[1]