找回密码
 注册
X系列官方授权正版
搜索
查看: 18840|回复: 30

[原创] 制作新的飞船

[复制链接]
发表于 2007-9-18 00:45:07 | 显示全部楼层 |阅读模式
一. 看这篇教程前,需要有以下工具并安装好:
1. x3 editor
坛论里有篇很详细的介绍http://bbs.deeptimes.org/forum.p ... page%3D1&page=1
主要用到的是TXT Editor.mod manager,Text Resource Editor,X Models 3D Viewer.建议先熟悉这部分的内容.mod manager主要用来管理game所需要的文件,所有game要用到的文件都要用它来打包进cat文件里.在X3\下面有很多cat文件(1.cat---10.cat), 都是打包好的文件,各个cat文件里可能会存在文件名相同的文件,X3会以数字最大的cat文件为准.为方便调试,这里直接修改10.cat文件,这样可以用当前的存档来直接测试
2.X2BC1.011,DBOX2
  X2BC1.011是x3 模型文件编译/反编译工具,  DBOX2是 3dsmax导入X3模型文件的脚本.
3.3dsmax,photoshop, 以及让photoshop支持dds格式的插件,这个网上查一下就能找到了.

二. 准备工作

将X3\10.cat,10.dat先备份好.建一个自己的mod的目录,下面建好以下目录:
dds;  objects\ships; t; types.
用mod manager把所有cat文件解出来,找到t\440001.xml ;types\TShips.txt;types\Components.txt解压出来并放到上面的相应目录. 而我们要修改的10.cat文件留在原来game的目录下.
打开3dsmax,将单位设为mm.

三. 模型,材质,贴图
  X3的模型文件一般有3种: bob,bod,scene.bod. bod是文本格式的,bob是它的编译版本,scene.bod也是文本格式,它用于定义模型以及船的组件,比如炮塔,炮的位置等等.
1  材质.
  首先需要了解下面这2类材质:
material5:实际上这是x2的材质.x3基本不用这种材质.
material6:X3主要用这种.
   一般情况下,每个game都会有自己的材质脚本(shader script),在3dsmax里的材质一般是不带这个script信息的,所以如果直接用3dsmax的材质的话,会丢失这个重要的script,这样导出来的bod文件用的材质即是material5的,会造成X3丢失材质甚至贴图,在game里模型会变成"白模",
  论坛上有一篇老外的教程http://bbs.deeptimes.org/forum.p ... page%3D1&page=1说要把导出的bod文件和原始bod文件比较来手工恢复这个材质贴图,实际上这是不需要的,这是由于他用的是material5材质的结果.我们需要做的是,准备自己的material6材质库.
   用mod manager在cat文件里将argon_M4.bob解出来,然后用X2BC_1.0.11(一定要1.011版的,1.09版有问题)将它反编译成bod文件,将argon_M4.bob copy到x2bc的目录,然后在dos(命令行)下输入: x2bc -d argon_M4.bob M4.bod 回车,即可得到M4.bod文件.
   在3dsmax里,在右上角找到 Utilities(锤子那个图标),按max script后,在max script介面里Utilities有个下拉菜单,选DBOX2即可.然后将上面的M4.bod文件Importer(导入).Importer的时候,选上Detach parts,其它的不选能导入所有LOD模型(LOD下面有说明).打开Material Editor,取导入模型的材质,应该是一个名为Multimaterial的多重材质,只是它只有一个子材质; 选add为这个多重材质增加多几个子材质,然后将原本的子材质copy到新增加的子材质栏中.点选其中的一个子材质查看一下,应该能看到X3 shader, X3 Properties,这就是我们需要的X3的material6材质,用这种材质导出的bod文件不会出现贴图,材质丢失的情况.熟悉3d的人还可以直接在X3 Properties里设置一些自己想要的效果(比如lightmap是控制发光部位的).将这个多重材质save起来,以后我们用到新模型的时候将它load进来,换贴图就行了.
  打开子材质的Maps这项,能看到常用到的几种贴图:
