[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27525] branches/render25/source/blender/ render/intern: Render Branch: don't do shade once trick for strands now, this does not

Brecht Van Lommel brecht at blender.org
Mon Mar 15 23:03:24 CET 2010


Revision: 27525
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27525
Author:   blendix
Date:     2010-03-15 23:03:24 +0100 (Mon, 15 Mar 2010)

Log Message:
-----------
Render Branch: don't do shade once trick for strands now, this does not
work well at the moment. Full shading also leads to blurry color textures
at the moment, will have to think of a way around this.

Modified Paths:
--------------
    branches/render25/source/blender/render/intern/include/shading.h
    branches/render25/source/blender/render/intern/source/cache.c
    branches/render25/source/blender/render/intern/source/rayshade.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c

Modified: branches/render25/source/blender/render/intern/include/shading.h
===================================================================
--- branches/render25/source/blender/render/intern/include/shading.h	2010-03-15 20:38:04 UTC (rev 27524)
+++ branches/render25/source/blender/render/intern/include/shading.h	2010-03-15 22:03:24 UTC (rev 27525)
@@ -97,6 +97,7 @@
 
 void shade_color(struct Render *re, struct ShadeInput *shi, ShadeResult *shr);
 void shade_jittered_coords(struct Render *re, struct ShadeInput *shi, int max, float jitco[RE_MAX_OSA][3], int *totjitco);
+void shade_strand_surface_co(struct ShadeInput *shi, float co[3], float n[3]);
 void shade_surface_direct(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr);
 
 /* Utilities */

Modified: branches/render25/source/blender/render/intern/source/cache.c
===================================================================
--- branches/render25/source/blender/render/intern/source/cache.c	2010-03-15 20:38:04 UTC (rev 27524)
+++ branches/render25/source/blender/render/intern/source/cache.c	2010-03-15 22:03:24 UTC (rev 27525)
@@ -762,7 +762,7 @@
 	
 	/* do raytracing */
 
