[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13341] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Jan 22 00:17:19 CET 2008


Revision: 13341
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13341
Author:   blendix
Date:     2008-01-22 00:17:19 +0100 (Tue, 22 Jan 2008)

Log Message:
-----------

Fix for error in approximate AO in last commit, made it really slow.
Also, duplis are now taking into account, the proper way to exclude
them is to set the material to be not traceable.

Removed an unnecessary pointer from the VlakRen struct to save some
memory, not really that significant, but still, saves 70 mb for 10
million faces.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/render/extern/include/RE_raytrace.h
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/occlusion.c
    trunk/blender/source/blender/render/intern/source/rayshade.c
    trunk/blender/source/blender/render/intern/source/raytrace.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/render/intern/source/strand.c
    trunk/blender/source/blender/render/intern/source/texture.c
    trunk/blender/source/blender/src/meshlaplacian.c
    trunk/blender/source/blender/yafray/intern/export_File.cpp
    trunk/blender/source/blender/yafray/intern/export_File.h
    trunk/blender/source/blender/yafray/intern/export_Plugin.cpp
    trunk/blender/source/blender/yafray/intern/export_Plugin.h
    trunk/blender/source/blender/yafray/intern/yafray_Render.cpp
    trunk/blender/source/blender/yafray/intern/yafray_Render.h

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-01-21 23:17:19 UTC (rev 13341)
@@ -2058,6 +2058,47 @@
 /************************************************/
 /*			Effectors							*/
 /************************************************/
