3ds max 导出插件——md5Exporter开场篇

今天把mesh导出成功了,趁热打铁记录哈。参照了“Jonathan "BeRSeRKeR" Garcia”的脚本,对比了导出数据,几乎完全一样。

md5比较好的是mesh和anim的文件分开的,而且anim文件里面有每帧的包围盒。不过mesh文件里面材质方面的内容还是差黑多,还有mesh文件里面part也没名字之类的对换装啥的来说还是不够。毕竟它最初用途不是这方面。

其实,模型格式还是很简单的,插件用IGame接口也不是很麻烦。

可能需要注意下的就几个问题:

1.3dmax里面一个对象有可以赋一个父材质,然后下面带多个子材质。这种情况,我在导出的时候是按材质来分割原本的对象,导出mesh数据的时候面片由材质来组织,相同材质的作为一个submesh。

2.IGameMesh的顶点数量和纹理坐标数量有可能是不对应的。使用GetActiveMatIDs和GetFacesFromMatID对面片处理的时候,需要排除相同顶点索引、相同纹理坐标索引、近似位置的顶点、近似坐标的UV。顶点多了会显示不正常,UV少了纹理贴的又不对。如果不通过GetActiveMatIDs和GetFacesFromMatID来获取绑定一个材质的一组面片,也可以遍历面片取得材质ID,自己把面片按照材质来分组。

3.skin导出的时候可以取GetInitialPose和GetInitBoneTM计算权重的偏移值,也可以直接顶点坐标和骨骼矩阵来计算,不过需要对骨骼矩阵做一些处理,矩阵和脚本导出数据不同,有些四元数w>0的要取反。至于具体原因还要看GetInitialPose和GetInitBoneTM的数据与直接顶点坐标和骨骼矩阵的区别。

4.joint中的骨骼矩阵如果直接用第0帧的骨骼矩阵的话,有点问题。有些四元数和脚本导出的数据又不一样,仿照脚本的w<0的时候取反,然后就正常了。可能默认骨骼信息需要初始骨骼矩阵,需要对比下GetInitBoneTM。

5.顶点的骨骼权重计算的时候,GetWeight的骨骼索引,可以传GetNumberOfBones的索引,或者GetIGameBone后再GetBoneIndex的值,它们索引是一样的。不过GetIGameBone的第2个参数是true的话那就不一样了。

还要写anim的插件,为了使用方便在mesh导出的时候我加了点信息,max中对象名字和对应的mesh(组)、每个mesh的材质,材质的简单信息导出。

最后附上项目地址,在github上的https://github.com/qiutaoleo/md5Exporter用的是max2012的sdk。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值