[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13230] trunk/blender/source/blender/ render/intern:

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jan 14 11:00:20 CET 2008


Revision: 13230
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13230
Author:   blendix
Date:     2008-01-14 11:00:20 +0100 (Mon, 14 Jan 2008)

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

Strand render shadow now only renders lines for shadow instead
of polygons, to avoid shadow flicker between frames.

Added some code that makes it possible to generate APixbuf's
from strands.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/include/strand.h
    trunk/blender/source/blender/render/intern/source/strand.c
    trunk/blender/source/blender/render/intern/source/zbuf.c

Modified: trunk/blender/source/blender/render/intern/include/strand.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/strand.h	2008-01-14 05:58:38 UTC (rev 13229)
+++ trunk/blender/source/blender/render/intern/include/strand.h	2008-01-14 10:00:20 UTC (rev 13230)
@@ -86,7 +86,7 @@
 } StrandSegment;
 
 void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint);
-void render_strand_segment(struct Render *re, float winmat[][4], struct StrandPart *spart, struct ZSpan *zspan, StrandSegment *sseg);
+void render_strand_segment(struct Render *re, float winmat[][4], struct StrandPart *spart, struct ZSpan *zspan, int totzspan, StrandSegment *sseg);
 void project_strands(Render *re, void (*projectfunc)(float *, float mat[][4], float *),  int do_pano, int do_buckets);
 
 struct RenderBuckets *init_buckets(struct Render *re);

Modified: trunk/blender/source/blender/render/intern/source/strand.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/strand.c	2008-01-14 05:58:38 UTC (rev 13229)
+++ trunk/blender/source/blender/render/intern/source/strand.c	2008-01-14 10:00:20 UTC (rev 13230)
@@ -758,7 +758,7 @@
 	zspan_scanconvert_strand(zspan, spart, jco1, jco3, jco4, do_strand_blend);
 }
 
-static void strand_render(Render *re, float winmat[][4], StrandPart *spart, ZSpan *zspan, StrandPoint *p1, StrandPoint *p2)
+static void strand_render(Render *re, StrandSegment *sseg, float winmat[][4], StrandPart *spart, ZSpan *zspan, int totzspan, StrandPoint *p1, StrandPoint *p2)
 {
 	if(spart) {
 		float t= p2->t;
@@ -774,17 +774,27 @@
 	}
 	else {
 		float hoco1[4], hoco2[3];
+		int a, obi, index;
+  
+		obi= sseg->obi - re->objectinstance;
+		index= sseg->strand->index;
 
-		projectvert(p1->co, winmat, hoco1);
-		projectvert(p2->co, winmat, hoco2);
-
-		/* render both strand and single pixel wire to counter aliasing */
-		zbufclip4(zspan, 0, 0, p1->hoco2, p1->hoco1, p2->hoco1, p2->hoco2, p1->clip2, p1->clip1, p2->clip1, p2->clip2);
-		zbufsinglewire(zspan, 0, 0, hoco1, hoco2);
+  		projectvert(p1->co, winmat, hoco1);
+  		projectvert(p2->co, winmat, hoco2);
+  
+		for(a=0; a<totzspan; a++) {
+#if 0
+			/* render both strand and single pixel wire to counter aliasing */
+			zbufclip4(re, &zspan[a], obi, index, p1->hoco2, p1->hoco1, p2->hoco1, p2->hoco2, p1->clip2, p1->clip1, p2->clip1, p2->clip2);
+#endif
+			/* only render a line for now, which makes the shadow map more
+			   similiar across frames, and so reduces flicker */
+			zbufsinglewire(&zspan[a], obi, index, hoco1, hoco2);
+		}
 	}
 }
