现在终于要讲本教程不同之处了。前面的教程已经详细的说明了纹理贴图和皮肤的修改以及制作的过程了。其实人物的动作也是可以改的,只是在MS里我实在是做不下去了。
大家一定对MS极为不方便的操作感到郁闷吧。现在我就讲怎么摆脱MS,在MAYA里轻松的完成同样的工作。
这里要用到几个工具和以前有些不同了
MilkShape 3D 1.6.0 在以后的教程中,只用他来做MDL的解压了,不在使用他的其他功能
studiomdl.exe和SMDLEXP.ilk 是HLSDK里附带的MDL文件合并工具。之所以用他是以为在出现错误的时候可以看到错误报告,而MS就没有。
SmdExport.mll和smdExportOptions.mel 这也是HLSDK里附带的,但是不能正常的使用
Will003.mel 这是本人自己编写的MEL
值得注意的是SmdExport.mll是不能直接的生成合法的SMD文件的,我在下面的教程里所使用的SmdExport.mll是经过我自己修改并重新编译的。
由于SmdExport.mll作者的目的并不是用他对原有人物进行修改的,所以就出现了一些格式不能按我们的意愿输出的问题。下面的教程里将有很大的篇幅讲如何把文件合法化,并且使文件格式按我们的意愿进行排列,请认真的阅读。
在开始以前建议你想用“记事本”打开guerilla.smd这个文件观察一下文件的结构
version 1
nodes
…………………
end
skeleton
time 0
…………………
end
triangles
…………………
end
这个是Reference类的文件
再打开 run.smd看看
version 1
nodes
…………………
end
skeleton
time 0
…………………
time 1
…………………
…………………
time 36
…………………
end
这个是Sequencnes类的文件
这两种文件有一点不同,但是主要的格式还是一样的
nodes 里记录的是骨骼的名称以及父子关系
skeleton 记录着骨骼的信息
triangles 记录着皮肤和贴图的信息
明白了这些就跟着我来做吧(因为工具的先天不足目前要做的是对triangles信息的输出)
(图1注解)用MS解压人物的MDL文件
现在还需要一个做好的皮肤
(图2注解)还是使用这个皮肤好了。视图中的ambientLight1 是为了观察皮肤用的,实际的场景里只有皮肤(也就是目前的多边形的物体)
如果要自己重新制作一个皮肤,那最好是用骨骼做一下参照。
(图3注解)在命令行输入 will003 回车。记得要把MEL放到script目录里。
这就是我写的MEL,现在继续做下一步。
(图4注解)点LOAD,选skeleton.txt(这个文件是从SMD文件中截取的,做了一点改动)
(图5注解)如果你是想自己做皮肤,就可以用这个骨骼做参照了。不要对骨骼骨骼做任何的改动,在我没有说明要改动的时候,任何的改动都可能导致失败。
(图6注解)我还是用了偷懒的方法^__^ 建立一个材质,连接一个file节点进行纹理的贴图。贴图文件必须是 512 X 512 X 256的。
(图7注解)UV是要调整好的
现在先不要绑定,因为有些蹩脚的问题需要搞清楚。
在script editor里执行
select -r jointpp0 ;
parent -w;
select -r jointTmp ;
delete;
select -r jointpp52;
parent -w;
delete;
这里是把jointTmp jointpp52 删除了
jointTmp是在输出骨骼信息的时候作为世界原点的
jointpp52 是累包的位置
为什么要删除他们的呢?因为他们会使输出的文件按照我们所不希望的格式输出。
删除jointpp52以后会使输出的骨骼信息缺少一个节点,但是能保证绑定和贴图信息绝对的正确了。所以triangles和skeleton 是不能一次完成输出的。
现在使用skin>bind skin>smooth bind的默认设置进行绑定
(图8注解)权重的调节可以随个人的喜好随意调整,也可以参照中级篇里的统计表。这里的joint是用 jointpp0 到 jointpp51 的编号来表示的。
由于SMD文件在记录的时候只有0和1的权重,所以输出的时候会自动的把顶点的控制权完全交给对这个点的权重最大的一个joint。请大家注意这一点。
虽然权重的调节可以随意,但是有些特殊的joint是必须要有对皮肤的控制权的。我没有一个一个的实验,只是从QC文件里找到了3个特殊的定义
// 2 attachments
$attachment 0 "Bip01 R Hand" 10.855000 -0.416715 1.870680
$attachment 1 "Bip01 L Hand" 10.855000 -0.416715 1.870680
// 1 bone controllers
$controller mouth "Bone01" ZR 0 30
很明显这3个joint是必须要有对皮肤的控制权的,至少要控制一个顶点。
这个3个joint在场景里分别是 8 12 26
现在就可以输出了
(图9注解)按图中的设置进行输出
(图10注解)输出后的文件并不是纯文本的,是不合法的。
这就需要用工具转换成纯文本的
(图11注解)使用WINDOWS的写字板就可以了
现在用这个文件中的triangles信息把guerilla.smd里相同的部分替换了,保留guerilla.smd里nodes和skeleton的信息。
注意每行都要以数字或是字母结尾,不能以“空格”结尾,不能有空行。
将修改后的guerilla.smd保存
(前面产生的两个临时文件已经没有用了,删除不删除都可以)
现在开始合并文件
studiomdl.exe和SMDLEXP.ilk 以及皮肤使用的贴图文件,都放在和guerilla.qc同一级的目录里
对QC文件做些必要的修改(入门篇里有说明)
在 开始>运行 输出CMD 回车,进入WIN的控制台。
转移当前目录到工作目录
(图12注解)输入 studiomdl guerilla.qc 回车
(图12+1注解)如果没有错误报告就是成功了.
(图14注解)如果这里 unknow bonecontroller link什么的就是说有特殊的joint没有对皮肤的控制权,自己修改一下吧。
(图15注解)使用MAYA对皮肤和贴图进行修改的过程基本就是这些了
这样做的好处就是可以完全在MAYA里完成主要的步骤,但是需要对SMD文件进行手动的修改,一不小心就死悄悄了。
下面就简单的讲述一下对动作的修改的过程。
刚才我们讲的是对triangles修改的方法,现在讲的是对skeleton的修改方法。nodes的信息一般是不能改动的(对nodes的修改将在“超级篇”里介绍)所以高级篇最后的部分就是讲skeleton的修改了。
开始吧!
在MAYA里建立新的场景
(图16注解)重复 图3图4的步骤
在script editor里执行
select -r jointpp0 ;
parent -w;
select -r jointTmp ;
delete;
也就是删除jointTmp
(图17注解)主意开始帧和结束帧,开始帧一定是1,结束帧要和你要改的动作的time的最大值一样。
你现在就可以使用关键帧进行动画了。
动画一定是完整的一个循环,这样在游戏里才回流畅。
做好动画以后就可以输出了。
(图18注解)和刚才的设置只有一点不同,就是选择Animation
输出一个临时的action.smd文件,因为我们只需要其中的skeleton信息
(图19注解)用“写字板”另存一次,存为action.smd.txt
现在就可以把action.smd.txt中skeleton信息替换到要改的Sequencnes文件里了。
最需要注意就是time的数值,每个Sequencnes文件的time几乎都不一样。
替换完成以后就可以合并了。
(图20注解)这是从MAYA里输出的动作
(图21)OVER
[ 此贴被xiaochai在2008-08-13 13:37重新编辑 ]