[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34097] trunk/blender/source/blender/ render: Fix #23604: external shadows for volume materials don't work
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Jan 5 15:20:48 CET 2011
Revision: 34097
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34097
Author: blendix
Date: 2011-01-05 15:20:48 +0100 (Wed, 05 Jan 2011)
Log Message:
-----------
Fix #23604: external shadows for volume materials don't work
Modified Paths:
--------------
trunk/blender/source/blender/render/extern/include/RE_raytrace.h
trunk/blender/source/blender/render/intern/raytrace/rayobject.cpp
trunk/blender/source/blender/render/intern/source/rayshade.c
trunk/blender/source/blender/render/intern/source/rendercore.c
trunk/blender/source/blender/render/intern/source/volumetric.c
Modified: trunk/blender/source/blender/render/extern/include/RE_raytrace.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_raytrace.h 2011-01-05 14:00:14 UTC (rev 34096)
+++ trunk/blender/source/blender/render/extern/include/RE_raytrace.h 2011-01-05 14:20:48 UTC (rev 34097)
@@ -177,6 +177,7 @@
int lay; /* -1 default, set for layer lamps */
int skip; /* RE_SKIP_CULLFACE */
+ int check;
float col[4]; /* RGBA for shadow_tra */
@@ -195,14 +196,16 @@
#define RE_RAY_SHADOW_TRA 2
/* skip options */
-#define RE_SKIP_CULLFACE (1 << 0)
-
+#define RE_SKIP_CULLFACE (1 << 0)
/* if using this flag then *face should be a pointer to a VlakRen */
#define RE_SKIP_VLR_NEIGHBOUR (1 << 1)
-#define RE_SKIP_VLR_RENDER_CHECK (1 << 2)
-#define RE_SKIP_VLR_NON_SOLID_MATERIAL (1 << 3)
-#define RE_SKIP_VLR_BAKE_CHECK (1 << 4)
+/* check options */
+#define RE_CHECK_VLR_NONE 0
+#define RE_CHECK_VLR_RENDER 1
+#define RE_CHECK_VLR_NON_SOLID_MATERIAL 2
+#define RE_CHECK_VLR_BAKE 3
+
/* TODO use: FLT_MAX? */
#define RE_RAYTRACE_MAXDIST 1e33
Modified: trunk/blender/source/blender/render/intern/raytrace/rayobject.cpp
===================================================================
--- trunk/blender/source/blender/render/intern/raytrace/rayobject.cpp 2011-01-05 14:00:14 UTC (rev 34096)
+++ trunk/blender/source/blender/render/intern/raytrace/rayobject.cpp 2011-01-05 14:20:48 UTC (rev 34097)
@@ -195,19 +195,19 @@
return 0;
/* check if we should intersect this face */
- if(is->skip & RE_SKIP_VLR_RENDER_CHECK)
+ if(is->check == RE_CHECK_VLR_RENDER)
{
if(vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0)
return 0;
}
- else if(is->skip & RE_SKIP_VLR_NON_SOLID_MATERIAL)
+ else if(is->check == RE_CHECK_VLR_NON_SOLID_MATERIAL)
{
if(vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0)
return 0;
if(vlr_check_intersect_solid(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0)
return 0;
}
- else if(is->skip & RE_SKIP_VLR_BAKE_CHECK) {
+ else if(is->check == RE_CHECK_VLR_BAKE) {
if(vlr_check_bake(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0)
return 0;
}
Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c 2011-01-05 14:00:14 UTC (rev 34096)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c 2011-01-05 14:20:48 UTC (rev 34097)
@@ -707,7 +707,8 @@
VECCOPY(isec.vec, vec );
isec.labda = dist_mir > 0 ? dist_mir : RE_RAYTRACE_MAXDIST;
isec.mode= RE_RAY_MIRROR;
- isec.skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+ isec.check = RE_CHECK_VLR_RENDER;
+ isec.skip = RE_SKIP_VLR_NEIGHBOUR;
isec.hint = 0;
isec.orig.ob = obi;
@@ -1850,7 +1851,8 @@
RE_RC_INIT(isec, *shi);
isec.orig.ob = shi->obi;
isec.orig.face = shi->vlr;
- isec.skip = RE_SKIP_VLR_NEIGHBOUR|RE_SKIP_VLR_NON_SOLID_MATERIAL;
+ isec.check = RE_CHECK_VLR_NON_SOLID_MATERIAL;
+ isec.skip = RE_SKIP_VLR_NEIGHBOUR;
isec.hint = 0;
isec.hit.ob = 0;
@@ -1989,7 +1991,8 @@
RE_RC_INIT(isec, *shi);
isec.orig.ob = shi->obi;
isec.orig.face = shi->vlr;
- isec.skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+ isec.check = RE_CHECK_VLR_RENDER;
+ isec.skip = RE_SKIP_VLR_NEIGHBOUR;
isec.hint = 0;
isec.hit.ob = 0;
@@ -2209,7 +2212,8 @@
RE_rayobject_hint_bb( R.raytree, &bb_hint, min, max);
isec->hint = &bb_hint;
- isec->skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+ isec->check = RE_CHECK_VLR_RENDER;
+ isec->skip = RE_SKIP_VLR_NEIGHBOUR;
VECCOPY(vec, lampco);
while (samples < max_samples) {
@@ -2378,7 +2382,8 @@
isec->vec[1] = vec[1]+lampco[1]-isec->start[1];
isec->vec[2] = vec[2]+lampco[2]-isec->start[2];
isec->labda = 1.0f;
- isec->skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+ isec->check = RE_CHECK_VLR_RENDER;
+ isec->skip = RE_SKIP_VLR_NEIGHBOUR;
if(isec->mode==RE_RAY_SHADOW_TRA) {
/* isec.col is like shadfac, so defines amount of light (0.0 is full shadow) */
Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c 2011-01-05 14:00:14 UTC (rev 34096)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c 2011-01-05 14:20:48 UTC (rev 34097)
@@ -2422,7 +2422,8 @@
isec.orig.ob = obi;
isec.orig.face = vlr;
isec.userdata= bs->actob;
- isec.skip = RE_SKIP_VLR_NEIGHBOUR|RE_SKIP_VLR_BAKE_CHECK;
+ isec.check = RE_CHECK_VLR_BAKE;
+ isec.skip = RE_SKIP_VLR_NEIGHBOUR;
if(bake_intersect_tree(R.raytree, &isec, shi->co, shi->vn, sign, co, &dist)) {
if(!hit || len_v3v3(shi->co, co) < len_v3v3(shi->co, minco)) {
Modified: trunk/blender/source/blender/render/intern/source/volumetric.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/volumetric.c 2011-01-05 14:00:14 UTC (rev 34096)
+++ trunk/blender/source/blender/render/intern/source/volumetric.c 2011-01-05 14:20:48 UTC (rev 34097)
@@ -93,7 +93,8 @@
}
is.mode = RE_RAY_MIRROR;
- is.skip = RE_SKIP_VLR_RENDER_CHECK | RE_SKIP_VLR_NON_SOLID_MATERIAL;
+ is.check = RE_CHECK_VLR_NON_SOLID_MATERIAL;
+ is.skip = 0;
if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW))
is.lay= lar->lay;
@@ -122,6 +123,7 @@
isect->mode= RE_RAY_MIRROR;
isect->last_hit = NULL;
isect->lay= -1;
+ isect->check= RE_CHECK_VLR_NONE;
if (intersect_type == VOL_BOUNDS_DEPTH) {
isect->skip = RE_SKIP_VLR_NEIGHBOUR;
@@ -186,6 +188,7 @@
isect.labda = FLT_MAX;
isect.mode= RE_RAY_MIRROR;
+ isect.check = RE_CHECK_VLR_NONE;
isect.skip = RE_SKIP_VLR_NEIGHBOUR;
isect.orig.ob = (void*) shi->obi;
isect.orig.face = (void*)vlr;
More information about the Bf-blender-cvs
mailing list