-
-static int strand_segment_recursive(Render *re, float winmat[][4], StrandPart *spart, ZSpan *zspan, StrandSegment *sseg, StrandPoint *p1, StrandPoint *p2, int depth)
+  
+static int strand_segment_recursive(Render *re, float winmat[][4], StrandPart *spart, ZSpan *zspan, int totzspan, StrandSegment *sseg, StrandPoint *p1, StrandPoint *p2, int depth)
 {
 	StrandPoint p;
 	StrandBuffer *buffer= sseg->buffer;
@@ -817,21 +827,23 @@
 		do_strand_point_project(winmat, zspan, p.co2, p.hoco2, p.zco2);
 	}
 	else {
+#if 0
 		projectvert(p.co1, winmat, p.hoco1);
 		projectvert(p.co2, winmat, p.hoco2);
 		p.clip1= testclip(p.hoco1);
 		p.clip2= testclip(p.hoco2);
+#endif
 	}
 
-	if(!strand_segment_recursive(re, winmat, spart, zspan, sseg, p1, &p, depth+1))
-		strand_render(re, winmat, spart, zspan, p1, &p);
-	if(!strand_segment_recursive(re, winmat, spart, zspan, sseg, &p, p2, depth+1))
-		strand_render(re, winmat, spart, zspan, &p, p2);
+	if(!strand_segment_recursive(re, winmat, spart, zspan, totzspan, sseg, p1, &p, depth+1))
+		strand_render(re, sseg, winmat, spart, zspan, totzspan, p1, &p);
+	if(!strand_segment_recursive(re, winmat, spart, zspan, totzspan, sseg, &p, p2, depth+1))
+		strand_render(re, sseg, winmat, spart, zspan, totzspan, &p, p2);
 	
 	return 1;
 }
 
-void render_strand_segment(Render *re, float winmat[][4], StrandPart *spart, ZSpan *zspan, StrandSegment *sseg)
+void render_strand_segment(Render *re, float winmat[][4], StrandPart *spart, ZSpan *zspan, int totzspan, StrandSegment *sseg)
 {
 	StrandBuffer *buffer= sseg->buffer;
 	StrandPoint *p1= &sseg->point1;
@@ -852,6 +864,7 @@
 		do_strand_point_project(winmat, zspan, p2->co2, p2->hoco2, p2->zco2);
 	}
 	else {
+#if 0
 		projectvert(p1->co1, winmat, p1->hoco1);
 		projectvert(p1->co2, winmat, p1->hoco2);
 		projectvert(p2->co1, winmat, p2->hoco1);
@@ -860,10 +873,11 @@
 		p1->clip2= testclip(p1->hoco2);
 		p2->clip1= testclip(p2->hoco1);
 		p2->clip2= testclip(p2->hoco2);
+#endif
 	}
 
-	if(!strand_segment_recursive(re, winmat, spart, zspan, sseg, p1, p2, 0))
-		strand_render(re, winmat, spart, zspan, p1, p2);
+	if(!strand_segment_recursive(re, winmat, spart, zspan, totzspan, sseg, p1, p2, 0))
+		strand_render(re, sseg, winmat, spart, zspan, totzspan, p1, p2);
 }
 
 static void zbuffer_strands_filter(Render *re, RenderPart *pa, RenderLayer *rl, StrandPart *spart, float *pass)
@@ -1128,7 +1142,7 @@
 
 			spart.segment= &sseg;
 
-			render_strand_segment(re, winmat, &spart, &zspan, &sseg);
+			render_strand_segment(re, winmat, &spart, &zspan, 1, &sseg);
 		}
 	}
 

Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c	2008-01-14 05:58:38 UTC (rev 13229)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c	2008-01-14 10:00:20 UTC (rev 13230)
@@ -2354,7 +2354,7 @@
 					c4= zbuf_shadow_project(cache, sseg.v[3]-strand->vert, obwinmat, sseg.v[3]->co, ho4);
 
 					if(!(c1 & c2 & c3 & c4))
-						render_strand_segment(NULL, winmat, NULL, &zspan, &sseg);
+						render_strand_segment(re, winmat, NULL, &zspan, 1, &sseg);
 				}
 			}
 





More information about the Bf-blender-cvs mailing list