Diff: 相当于color了,这是最主要的贴图.
Specular color和specular Level, 用来控制高光的color和强度,通常都是用同一张贴图.
bump: 这里连接凹凸贴图或法线贴图(normal map).
另外还有个较为有用的贴图lightmap,在X3 Properties可以看到.
所有的贴图均为dds格式, Diff是 DXT1,其它的是DXT5,这在photoshop存成dds的时候会有提示.可以选择存成哪个DXT的DDS.
所有的贴图的尺寸必须能被16整除,比如 512X512,128X64...............


[ 本帖最后由 bigcat 于 2007-9-20 20:37 编辑 ]

评分

参与人数 3UCC +100 好评 +1 贡献 +1 收起 理由
roy986 + 1 厉害、厉害,技术贴啊
猪样年华 + 100 技术贴,支持
beta1 + 1 有价值信息

查看全部评分

 楼主| 发表于 2007-9-18 00:46:06 | 显示全部楼层
2 模型.
  建模以及分UV不在本文的范畴,不懂的可以参照相关资料.自己建的模也好,从别的地方导进来的模也好,有几点是值得注意的:
1).要做LOD模型.
  LOD即level of detail,当物体离得比较远的时候,你能看到的细节是极少的,这时候一般会用面数较少的模型以提高运行效率.随着物体离视点越来越近,就需要面数越来越多的模型才能表达足够的细节.所以会有一套不同面数的模型供物体在不同的距离的时候调用: LOD0,LOD1...LOD4... LOD0的面数最多,X3里这个LOD0的面数可以很多,因为这时候是玩家在飞船上以第一人称视角的时候用的,而其它人称的视角就会用LOD1....LOD4.各个LOD的面数减少多少可以参考下x3里已有的模型.但是笔者认为,LOD0由于是第一人称时才显示的,而且场景里也只有玩家的船会可能显示LOD0模型,所以LOD0复杂点也无所谓.需要规划的是LOD1--LOD4,X3里一艘小飞机M4的面就3000多了,这实在是太多了,(X3里船一多就卡...-_-::::)这一般1000多就足够了,而对于象M1,M2这种大型战舰,LOD1的面数定在4000左右应该比较合适.LOD4是很远的时候显示的模,一般100左右就行了.
2).LOD的起名
  以上面的M4为例, M4_0,M4_1,M4_2...分别代表LOD0, LOD1,LOD2...的模型.
3).
  飞船的质心一般要放在坐标0,0,0处.
   在顶视图看的话,船头应该在向上的方向.
   所有模型的transform信息必须归位,也就是 移动(0,0,0),旋转(0,0,0)缩放(1,1,1)(即100%),可以用右键分别选移动,旋转,缩放查看这些数据.3dsmax里有多个方法使transform归位,比如reset Xform,或者移动的时候直接移点也能避免改变初始的transform.
4).建立座舱Cockpit.
   当玩家切换到另一艘飞船的时候会在初始视点里,Cockpit用来定义这个视点的位置.
   建立一个体积极小的box,将它改名为Cockpit,放在飞船初始视点的位置.这个位置各人应该有各人的喜好.随便了.不会有很严格的要求.将它作为LOD0物体的子物体.我在做test的时候,是拿家园2希格拉战巡的模型来test的,为方便起见,下面以它为例子. 它的LOD0模型名是 h_bc_0, 那这个Cockpit要设为h_bc_0的子物体(相当于子目录那样的层级结构).注意Cockpit的transform数据要归位.
   这个Cockpit很重要,后面会解释它的用处.
5). 导出模型文件:
  将各个贴图文件放在你自己建立的dds目录下,在3dsmax里设好贴图以及材质分配好后,在DBOX2的exporter(导出)下面选Body,然后选Export All就能得到飞船的模型文件了,文件名为h_bc.bod.
  将bod文件用x2bc编译成bob文件: x2bc -c --bob h_bc.bod h_bc.bob
  
6)导出components(组件).
  一艘船通常必不可少的component是Cockpit.没有Cockpit的话,飞船的初始视点会在对应于3dsmax里0,0,0的位置,这通常在飞船的内部,会得到一个非常难看的画面.X3里把Cockpit当作一个components,用来定义初始视点的位置.
  在DBOX2界面里找到Global Settings,Data root设到你解压所有cat文件的目录,Components files设到你自己新建的types目录下的components.txt
  选择h_bc_0,在Components选Export就能将Cockpit的数据输出到components.txt里.按show可以检查输出是否正确,它应该会在你的Cockpit的位置出现一个红色的十字.
