3ds max 导出插件——md5Exporter完结篇

今天还有思路来记录下,就干脆完结篇也一起出了,本来是想中篇是动画相关的,完结篇是其他附加功能完成后的,但时间又少,而且很多小功能也没多大必要来占地方。还是记录重要的东西吧。

用md5有段时间了,再说点需要注意的地方和一些想法还没去做。

一个是把mesh按照引用的骨骼数量限制来切分

在类似Away3D这样的AS3的3D引擎中,shader的寄存器数量限制很大,只有128个4维向量大小。除开材质和变换矩阵,能够给gpu计算动画的骨骼矩阵只有30-40个左右。那么一套骨架的骨骼总数就要在30-40左右。但很多情况下不能满足美术要求,在这种骨骼总数超出了传递给gpu的骨骼矩阵数组的情况下,又需要用gpu渲染出对应动画。有个解决方法是把一个mesh按照所用到的骨骼数量做切分,划分成多个mesh,每个mesh自己用到的骨骼数量可以全部传给gpu。这样在渲染mesh的时候就不是把整个骨架的骨骼传递给gpu,而是把它所用到的骨骼传递给gpu。虽然会增加渲染次数,但是这总比软计算骨骼好吧,谁叫stage3D限制这么多呢!

我在插件中实现了这个功能,不过还有些不完善的地方,而且划分方式不是最好的。

原本在纠结是在解析md5的时候做mesh的切分,还是在导出的时候切分,不过后来想了下,还是导出的时候做吧,用的地方多些啊。

另外再说下对有动画的模型的拾取和射线查询的一点想法。

在用顶点动画的模型上面做拾取倒是很简单的啊,不管是3D空间中的还是向pbuffer那样渲染到纹理后进行的查询。

用骨骼动画的模型就有点区别。

软计算骨骼的就和顶点动画的没区别。

用gpu计算动画的模型,想在3D空间中查询的话就有问题了,模型顶点不是按照骨骼偏移后的,仍然是初始状态的。用渲染到纹理的方式查询就问题不大,只要渲染到纹理的时候计算了动画的就行。不过Away3D4.1中虽然支持用渲染到纹理的方式拾取查询,但是他对骨骼动画模型这种东西是没有计算骨骼就渲染的,所以拾取的时候是错的。

如果想在3D空间中射线查询用gpu计算骨骼动画的模型,可以按照常用做法,用一系列骨骼的包围体来描述模型,先检测骨骼,再检测顶点。

不过这点有个问题需要注意,不同模型的顶点相对同一根骨骼的偏移是不同的,骨骼的包围体应该按照它所影响的顶点来计算。那不同模型的包围体就是不一样的了,这种包围体的描述信息,我按照之前的想法,感觉应该在导出插件中完成,以后好用!

按照md5的文件划分方式,原本包围体是放到anim中的,一个动画文件包含每一帧的aabb。需要把包围体调整到mesh中,并且包围体是按骨骼层级存储,每个骨骼的包围体。在需要检测得时候就像更新动画一样的更新骨骼的包围体,计算量会比更新顶点小很多,box形状的就只有8个点每根骨头。其实固定动画更新所生成的包围体是重复的,可以只计算一次缓存下来,减少计算量。

还有个东西需要保存,一根骨骼所影响的面片,这是在做精确查询时需要的。按照之前的方式这也在导出的时候完成,为了以后方便啊!

这都只是我的一点设想,还有物理引擎支持模型的查询,都是可以的。

最后再附上开源地址,在github上的https://github.com/qiutaoleo/md5Exporter,按照我的时候要求和发现的问题会不定期更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值