-	if(method == WO_LIGHT_SHADE_FULL && preprocess) {
+	if(method == WO_LIGHT_SHADE_FULL && preprocess && !shi->primitive.strand) {
 		/* for full shading, we need material & textures */
 		shade_input_init_material(re, shi);
 		shade_input_set_shade_texco(re, shi);
@@ -1065,9 +1065,23 @@
 						float *indirect= (re->db.wrld.mode & WO_INDIRECT_LIGHT)? shi->shading.indirect: NULL;
 						int added;
 
-						added= irr_cache_lookup(re, shi, cache,
-							ao, env, indirect,
-							geom->co, geom->dxco, geom->dyco, geom->vno, geom->vn, 1);
+						if(shi->primitive.strand) {
+							added= 0;
+#if 0
+							float co[3], n[3];
+
+							/* TODO: dxco/dyco? */
+							shade_strand_surface_co(shi, co, n);
+							added= irr_cache_lookup(re, shi, cache,
+								ao, env, indirect,
+								co, geom->dxco, geom->dyco, n, n, 1);
+#endif
+						}
+						else {
+							added= irr_cache_lookup(re, shi, cache,
+								ao, env, indirect,
+								geom->co, geom->dxco, geom->dyco, geom->vno, geom->vn, 1);
+						}
 						
 						if(added) {
 							if(indirect)

Modified: branches/render25/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/render25/source/blender/render/intern/source/rayshade.c	2010-03-15 20:38:04 UTC (rev 27524)
+++ branches/render25/source/blender/render/intern/source/rayshade.c	2010-03-15 22:03:24 UTC (rev 27525)
@@ -1941,7 +1941,6 @@
 		for(a=0; a<3; a++) {
 			normalize_v3_v3(nvec, ldir[a]);
 			negate_v3(nvec); // XXX negated
-
 			mat_bsdf_f(bsdf, &shi->material, &shi->geometry, shi->shading.thread, nvec, BSDF_DIFFUSE);
 			
 			dt= dot_v3v3(nvec, shi->geometry.vno);
@@ -2001,6 +2000,9 @@
 {
 	int method= re->db.wrld.ao_shading_method;
 
+	if(shi->primitive.strand)
+		method= WO_LIGHT_SHADE_NONE; /* exception for now */
+
 	if(ao)
 		wo_apply_ao(ao, shi, method, *ao, dir_ao, 1.0f);
 	if(env)
@@ -2045,20 +2047,11 @@
 	}
 	else {
 		/* for strands we sample at the root of the strand */
-		StrandRen *strand= shi->primitive.strand;
-		float *surfnor= render_strand_get_surfnor(shi->primitive.obr, strand, 0);
-		float offset[3];
-
-		copy_v3_v3(jitco[0], strand->vert[1].co);
+		shade_strand_surface_co(shi, jitco[0], basis[2]);
 		totjitco= 1;
-
-		/* offset to avoid self intersection */
-		sub_v3_v3v3(offset, strand->vert[2].co, jitco[0]);
-		normalize_v3(offset);
-		madd_v3_v3fl(jitco[0], offset, 1e-8f);
-
-		copy_v3_v3(basis[2], surfnor);
 		ortho_basis_v3v3_v3(basis[0], basis[1], basis[2]);
+
+		method= WO_LIGHT_SHADE_NONE; /* exception for now */
 	}
 
 	/* clear accumulation variables */

Modified: branches/render25/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-03-15 20:38:04 UTC (rev 27524)
+++ branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-03-15 22:03:24 UTC (rev 27525)
@@ -50,6 +50,7 @@
 #include "lamp.h"
 #include "material.h"
 #include "object_mesh.h"
+#include "object_strand.h"
 #include "pixelfilter.h"
 #include "raytrace.h"
 #include "render_types.h"
@@ -120,9 +121,24 @@
 		if(re->db.irrcache[thread]) {
 			ShadeGeometry *geom= &shi->geometry;
 
-			irr_cache_lookup(re, shi, re->db.irrcache[thread],
-				ao, env, indirect,
-				geom->co, geom->dxco, geom->dyco, geom->vno, geom->vn, 0);
+#if 0
+			if(shi->primitive.strand) {
+				float co[3], n[3];
+
+				/* TODO: dxco/dyco? */
+				shade_strand_surface_co(shi, co, n);
+
+				irr_cache_lookup(re, shi, re->db.irrcache[thread],
+					ao, env, indirect,
+					co, geom->dxco, geom->dyco, n, n, 0);
+			}
+			else
+#endif
+			{
+				irr_cache_lookup(re, shi, re->db.irrcache[thread],
+					ao, env, indirect,
+					geom->co, geom->dxco, geom->dyco, geom->vno, geom->vn, 0);
+			}
 		}
 		else
 			ray_ao_env_indirect(re, shi, ao, env, indirect, NULL, NULL, NULL, NULL, 0);
@@ -380,6 +396,23 @@
 	}
 }
 
+void shade_strand_surface_co(ShadeInput *shi, float co[3], float n[3])
+{
+	/* for strands we sample at the root of the strand */
+	StrandRen *strand= shi->primitive.strand;
+	float *surfnor= render_strand_get_surfnor(shi->primitive.obr, strand, 0);
+	float offset[3];
+
+	copy_v3_v3(co, strand->vert[1].co);
+
+	/* offset to avoid self intersection */
+	sub_v3_v3v3(offset, strand->vert[2].co, co);
+	normalize_v3(offset);
+	madd_v3_v3fl(co, offset, 1e-8f);
+
+	copy_v3_v3(n, surfnor);
+}
+
 static void shade_lamp_accumulate(Render *re, LampRen *lar, ShadeInput *shi, ShadeResult *shr, float lv[3], float lainf[3], float lashdw[3], int passflag)
 {
 	Material *ma= shi->material.mat;





More information about the Bf-blender-cvs mailing list