set metaball limit for not drawing small scale motherballs to a 1/10th of what it was. durian blood splats were reaching this threshold.

also fix for memory leaks when the motherball is too small.
This commit is contained in:
Campbell Barton
2010-07-12 08:43:49 +00:00
parent 75a0301c7d
commit c013974a7c

View File

@@ -2125,13 +2125,22 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase)
if((totelem > 512) && (totelem <= 1024)) init_metaball_octal_tree(4);
if(totelem > 1024) init_metaball_octal_tree(5);
/* don't polygonize metaballs with too high resolution (base mball to small) */
/* don't polygonize metaballs with too high resolution (base mball to small)
* note: Eps was 0.0001f but this was giving problems for blood animation for durian, using 0.00001f */
if(metaball_tree) {
if(ob->size[0]<=0.0001f*(metaball_tree->first->x_max - metaball_tree->first->x_min) ||
ob->size[1]<=0.0001f*(metaball_tree->first->y_max - metaball_tree->first->y_min) ||
ob->size[2]<=0.0001f*(metaball_tree->first->z_max - metaball_tree->first->z_min))
if( ob->size[0] <= 0.00001f * (metaball_tree->first->x_max - metaball_tree->first->x_min) ||
ob->size[1] <= 0.00001f * (metaball_tree->first->y_max - metaball_tree->first->y_min) ||
ob->size[2] <= 0.00001f * (metaball_tree->first->z_max - metaball_tree->first->z_min))
{
new_pgn_element(-1); /* free values created by init_meta */
MEM_freeN(mainb);
/* free tree */
free_metaball_octal_node(metaball_tree->first);
MEM_freeN(metaball_tree);
metaball_tree= NULL;
return;
}
}