[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27394] branches/render25/source/blender/ render/intern/source: Render Branch: strands rendering now does raytraced ao/env/indirect at the
Brecht Van Lommel
brecht at blender.org
Wed Mar 10 20:16:57 CET 2010
Revision: 27394
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27394
Author: blendix
Date: 2010-03-10 20:16:56 +0100 (Wed, 10 Mar 2010)
Log Message:
-----------
Render Branch: strands rendering now does raytraced ao/env/indirect at the
root of the strand just like approximate.
Modified Paths:
--------------
branches/render25/source/blender/render/intern/source/object_particle.c
branches/render25/source/blender/render/intern/source/rayshade.c
Modified: branches/render25/source/blender/render/intern/source/object_particle.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object_particle.c 2010-03-10 19:02:50 UTC (rev 27393)
+++ branches/render25/source/blender/render/intern/source/object_particle.c 2010-03-10 19:16:56 UTC (rev 27394)
@@ -616,7 +616,7 @@
float pa_time, pa_birthtime, pa_dietime;
float random, simplify[2];
int i, a, k, max_k=0, totpart, dosimplify = 0, dosurfacecache = 0;
- int totchild=0;
+ int totchild=0, dosurfacenor=0;
int seed, path_nbr=0, num;
int totface, *origindex = 0;
char **uv_name=0;
@@ -786,9 +786,15 @@
if(re->params.r.mode & R_SPEED)
dosurfacecache= 1;
- else if((re->db.wrld.mode & (WO_AMB_OCC|WO_ENV_LIGHT|WO_INDIRECT_LIGHT)) && (re->db.wrld.ao_gather_method == WO_LIGHT_GATHER_APPROX))
- if(ma->amb != 0.0f)
+ else if(re->db.wrld.mode & (WO_AMB_OCC|WO_ENV_LIGHT|WO_INDIRECT_LIGHT) && ma->amb!=0.0f) {
+ if(re->db.wrld.ao_gather_method == WO_LIGHT_GATHER_APPROX)
dosurfacecache= 1;
+ else
+ dosurfacenor= 1;
+ }
+
+ if(ma->mode_l & MA_STR_SURFDIFF)
+ dosurfacenor= 1;
totface= psmd->dm->getNumFaces(psmd->dm);
origindex= psmd->dm->getFaceDataArray(psmd->dm, CD_ORIGINDEX);
@@ -939,7 +945,7 @@
}
/* surface normal shading setup */
- if(ma->mode_l & MA_STR_SURFDIFF) {
+ if(dosurfacenor) {
mul_m3_v3(nmat, nor);
sd.surfnor= nor;
}
Modified: branches/render25/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/render25/source/blender/render/intern/source/rayshade.c 2010-03-10 19:02:50 UTC (rev 27393)
+++ branches/render25/source/blender/render/intern/source/rayshade.c 2010-03-10 19:16:56 UTC (rev 27394)
@@ -57,6 +57,7 @@
#include "material.h"
#include "object.h"
#include "object_mesh.h"
+#include "object_strand.h"
#include "pixelfilter.h"
#include "raycounter.h"
#include "rayobject.h"
@@ -1960,17 +1961,36 @@
maxdist= re->db.wrld.aodist;
nearest= (indirect || (ao && (re->db.wrld.aomode & WO_LIGHT_DIST)) || Rmean);
- /* local orthonormal basis */
- if((re->db.wrld.ao_bump_method == WO_LIGHT_BUMP_FULL) || !(re->db.wrld.aomode & WO_LIGHT_CACHE))
- negate_v3_v3(basis[2], shi->geometry.vn);
- else
- negate_v3_v3(basis[2], shi->geometry.vno);
+ if(!shi->primitive.strand) {
+ /* jittered starting coordinates */
+ shade_jittered_coords(re, shi, totsample, jitco, &totjitco);
- ortho_basis_v3v3_v3(basis[0], basis[1], basis[2]);
+ /* local orthonormal basis */
+ if((re->db.wrld.ao_bump_method == WO_LIGHT_BUMP_FULL) || !(re->db.wrld.aomode & WO_LIGHT_CACHE))
+ negate_v3_v3(basis[2], shi->geometry.vn);
+ else
+ negate_v3_v3(basis[2], shi->geometry.vno);
- /* jittered starting coordinates */
- shade_jittered_coords(re, shi, totsample, jitco, &totjitco);
+ ortho_basis_v3v3_v3(basis[0], basis[1], basis[2]);
+ }
+ 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);
+ 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]);
+ }
+
/* clear accumulation variables */
accum_ao= 0.0f;
zero_v3(accum_env);
More information about the Bf-blender-cvs
mailing list