Jelajahi Sumber

fixes the less than 1 weight issue on membership

Asad M. Zaman 17 tahun lalu
induk
melakukan
59d5cec1f8
1 mengubah file dengan 20 tambahan dan 0 penghapusan
  1. 20 0
      pandatool/src/mayaegg/mayaEggLoader.cxx

+ 20 - 0
pandatool/src/mayaegg/mayaEggLoader.cxx

@@ -602,11 +602,23 @@ int MayaEggMesh::GetVert(EggVertex *vert, EggGroup *context)
   vtx._index = 0;
 
   EggVertex::GroupRef::const_iterator gri;
+  double remaining_weight = 1.0;
   for (gri = vert->gref_begin(); gri != vert->gref_end(); ++gri) {
     EggGroup *egg_joint = (*gri);
     double membership = egg_joint->get_vertex_membership(vert);
+    remaining_weight -= membership;
     vtx._weights.push_back(MayaEggWeight(membership, egg_joint));
   }
+  
+  // some soft models came up short of 1.0 on vertex membership
+  // add the remainder of the weight on first joint in the membership
+  if ((remaining_weight) > 0.01) {
+    gri = vert->gref_begin();
+    EggGroup *egg_joint = (*gri);
+    double membership = egg_joint->get_vertex_membership(vert);
+    vtx._weights.push_back(MayaEggWeight(membership+remaining_weight, egg_joint));
+  }
+
   if (vtx._weights.size()==0) {
     if (context != 0) {
       vtx._weights.push_back(MayaEggWeight(1.0, context));
@@ -615,10 +627,18 @@ int MayaEggMesh::GetVert(EggVertex *vert, EggGroup *context)
   
   VertTable::const_iterator vti = _vert_tab.find(vtx);
   if (vti != _vert_tab.end()) {
+    if ((remaining_weight) > 0.01) {
+      mayaloader_cat.warning() << "weight munged to 1.0 by " << remaining_weight << " on: " << context->get_name() << " idx:" << vti->_index << endl;
+    }    
     return vti->_index;
   }
   
   vtx._index = _vert_count++;
+
+  if ((remaining_weight) > 0.01) {
+    mayaloader_cat.warning() << "weight munged to 1.0 by " << remaining_weight << " on: " << context->get_name() << " idx:" << vti->_index << endl;
+  }    
+
   _vertexArray.append(MakeMayaPoint(vtx._pos));
   if (vert->has_normal()) {
     _normalArray.append(MakeMayaVector(vtx._normal));