7).导出scene.bod文件.
在exporter下选scene,然后export all,文件名为h_bc_scene.bod.
这时h_bc_scene.bod的内容一般为:
/# Exported with dbox2 1.9 from H_BC.max at 2007-9-15 16:46:12
VER: 6;
P 0; B h_bc; N h_bc_0;  // idx 0
{ 0x2002;  0; 0; 0;  0.000000; 0.000000; 0.000000; 0.000000;  -1; 1; } // 0

这里B表示引用的Body文件(bob),这里缺少了路径,手工加上, 改为
P 0; B ships\h_bc; N ships\h_bc_0;  // idx 0
没有路径的话,船就会变成"隐形".

将h_bc.bob,h_bc.bod,h_bc_scene.bod放到objects\ships下.
到此为止,我们就得到了这艘新船的X3模型文件. 由于X3只接受cat里的文件,无视其它地方的文件,所以我们要用mod manager将我们的文件打包进10.cat里.用mod manager打开10.cat,将你自己的dds和objects目录拖进去,这时会出来一个对话框,确认即可.注意mod manager里的文件的路径是否正确,如贴图的应该在dds目录下,bob文件应该在objects\ships下.  用X Models 3D Viewer打开h_bc.bod,如果显示正常常的话,就说明模型文件做好了.如果贴图文件没打包到cat文件的话,就会看不到贴图.

[ 本帖最后由 bigcat 于 2007-9-20 12:41 编辑 ]

评分

参与人数 1好评 +1 收起 理由
beta1 + 1 有价值信息

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2007-9-18 00:46:46 | 显示全部楼层
四. 设置新船的数据.
  上面我们得到了船的模型文件,然而这艘船的性能如何,有何武器,还要进一步的设置.这部分主要在X3 editor

以及scene.bod设置.
   1 用TXT Editor打开types\tship.txt.
图1.

这里我们在Argon Centaur M6的基础上修改以得到新船的数据.
找到 Argon Centaur M6 copy它,并paste,在右边的Info把ID改为H_BC(随各人喜欢了),把Description改为

73000 然后点Text Res,打开 t\440001.xml,选左边的17 Boardcomp.objects,然后在右边新增加一个条目 73000,内容

是 Hgn BC. 存盘后退出Text Res.回到 Txt Editor,选回新增加的船,在右边Model里,ship scene改为

ships\h_bc_scene,Cockpits的第一行改为ships\h_bc.bob.保存这个Tship.txt文件.

2.scene.bod文件的最终设置.
scene.bod主要是设置各个Path idx, Camera idx以及各个Path Idx调用的是哪个模型.Path idx相当于定义一些点,然后
程序可以根据这些点来做很多东西,比如放某个模型,定义武器,或者当触发一定条件后显示相应的特效. 这个点常常被称作hardpoint,
中文也有称作"挂点"的.
Tship.txt里也有相应的数据,它的设置要与scene.bod里设置相一致.本例是h_bc_scene.bod这个文件.由于是copy M6的数
据,所以在argon_M6_scene.bod的基础上修改即可得到我们想要的h_bc_scene.bod: 将argon_M6_scene.bod里的
P 0; B ships\argon\argon_M6; C 1; N Bships\argon\argon_M6_1b; b
改为:
P 0; B ships\h_bc; C 1; N Bships\h_bc_1b; b
  这就把原来显示M6模型改成了显示上面得到的h_bc模型.
  这艘新船的炮塔,炮的位置不可能和M6一样,所以还要进一步修改h_bc_scene.bod.在这之前,要明白座舱(Cockpit)炮
塔(turrets),炮(gun),之间的关系:
  game里,我们在某个视点的时候,能控制一定数量的炮,当处于初始视点的时候,我们控制的是船的方向,而在其它
