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:
authorTon Roosendaal <ton@blender.org>2005-12-05 20:06:58 +0300
committerTon Roosendaal <ton@blender.org>2005-12-05 20:06:58 +0300
commit863234481e751ae94dd77b18d65ea76df65ec4b1 (patch)
treec4d47fca8e763b5f13bdf0ad47885be37ada4778 /source/blender/render
parentdd1f6c649a42258c71a2234eeede0b16b3ef245f (diff)
"Make Local" menu (Lkey) now has as first option to make only Objects
local, keeping all Data stuff (Mesh, Materials) from Library. The animation stuff on Object becomes local though; - Ipo - Action - NLA
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/ray.c41
-rw-r--r--source/blender/render/intern/source/rendercore.c17
2 files changed, 58 insertions, 0 deletions
diff --git a/source/blender/render/intern/source/ray.c b/source/blender/render/intern/source/ray.c
index 761f4e7fe0b..30973b0891b 100644
--- a/source/blender/render/intern/source/ray.c
+++ b/source/blender/render/intern/source/ray.c
@@ -2272,3 +2272,44 @@ void ray_shadow(ShadeInput *shi, LampRen *lar, float *shadfac)
}
+/* only when face points away from lamp, in direction of lamp, trace ray and find first exit point */
+void ray_translucent(ShadeInput *shi, LampRen *lar, float *distfac, float *co)
+{
+ Isect isec;
+ float lampco[3];
+
+ /* setup isec */
+ isec.mode= DDA_SHADOW_TRA;
+
+ if(lar->mode & LA_LAYER) isec.lay= lar->lay; else isec.lay= -1;
+
+ if(lar->type==LA_SUN || lar->type==LA_HEMI) {
+ lampco[0]= shi->co[0] - g_oc.ocsize*lar->vec[0];
+ lampco[1]= shi->co[1] - g_oc.ocsize*lar->vec[1];
+ lampco[2]= shi->co[2] - g_oc.ocsize*lar->vec[2];
+ }
+ else {
+ VECCOPY(lampco, lar->co);
+ }
+
+ isec.vlrorig= shi->vlr;
+
+ /* set up isec vec */
+ VECCOPY(isec.start, shi->co);
+ VECCOPY(isec.end, lampco);
+
+ if( d3dda(&isec)) {
+ /* we got a face */
+
+ /* render co */
+ co[0]= isec.start[0]+isec.labda*(isec.vec[0]);
+ co[1]= isec.start[1]+isec.labda*(isec.vec[1]);
+ co[2]= isec.start[2]+isec.labda*(isec.vec[2]);
+
+ *distfac= VecLength(isec.vec);
+ }
+ else
+ *distfac= 0.0f;
+}
+
+
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 8b6c4118786..4d29ffe3b43 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -1704,6 +1704,22 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
}
}
}
+
+ if(R.r.mode & R_RAYTRACE) {
+ extern void ray_translucent(ShadeInput *shi, LampRen *lar, float *distfac, float *co);
+ float co[3], distfac;
+
+ ray_translucent(shi, lar, &distfac, co);
+
+ if(distfac<0.01f*G.rt) {
+ // printf("distfac %f\n", distfac);
+ distfac= 1.0f - distfac/(0.01f*G.rt);
+ shr->diff[0]+= distfac;
+ shr->diff[1]+= distfac;
+ shr->diff[2]+= distfac;
+ }
+ }
+
/* specularity */
if(shadfac[3]>0.0 && shi->spec!=0.0 && !(lar->mode & LA_NO_SPEC)) {
@@ -2385,6 +2401,7 @@ void *shadepixel(float x, float y, int z, int facenr, int mask, float *col, floa
VecMulf(shi.vn, -1.0);
VecMulf(shi.facenor, -1.0);
shade_lamp_loop(&shi, &shr_t);
+
shr.diff[0]+= shi.translucency*shr_t.diff[0];
shr.diff[1]+= shi.translucency*shr_t.diff[1];
shr.diff[2]+= shi.translucency*shr_t.diff[2];