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
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/render/intern/source/ray.c90
-rw-r--r--source/blender/render/intern/source/rendercore.c13
2 files changed, 55 insertions, 48 deletions
diff --git a/source/blender/render/intern/source/ray.c b/source/blender/render/intern/source/ray.c
index f600c3d7f29..4482ed31ef6 100644
--- a/source/blender/render/intern/source/ray.c
+++ b/source/blender/render/intern/source/ray.c
@@ -1144,7 +1144,7 @@ static int d3dda(Isect *is)
else {
static int coh_ocx1,coh_ocx2,coh_ocy1, coh_ocy2,coh_ocz1,coh_ocz2;
float dox, doy, doz;
- int coherent=1, nodecount=0;
+ int coherent=1, nodecount=0, eqval;
/* check coherence;
coh_test: 0=don't, 1=check
@@ -1238,46 +1238,62 @@ static int d3dda(Isect *is)
}
labdao= ddalabda;
-
- if(labdax<labday) {
- if(labday<labdaz) {
- xo+=dx;
- labdax+=ldx;
- } else if(labdax<labdaz) {
- xo+=dx;
- labdax+=ldx;
- } else {
- zo+=dz;
- labdaz+=ldz;
- if(labdax==labdaz) {
- xo+=dx;
- labdax+=ldx;
+
+ /* traversing ocree nodes need careful detection of smallest values, with proper
+ exceptions for equal labdas */
+ eqval= (labdax==labday);
+ if(labday==labdaz) eqval += 2;
+ if(labdax==labdaz) eqval += 4;
+
+ if(eqval) { // only 4 cases exist!
+ if(eqval==7) { // x=y=z
+ xo+=dx; labdax+=ldx;
+ yo+=dy; labday+=ldy;
+ zo+=dz; labdaz+=ldz;
+ }
+ else if(eqval==1) { // x=y
+ if(labday < labdaz) {
+ xo+=dx; labdax+=ldx;
+ yo+=dy; labday+=ldy;
+ }
+ else {
+ zo+=dz; labdaz+=ldz;
}
}
- } else if(labdax<labdaz) {
- yo+=dy;
- labday+=ldy;
- if(labday==labdax) {
- xo+=dx;
- labdax+=ldx;
+ else if(eqval==2) { // y=z
+ if(labdax < labday) {
+ xo+=dx; labdax+=ldx;
+ }
+ else {
+ yo+=dy; labday+=ldy;
+ zo+=dz; labdaz+=ldz;
+ }
}
- } else if(labday<labdaz) {
- yo+=dy;
- labday+=ldy;
- } else if(labday<labdax) {
- zo+=dz;
- labdaz+=ldz;
- if(labdaz==labday) {
- yo+=dy;
- labday+=ldy;
+ else { // x=z
+ if(labday < labdax) {
+ yo+=dy; labday+=ldy;
+ }
+ else {
+ xo+=dx; labdax+=ldx;
+ zo+=dz; labdaz+=ldz;
+ }
}
- } else {
- xo+=dx;
- labdax+=ldx;
- yo+=dy;
- labday+=ldy;
- zo+=dz;
- labdaz+=ldz;
+ }
+ else { // all three different, just three cases exist
+ eqval= (labdax<labday);
+ if(labday<labdaz) eqval += 2;
+ if(labdax<labdaz) eqval += 4;
+
+ if(eqval==7 || eqval==5) { // x smallest
+ xo+=dx; labdax+=ldx;
+ }
+ else if(eqval==2 || eqval==6) { // y smallest
+ yo+=dy; labday+=ldy;
+ }
+ else { // z smallest
+ zo+=dz; labdaz+=ldz;
+ }
+
}
ddalabda=MIN3(labdax,labday,labdaz);
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index eeeb96a62e9..9abb9fcd83f 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -1643,7 +1643,7 @@ void shade_color(ShadeInput *shi, ShadeResult *shr)
}
if(ma->mode & (MA_ZTRA|MA_RAYTRANSP)) {
- if(ma->fresnel_tra!=1.0)
+ if(ma->fresnel_tra!=0.0)
ma->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra);
}
@@ -2239,21 +2239,15 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
if(i>0.0 && !(lar->mode & LA_NO_DIFF)) {
if(ma->mode & MA_SHADOW_TRA) {
add_to_diffuse(shr->diff, shi, is, i*shadfac[0]*lar->r, i*shadfac[1]*lar->g, i*shadfac[2]*lar->b);
- //shr->diff[0]+= i*shadfac[0]*lar->r;
- //shr->diff[1]+= i*shadfac[1]*lar->g;
- //shr->diff[2]+= i*shadfac[2]*lar->b;
}
else {
add_to_diffuse(shr->diff, shi, is, i*lar->r, i*lar->g, i*lar->b);
- //shr->diff[0]+= i*lar->r;
- //shr->diff[1]+= i*lar->g;
- //shr->diff[2]+= i*lar->b;
}
}
}
if(ma->mode & (MA_ZTRA|MA_RAYTRANSP)) {
- if(ma->fresnel_tra!=1.0)
+ if(ma->fresnel_tra!=0.0)
ma->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra);
if(ma->spectra!=0.0) {
@@ -2272,17 +2266,14 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
if(shr->spec[2]<0.0) shr->spec[2]= 0.0;
shr->diff[0]+= ma->r*ma->amb*shi->rad[0];
- //shr->diff[0]*= ma->r;
shr->diff[0]+= ma->ambr;
if(shr->diff[0]<0.0) shr->diff[0]= 0.0;
shr->diff[1]+= ma->g*ma->amb*shi->rad[1];
- //shr->diff[1]*= ma->g;
shr->diff[1]+= ma->ambg;
if(shr->diff[1]<0.0) shr->diff[1]= 0.0;
shr->diff[2]+= ma->b*ma->amb*shi->rad[2];
- //shr->diff[2]*= ma->b;
shr->diff[2]+= ma->ambb;
if(shr->diff[2]<0.0) shr->diff[2]= 0.0;