Fix #33082: dupliverted metaball showing wrong in cycles render and metaball
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 9 Nov 2012 03:10:15 +0000 (03:10 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 9 Nov 2012 03:10:15 +0000 (03:10 +0000)
edit mode. I've made it follow blender internal now, but this system should
really be improved once, metaballs that are in linked dupligroups will never
show up.

source/blender/blenkernel/intern/anim.c

index 4b0c89f3a7a1ad2dbc5e09b549baad3bcd9b9ace..1aed26db48d5e4998979b9214c113100c59207f1 100644 (file)
@@ -726,9 +726,15 @@ static DupliObject *new_dupli_object(ListBase *lb, Object *ob, float mat[][4], i
         * dupli object between frames, which is needed for motion blur. last level
         * goes first in the array. */
        dob->persistent_id[0] = index;
-       for(i = 1; i < level; i++)
+       for (i = 1; i < level; i++)
                dob->persistent_id[i] = persistent_id[level-1-i];
        
+       /* metaballs never draw in duplis, they are instead merged into one by the basis
+        * mball outside of the group. this does mean that if that mball is not in the
+        * scene, they will not show up at all, limitation that should be solved once. */
+       if (ob->type == OB_MBALL)
+               dob->no_draw = TRUE;
+       
        return dob;
 }
 
@@ -781,9 +787,6 @@ static void group_duplilist(ListBase *lb, Scene *scene, Object *ob, int persiste
                        {
                                dob->no_draw = TRUE;
                        }
-                       else {
-                               dob->no_draw = FALSE;
-                       }
 
                        if (go->ob->transflag & OB_DUPLI) {
                                copy_m4_m4(dob->ob->obmat, dob->mat);
@@ -1643,7 +1646,7 @@ static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBas
        }
 
        /* keep track of persistent id */
-       if(level > 0)
+       if (level > 0)
                persistent_id[level-1] = index;
 
        if (ob->transflag & OB_DUPLIPARTS) {
@@ -1690,7 +1693,7 @@ static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBas
        }
 
        /* clear persistent id */
-       if(level > 0)
+       if (level > 0)
                persistent_id[level-1] = 0;
 }