骨骼数据的进一步优化

缘由是看到这篇文章:

http://www.cnblogs.com/ixnehc/archive/2010/12/12/1903662.html 

主要是这一段话启发了我:

在具体压缩的时候,我们还对不同部分的骨骼的压缩精度作了调整,越靠近根部的骨骼的误差限制会越严格,以避免动作走样,而骨架末端的骨骼(比如手腕,脚腕)则可以放宽限制. 

在之前,精度控制固定为:

float epsilon = powf(0.1f, static_cast<float>(config.precision)); // 精度


于是将代码修改成为:

 

int depth = std::min(10, getNodeDepth(pBone));
const float maxPrecision = config.precision - MIN_PRECISION + 1.2f;
float factor = std::max(1.0f, maxPrecision * (1.0f - 1.0f / depth));
epsilon 
= powf(0.1f * factor, static_cast<float>(config.precision)); // 精度
optimizeSkeletal(epsilon, bone.keyFrames);

 

注:

getNodeDepth是用来取骨骼所在骨架中的深度

maxPrecision用来控制最大变化量

factor控制最后的精度,骨骼深度越大,factor越接近maxPrecision 

 

这样一来,通过观察,maxPrecision = 1.2是个看上去合适的值,动画不会太受影响,最终的skeleton数据可以减少约0.2 - 0.5不等(相比之前)。 


posted @ 2010-12-22 18:53  千里马肝  阅读(1588)  评论(4编辑  收藏  举报