视点的时候,我们控制的是部分炮的射击方向.视点就相当于Cockpits(座舱),也就相当于我们处于turrets时的
Cockpits.turrets和Cockpits是一个东西2个层面的解释,turret可以定义有多个Gun,而且可以是离得比较远的多个Gun,可以理
解为飞船某部分的所有炮.而Cockpit相当于处于turret时的视点.
  先在Txt editor里看一下 Cockpits,Guns的数据,会注意到Path Idx(P Idx)这个数字,在Cockpits这项里,能
看到Position下会有 right(4),left(3)这类数字.Path Idx是路径索引,用来定义某个位置,当你在txt editor
里增加新的gun的时候,也会看到要你输入Path Idx.而right,left后面的数字是Camera Idx(相机(视点)索引)
.Camera Idx用来表示某个相机(视点.也就相当于Cockpit).
  下面解释scene.bod的意思.用记事本打开h_bc_scene.bod,可以看到下面的语句:
P 0; B ships\h_bc; C 1; N Bships\h_bc_1b; b
  { 0x2002;  0; 0; 0;  0.000000; 0.000000; 0.000000; 0.000000;  3333;  1; } // 1
  { 0x2002;  0; 0; 0;  0.000000; 0.000000; 0.000000; 0.000000;  -1;  -1; } // -1

这句是定义显示船体的,第2行可以去掉. P就是Path Idx(路径索引), B 表示调用的Body文件(bob文件),
"C 1"这里C即 Camera Idx, C 1表示1号相机(Cockpit,炮塔),
N Bships\h_bc_1b; b   Bships\h_bc表是调用 h_bc.bob   后面的_1的 1表示 Camera Idx 1.
.
P 10; B ships\props\cameradummy; C 2; N Bships\props\cameradummy_2b; b
  { 0x2002;  -0; 9097; -21535;  0.500000; 0.000000; 1.000000; -0.000000;  -1;  -1; } // -1
这行是定义相机(视点)2的,也就是Cockpit,turret(炮塔)
下面这行数字 2,3,4位是坐标,相当于3dsmax里的 x z y (注意, y与z是换了位置的,这"得益"于3dsmax的与行

业习惯不一样的坐标系)如果3dsmax里的单位是mm的话,那3dsmax里的坐标X100就是这里的数.
5,6,7表示方位,其中1=180度.
P 1; B ships\props\invisible_weapon; C 1; N Bships\props\invisible_weapon_1a; b
  { 0x2002;  -3301; -2388; 30075;  0.000000; 0.000000; 0.000000; 0.000000;  3333;  1; } // 1
  { 0x2002;  -3301; -2388; 30075;  0.000000; 0.000000; 0.000000; 0.000000;  -1;  -1; } // -1
在P 1--P 8这些行里,定义了8个炮,这里的 C 1,表示这些炮是在cockpit 1的时候可以由玩家控制的,而

Bships\props\invisible_weapon_1a----Bships\props\invisible_weapon_1g的 a-g的字母可以随便换,只是为

了区分不同的炮而已.
P 9; B ships\props\turretdummy; C 2; N Bships\props\turretdummy_2b; b
  { 0x2002;  -10; 6523; -25865;  0.500000; 0.000000; 1.000000; 0.000000;  -1;  -1; } // -1
这是定义的另一个炮,ships\props\turretdummy是炮的模型,可以用moder view打开看看.pop下面的东西喜欢哪

个就换哪个吧. C 2 表示当玩家在 2号 Cockpit的时候,这些炮由玩家控制.
  现在可以在3dsmax里定好位置,再在scene文件里修改它就可以得到自已想要的位置了.以及可以决定哪个视点

(cockipt或turret)控制哪个炮了.如果想再增加炮(gun),那在3dsmax定好位置后,增加新的语句就行了.需要注

意的是,Path Idx(P值)要与txt editor里的设置要一致,以及这个炮的 C 值--由哪个视点(cockpit或turret))控制.

   最后.用mod manager把所有的文件打包进10.cat文件吧,注意进10.cat后要保持原有的路径.在game里可以用

论坛里介绍的作弊脚本create ship,选新船,race选你自己就行了.


  做新船的话,建议找一条已有的类似的船,以它为出发点修改,这样会比较快而省事.最主要的是cockpit或炮塔
