Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ebb <matt@mke3.net>2009-08-30 11:07:02 +0400
committerMatt Ebb <matt@mke3.net>2009-08-30 11:07:02 +0400
commit970c9214b543c95921dbb51a681457b5d6597133 (patch)
treed3f96d4271522bfdb16832342343c59f574e81d1
parent466d59461d060b291dc1df8bd8b26fcd8d59ca1d (diff)
* Fixes for shading objects inside volumes
-rw-r--r--source/blender/render/intern/include/render_types.h1
-rw-r--r--source/blender/render/intern/source/convertblender.c1
-rw-r--r--source/blender/render/intern/source/volumetric.c12
3 files changed, 13 insertions, 1 deletions
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index c4910f7733d..e50e498228d 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -419,6 +419,7 @@ typedef struct VolumeOb
typedef struct MatInside {
struct MatInside *next, *prev;
struct Material *ma;
+ struct ObjectInstanceRen *obi;
} MatInside;
typedef struct VolPrecachePart
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index e486daf2585..cf6246e3641 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -2999,6 +2999,7 @@ static void init_camera_inside_volumes(Render *re)
mi = MEM_mallocN(sizeof(MatInside), "camera inside material");
mi->ma = vo->ma;
+ mi->obi = obi;
BLI_addtail(&(re->render_volumes_inside), mi);
}
diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c
index 046a145e9da..4fa31674bbe 100644
--- a/source/blender/render/intern/source/volumetric.c
+++ b/source/blender/render/intern/source/volumetric.c
@@ -674,15 +674,25 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr)
{
MatInside *m;
Material *mat_backup;
+ ObjectInstanceRen *obi_backup;
+ float prev_alpha = shr->alpha;
//if (BLI_countlist(&R.render_volumes_inside) == 0) return;
/* XXX: extend to multiple volumes perhaps later */
mat_backup = shi->mat;
+ obi_backup = shi->obi;
+
m = R.render_volumes_inside.first;
shi->mat = m->ma;
+ shi->obi = m->obi;
+ shi->obr = m->obi->obr;
volume_trace(shi, shr, VOL_SHADE_INSIDE);
-
+ shr->alpha += prev_alpha;
+ CLAMP(shr->alpha, 0.f, 1.f);
+
shi->mat = mat_backup;
+ shi->obi = obi_backup;
+ shi->obr = obi_backup->obr;
} \ No newline at end of file