[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13332] trunk/blender/source/blender:
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Jan 21 15:18:24 CET 2008
Revision: 13332
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13332
Author: blendix
Date: 2008-01-21 15:18:24 +0100 (Mon, 21 Jan 2008)
Log Message:
-----------
Fixes:
- Particle system distribution wasn't flushed properly for non-edited hair.
- For instances in the renderer, also count their verts and faces in the stats.
- Fix for error in the "surface diffuse" formula for strand shading.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_particle.h
trunk/blender/source/blender/blenkernel/intern/particle.c
trunk/blender/source/blender/blenkernel/intern/particle_system.c
trunk/blender/source/blender/render/intern/source/convertblender.c
trunk/blender/source/blender/render/intern/source/shadbuf.c
trunk/blender/source/blender/render/intern/source/shadeoutput.c
Modified: trunk/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_particle.h 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/BKE_particle.h 2008-01-21 14:18:24 UTC (rev 13332)
@@ -213,6 +213,7 @@
void free_hair(struct ParticleSystem *psys);
void free_keyed_keys(struct ParticleSystem *psys);
void psys_free(struct Object * ob, struct ParticleSystem * psys);
+void psys_free_children(struct ParticleSystem *psys);
void psys_render_set(struct Object *ob, struct ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy);
void psys_render_restore(struct Object *ob, struct ParticleSystem *psys);
Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c 2008-01-21 14:18:24 UTC (rev 13332)
@@ -318,6 +318,16 @@
}
free_child_path_cache(psys);
}
+void psys_free_children(ParticleSystem *psys)
+{
+ if(psys->child) {
+ MEM_freeN(psys->child);
+ psys->child=0;
+ psys->totchild=0;
+ }
+
+ free_child_path_cache(psys);
+}
/* free everything */
void psys_free(Object *ob, ParticleSystem * psys)
{
Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-21 14:18:24 UTC (rev 13332)
@@ -4468,9 +4468,11 @@
distribute_particles(ob, psys, part->from);
- if(!(psys->part->type == PART_HAIR) || (psys->flag & PSYS_HAIR_DONE))
- if(get_alloc_child_particles_tot(psys))
- distribute_particles(ob, psys, PART_FROM_CHILD);
+ if((psys->part->type == PART_HAIR) && !(psys->flag & PSYS_HAIR_DONE))
+ /* don't generate children while growing hair - waste of time */
+ psys_free_children(psys);
+ else if(get_alloc_child_particles_tot(psys))
+ distribute_particles(ob, psys, PART_FROM_CHILD);
}
initialize_all_particles(ob, psys, psmd);
Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-01-21 14:18:24 UTC (rev 13332)
@@ -3894,6 +3894,7 @@
{
ObjectInstanceRen *obi;
float imat[4][4], obmat[4][4], obimat[4][4], nmat[3][3];
+ int first = 1;
Mat4MulMat4(obmat, obr->ob->obmat, re->viewmat);
Mat4Invert(imat, obmat);
@@ -3909,6 +3910,15 @@
Mat3CpyMat4(nmat, obi->mat);
Mat3Inv(obi->imat, nmat);
+
+ if(!first) {
+ re->totvert += obr->totvert;
+ re->totvlak += obr->totvlak;
+ re->tothalo += obr->tothalo;
+ re->totstrand += obr->totstrand;
+ }
+ else
+ first= 0;
}
}
}
Modified: trunk/blender/source/blender/render/intern/source/shadbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadbuf.c 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/shadbuf.c 2008-01-21 14:18:24 UTC (rev 13332)
@@ -288,7 +288,7 @@
Material *ma= NULL;
float minz, maxz, vec[3], viewmat[4][4], obviewmat[4][4];
unsigned int lay = -1;
- int i, a, ok= 1;
+ int i, a, maxtotvert, ok= 1;
char *clipflag;
minz= 1.0e30f; maxz= -1.0e30f;
@@ -296,8 +296,12 @@
if(lar->mode & LA_LAYER) lay= lar->lay;
- clipflag= MEM_callocN(sizeof(char)*re->totvert, "autoclipflag");
+ maxtotvert= 0;
+ for(obr=re->objecttable.first; obr; obr=obr->next)
+ maxtotvert= MAX2(obr->totvert, maxtotvert);
+ clipflag= MEM_callocN(sizeof(char)*maxtotvert, "autoclipflag");
+
/* set clip in vertices when face visible */
for(i=0, obi=re->instancetable.first; obi; i++, obi=obi->next) {
obr= obi->obr;
Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c 2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c 2008-01-21 14:18:24 UTC (rev 13332)
@@ -1228,6 +1228,7 @@
Crossf(nstrand, vn, cross);
blend= INPR(nstrand, shi->surfnor);
+ blend= 1.0f - blend;
CLAMP(blend, 0.0f, 1.0f);
VecLerpf(vnor, nstrand, shi->surfnor, blend);
More information about the Bf-blender-cvs
mailing list