的数量要一样,其它的数据都容易改.增加gun的数量也比较容易.
  如果想在copy一艘已有的船的基础上增加炮塔(或cockpit),特别是想从0开始去设置一艘新船的数据的话,工
作量会很大,因为要必须保证tship.txt和scene.bod里的定义要一致.对于炮很多的船这是个很繁琐而又需要耐
心的工作. 还有一个很重要的原因,以笔者的理解,新炮塔(cockpit)是components(见 三 2 (6)),你必须要导出到
components.txt文件里,重新编排components.txt,好象还要让系统重新生成components.txt才能让它正常工
作.笔者对这部分目前也是有些疑问. 试过成功增加新的炮塔(cockpit),但后来改动了数据后又失效了. 弄了些时间
也没弄出来就放弃了. 还不如直接在现成的基础上改来得简单快捷.
  另外,实际上可以直接在3dsmax设置好后,就能导出完整的scene.bod文件,但因为tship.txt文件里也有部分数据
与这里的定义是重复的---同样的功能却在两个地方定义,昏----X3要求它们的数据要相一致.这点非常不方便,为啥
Tship.txt相应数据不能直接从scene.bod里调用相关数据,而要增加了手工去一一对应这道工序?否则可以直接在
3dsmax里设置好,导出完整的scene.bod文件就行了.如果有人对在3dsmax里scene的导出感兴趣的话,下次再写篇教
程介绍一下吧.

[ 本帖最后由 bigcat 于 2007-9-20 20:47 编辑 ]

评分

参与人数 2好评 +2 收起 理由
key + 1 只能加1....=.=
beta1 + 1 如果可以看到图片就更好啦 ^^

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2007-9-18 00:53:45 | 显示全部楼层
飞船的模型如果想用现成话会比较省事,如果想把家园2里的模型导出来再导进X3,那可能要细化一下才能成为LOD0模型. 提取家园2的模型可以看我很久以前写过的一篇教程,见 中国部落联盟 » 第九频道  家园论坛的这个贴子。
http://tribescn.com/viewthread.php?tid=4813&extra=page%3D2
回复

使用道具 举报

发表于 2007-9-18 08:48:38 | 显示全部楼层
上图
回复

使用道具 举报

发表于 2007-9-18 15:21:25 | 显示全部楼层
:loveliness: 终于可以看了,拜一下BIGCAT
回复

使用道具 举报

 楼主| 发表于 2007-9-20 11:36:28 | 显示全部楼层
今天加了几张图片. 改了几个录入错误的地方.
制作新船的时候,注意备份原来的Componentns.txt
常常碰到的问题:
1 当你进game后发觉得原来game中的飞船的控制,座舱位置出现异常,
那是因为Componentns.txt出问题了,在10.cat里del了Componentns.txt 即可,同时重新制作你的Componentns.txt文件.

2 看不到船体:
检查tship.txt以及scene.bod里调用的bod文件是否正确,注意包含路径.(从ships\开始)

3武器不开火:
在scene.bod里检查武器对应的C (camera idx)是否正确
在scene.bod,tship.txt里检查武器调用的模型文件是否正确
如果武器调用的是玩家制作的炮塔模型的话,那炮塔模型要在3dsmax里导出到Componentns.txt ,然后检查这个炮塔是否在Componentns.txt 列表里. 注意区分大小写. 包括在Tship.txt,scene.bod里.

[ 本帖最后由 bigcat 于 2007-9-20 13:09 编辑 ]
回复

使用道具 举报

发表于 2007-9-20 15:47:49 | 显示全部楼层
:L 看不到图哦,是不是得先到网易的相册……
回复

使用道具 举报

 楼主| 发表于 2007-9-20 16:24:18 | 显示全部楼层
原帖由 beta1 于 2007-9-20 15:47 发表
:L 看不到图哦,是不是得先到网易的相册……


是啊.是网易的相册. 估计有些人看不到.  不知道哪有可以link过来大家都能看的相册.有的话就方便了.
回复

使用道具 举报

发表于 2007-9-20 19:14:11 | 显示全部楼层
可以试试 http://imageshack.us/  优点是无需注册即可上传。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站