+static float particle_falloff(PartDeflect *pd, float fac)
+{
+	float mindist= (pd->flag & PFIELD_USEMIN)? pd->mindist: 0.0f;
+
+#if 0
+	if(distance<=mindist) fallof= 1.0f;
+	else if(pd->flag & PFIELD_USEMAX) {
+		if(distance>pd->maxdist || mindist>=pd->maxdist) fallof= 0.0f;
+		else {
+			fallof= 1.0f - (distance-mindist)/(pd->maxdist - mindist);
+			if(ffall_val!=0.0f)
+				fallof = (float)pow(fallof, ffall_val+1.0);
+		}
+	}
+	else {
+		fallof= 1.0f/(1.0f + distance-mindist);
+		if(ffall_val!=0.0f)
+			fallof = (float)pow(fallof, ffall_val+1.0);
+	}
+
+	fac=VecLength(vec_to_part);
+#endif
+
+	if(fac < mindist) {
+		return 1.0f;
+	}
+	else if(pd->flag & PFIELD_USEMAX) {
+		if(fac>pd->maxdist || (pd->maxdist-mindist)<=0.0f)
+			return 0.0f;
+
+		fac= 1.0f - (fac-mindist)/(pd->maxdist-mindist);
+		printf("fac %f^%f\n", fac, pd->f_power);
+		return (float)pow((double)fac, (double)pd->f_power);
+	}
+	else {
+		fac+=1.0f-pd->mindist;
+
+		return (float)pow((double)fac,(double)-pd->f_power);
+	}
+}
+
 static float effector_falloff(PartDeflect *pd, float *eff_velocity, float *vec_to_part)
 {
 	float eff_dir[3], temp[3];
@@ -2071,6 +2112,8 @@
 	else switch(pd->falloff){
 		case PFIELD_FALL_SPHERE:
 			fac=VecLength(vec_to_part);
+			falloff= particle_falloff(pd, fac);
+#if 0
 			if(pd->flag&PFIELD_USEMAX && fac>pd->maxdist){
 				falloff=0.0f;
 				break;
@@ -2086,6 +2129,7 @@
 				fac=0.001f;
 
 			falloff=1.0f/(float)pow((double)fac,(double)pd->f_power);
+#endif
 			break;
 
 		case PFIELD_FALL_TUBE:

Modified: trunk/blender/source/blender/render/extern/include/RE_raytrace.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_raytrace.h	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/render/extern/include/RE_raytrace.h	2008-01-21 23:17:19 UTC (rev 13341)
@@ -89,7 +89,7 @@
 /* function callbacks for face type abstraction */
 typedef void (*RayCoordsFunc)(RayFace *face,
 	float **v1, float **v2, float **v3, float **v4);
-typedef int (*RayCheckFunc)(Isect *is, RayFace *face);
+typedef int (*RayCheckFunc)(Isect *is, int ob, RayFace *face);
 typedef float *(*RayObjectTransformFunc)(void *userdata, int ob);
 
 /* tree building and freeing */

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2008-01-21 23:17:19 UTC (rev 13341)
@@ -315,7 +315,6 @@
 	char puno;
 	char flag, ec;
 	RadFace *radface;
-	ObjectRen *obr;
 	int index;
 } VlakRen;
 
@@ -496,7 +495,6 @@
 #define R_DUPLI_TRANSFORMED	1
 #define R_ENV_TRANSFORMED	2
 #define R_TRANSFORMED		(1|2)
-#define R_DUPLI_ELEM		4
 
 #endif /* RENDER_TYPES_H */
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-21 23:17:19 UTC (rev 13341)
@@ -1042,7 +1042,6 @@
 	if(line) {
 		vlr= RE_findOrAddVlak(obr, obr->totvlak++);
 		vlr->flag= flag;
-		vlr->obr= obr;
 		vlr->v1= RE_findOrAddVert(obr, obr->totvert++);
 		vlr->v2= RE_findOrAddVert(obr, obr->totvert++);
 		vlr->v3= RE_findOrAddVert(obr, obr->totvert++);
@@ -1132,7 +1131,6 @@
 		if(adapt==0 || second){
 			vlr= RE_findOrAddVlak(obr, obr->totvlak++);
 			vlr->flag= flag;
-			vlr->obr= obr;
 			vlr->v1= v1;
 			vlr->v2= v2;
 			vlr->v3= RE_findOrAddVert(obr, obr->totvert++);
@@ -1162,7 +1160,6 @@
 			if(Inpf(anor,nor)<adapt_angle && w>adapt_pix){
 				vlr= RE_findOrAddVlak(obr, obr->totvlak++);
 				vlr->flag= flag;
-				vlr->obr= obr;
 				vlr->v1= v1;
 				vlr->v2= v2;
 				vlr->v3= RE_findOrAddVert(obr, obr->totvert++);
@@ -1232,7 +1229,6 @@
 
 	if(line) {
 		vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-		vlr->obr= obr;
 		vlr->v1= RE_findOrAddVert(obr, obr->totvert++);
 		vlr->v2= RE_findOrAddVert(obr, obr->totvert++);
 		vlr->v3= vlr->v2;
@@ -1257,7 +1253,6 @@
 	}
 	else {
 		vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-		vlr->obr= obr;
 		vlr->v1= v1;
 		vlr->v2= RE_findOrAddVert(obr, obr->totvert++);
 		vlr->v3= vlr->v2;
@@ -1289,7 +1284,6 @@
 		onevec[align]=1.0f;
 
 	vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-	vlr->obr= obr;
 	vlr->v1= RE_findOrAddVert(obr, obr->totvert++);
 	vlr->v2= RE_findOrAddVert(obr, obr->totvert++);
 	vlr->v3= RE_findOrAddVert(obr, obr->totvert++);
@@ -2159,7 +2153,7 @@
 	return;
 }
 
-static void displace_render_face(Render *re, VlakRen *vlr, float *scale)
+static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float *scale)
 {
 	ShadeInput shi;
 
@@ -2178,17 +2172,17 @@
 	
 	/* Displace the verts, flag is set when done */
 	if (!vlr->v1->flag)
-		displace_render_vert(re, vlr->obr, &shi, vlr->v1,0,  scale);
+		displace_render_vert(re, obr, &shi, vlr->v1,0,  scale);
 	
 	if (!vlr->v2->flag)
-		displace_render_vert(re, vlr->obr, &shi, vlr->v2, 1, scale);
+		displace_render_vert(re, obr, &shi, vlr->v2, 1, scale);
 
 	if (!vlr->v3->flag)
-		displace_render_vert(re, vlr->obr, &shi, vlr->v3, 2, scale);
+		displace_render_vert(re, obr, &shi, vlr->v3, 2, scale);
 
 	if (vlr->v4) {
 		if (!vlr->v4->flag)
-			displace_render_vert(re, vlr->obr, &shi, vlr->v4, 3, scale);
+			displace_render_vert(re, obr, &shi, vlr->v4, 3, scale);
 
 		/*	closest in displace value.  This will help smooth edges.   */ 
 		if ( fabs(vlr->v1->accum - vlr->v3->accum) > fabs(vlr->v2->accum - vlr->v4->accum)) 
@@ -2230,7 +2224,7 @@
 
 	for(i=0; i<obr->totvlak; i++){
 		vlr=RE_findOrAddVlak(obr, i);
-		displace_render_face(re, vlr, scale);
+		displace_render_face(re, obr, vlr, scale);
 	}
 	
 	/* Recalc vertex normals */
@@ -2297,7 +2291,6 @@
 	for(a=0; a<dl->parts; a++, index+=4) {
 
 		vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-		vlr->obr= obr;
 		vlr->v1= RE_findOrAddVert(obr, index[0]);
 		vlr->v2= RE_findOrAddVert(obr, index[1]);
 		vlr->v3= RE_findOrAddVert(obr, index[2]);
@@ -2420,7 +2413,6 @@
 			v4= RE_findOrAddVert(obr, p4);
 			
 			vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-			vlr->obr= obr;
 			vlr->v1= v1; vlr->v2= v2; vlr->v3= v3; vlr->v4= v4;
 			
 			flen= CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, n1);
@@ -2642,7 +2634,6 @@
 				for(a=0; a<dl->parts; a++, index+=3) {
 
 					vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-					vlr->obr = obr;
 					vlr->v1= RE_findOrAddVert(obr, startvert+index[0]);
 					vlr->v2= RE_findOrAddVert(obr, startvert+index[1]);
 					vlr->v3= RE_findOrAddVert(obr, startvert+index[2]);
@@ -2706,7 +2697,6 @@
 
 						for(; b<dl->nr; b++) {
 							vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-							vlr->obr= obr;
 							vlr->v1= RE_findOrAddVert(obr, p2);
 							vlr->v2= RE_findOrAddVert(obr, p1);
 							vlr->v3= RE_findOrAddVert(obr, p3);
@@ -3086,7 +3076,6 @@
 							flag= mface->flag & ME_SMOOTH;
 
 							vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-							vlr->obr= obr;
 							vlr->v1= RE_findOrAddVert(obr, vertofs+v1);
 							vlr->v2= RE_findOrAddVert(obr, vertofs+v2);
 							vlr->v3= RE_findOrAddVert(obr, vertofs+v3);
@@ -3167,7 +3156,6 @@
 						MVert *v1 = &mvert[medge->v2];
 
 						vlr= RE_findOrAddVlak(obr, obr->totvlak++);
-						vlr->obr= obr;
 						vlr->v1= RE_findOrAddVert(obr, vertofs+medge->v1);
 						vlr->v2= RE_findOrAddVert(obr, vertofs+medge->v2);
 						vlr->v3= vlr->v2;
@@ -4309,7 +4297,6 @@
 								VECCOPY(obi->dupliorco, dob->orco);
 								obi->dupliuv[0]= dob->uv[0];
 								obi->dupliuv[1]= dob->uv[1];
-								obi->flag |= R_DUPLI_ELEM;
 							}
 							else
 								assign_dupligroup_dupli(re, obi, obr);
@@ -4325,7 +4312,6 @@
 									VECCOPY(obi->dupliorco, dob->orco);
 									obi->dupliuv[0]= dob->uv[0];
 									obi->dupliuv[1]= dob->uv[1];
-									obi->flag |= R_DUPLI_ELEM;
 								}
 								else
 									assign_dupligroup_dupli(re, obi, obr);

Modified: trunk/blender/source/blender/render/intern/source/occlusion.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/occlusion.c	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/render/intern/source/occlusion.c	2008-01-21 23:17:19 UTC (rev 13341)
@@ -332,7 +332,7 @@
 
 	if(area) {
 		VECCOPY(v1, vlr->v1->co);
-		VECCOPY(v3, vlr->v2->co);
+		VECCOPY(v2, vlr->v2->co);
 		VECCOPY(v3, vlr->v3->co);
 		if(vlr->v4) VECCOPY(v4, vlr->v4->co);
 
@@ -589,9 +589,6 @@
 	/* count */
 	totface= 0;
 	for(obi=re->instancetable.first; obi; obi=obi->next) {
-		if(obi->flag & R_DUPLI_ELEM)
-			continue;
-
 		obr= obi->obr;
 		for(a=0; a<obr->totvlak; a++) {
 			if((a & 255)==0) vlr= obr->vlaknodes[a>>8].vlak;
@@ -625,9 +622,6 @@
 
 	/* make array of face pointers */
 	for(b=0, c=0, obi=re->instancetable.first; obi; obi=obi->next, c++) {
-		if(obi->flag & R_DUPLI_ELEM)
-			continue; /* temporary to avoid slow renders with loads of duplis */
-
 		obr= obi->obr;
 		for(a=0; a<obr->totvlak; a++) {
 			if((a & 255)==0) vlr= obr->vlaknodes[a>>8].vlak;

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c	2008-01-21 23:09:23 UTC (rev 13340)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c	2008-01-21 23:17:19 UTC (rev 13341)
@@ -77,7 +77,7 @@
 	*v4 = (vlr->v4)? vlr->v4->co: NULL;
 }
 
-static int vlr_check_intersect(Isect *is, RayFace *face)
+static int vlr_check_intersect(Isect *is, int ob, RayFace *face)
 {
 	VlakRen *vlr = (VlakRen*)face;
 

Modified: trunk/blender/source/blender/render/intern/source/raytrace.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list