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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-08-15 23:35:03 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-08-15 23:35:03 +0400
commit3da40611d914e6177dd25e41baf5a6c5c4fe7154 (patch)
tree2fd760ad011c451a1a112389d22b4ae0bb882aa0 /source/blender/render
parent41dc419dcba1faf02dcb516e9afc523eb90eaa6a (diff)
2.5: Material buttons
* Transparency is now it's own panel, with a boolean toggle + enum for z/ray transparency (following mockup made by William). Also had to change DNA flags for this. * Disabled radiosity a bit more in render engine, it still had some effects like auto autosmooth. * Make some sliders in material buttons percentages in RNA. * Some other small tweaks in layout and naming.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_shader_ext.h3
-rw-r--r--source/blender/render/intern/source/convertblender.c18
-rw-r--r--source/blender/render/intern/source/rayshade.c8
-rw-r--r--source/blender/render/intern/source/rendercore.c4
-rw-r--r--source/blender/render/intern/source/shadeinput.c31
-rw-r--r--source/blender/render/intern/source/shadeoutput.c5
-rw-r--r--source/blender/render/intern/source/strand.c4
-rw-r--r--source/blender/render/intern/source/zbuf.c12
8 files changed, 27 insertions, 58 deletions
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index 0ad48fe97a9..5f5b493a9ec 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -55,7 +55,6 @@ typedef struct ShadeResult
float refl[3];
float refr[3];
float nor[3];
- float rad[3];
float winspeed[4];
} ShadeResult;
@@ -132,7 +131,7 @@ typedef struct ShadeInput
float layerfac;
/* texture coordinates */
- float lo[3], gl[3], ref[3], orn[3], winco[3], sticky[3], vcol[4], rad[3];
+ float lo[3], gl[3], ref[3], orn[3], winco[3], sticky[3], vcol[4];
float refcol[4], displace[3];
float strandco, tang[3], nmaptang[3], stress, winspeed[4];
float duplilo[3], dupliuv[3];
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 2b06f164c12..2c264ce2337 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -895,7 +895,7 @@ static void flag_render_node_material(Render *re, bNodeTree *ntree)
if(GS(node->id->name)==ID_MA) {
Material *ma= (Material *)node->id;
- if(ma->mode & MA_ZTRA)
+ if((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP))
re->flag |= R_ZTRA;
ma->flag |= MA_IS_USED;
@@ -917,7 +917,7 @@ static Material *give_render_material(Render *re, Object *ob, int nr)
if(re->r.mode & R_SPEED) ma->texco |= NEED_UV;
- if(ma->mode & MA_ZTRA)
+ if((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP))
re->flag |= R_ZTRA;
/* for light groups */
@@ -3025,11 +3025,6 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
}
need_nmap_tangent= 1;
}
-
- /* radio faces need autosmooth, to separate shared vertices in corners */
- if(re->r.mode & R_RADIO)
- if(ma->mode & MA_RADIO)
- do_autosmooth= 1;
}
}
@@ -3799,7 +3794,7 @@ static void set_phong_threshold(ObjectRen *obr)
static void set_fullsample_flag(Render *re, ObjectRen *obr)
{
VlakRen *vlr;
- int a, trace;
+ int a, trace, mode;
if(re->osa==0)
return;
@@ -3808,12 +3803,13 @@ static void set_fullsample_flag(Render *re, ObjectRen *obr)
for(a=obr->totvlak-1; a>=0; a--) {
vlr= RE_findOrAddVlak(obr, a);
+ mode= vlr->mat->mode;
- if(vlr->mat->mode & MA_FULL_OSA)
+ if(mode & MA_FULL_OSA)
vlr->flag |= R_FULL_OSA;
else if(trace) {
- if(vlr->mat->mode & MA_SHLESS);
- else if(vlr->mat->mode & (MA_RAYTRANSP|MA_RAYMIRROR))
+ if(mode & MA_SHLESS);
+ else if((mode & MA_RAYMIRROR) || ((mode & MA_TRANSP) && (mode & MA_RAYTRANSP)))
/* for blurry reflect/refract, better to take more samples
* inside the raytrace than as OSA samples */
if ((vlr->mat->gloss_mir == 1.0) && (vlr->mat->gloss_tra == 1.0))
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index 010930fcb85..0c8749ce329 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -361,7 +361,7 @@ static float shade_by_transmission(Isect *is, ShadeInput *shi, ShadeResult *shr)
{
float dx, dy, dz, d, p;
- if (0 == (shi->mat->mode & (MA_RAYTRANSP|MA_ZTRA)))
+ if (0 == (shi->mat->mode & MA_TRANSP))
return -1;
if (shi->mat->tx_limit <= 0.0f) {
@@ -468,7 +468,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo
if(depth>0) {
- if(shi.mat->mode_l & (MA_RAYTRANSP|MA_ZTRA) && shr.alpha < 1.0f) {
+ if((shi.mat->mode_l & MA_TRANSP) && shr.alpha < 1.0f) {
float nf, f, f1, refract[3], tracol[4];
tracol[0]= shi.r;
@@ -476,7 +476,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo
tracol[2]= shi.b;
tracol[3]= col[3]; // we pass on and accumulate alpha
- if(shi.mat->mode & MA_RAYTRANSP) {
+ if((shi.mat->mode & MA_TRANSP) && (shi.mat->mode & MA_RAYTRANSP)) {
/* odd depths: use normal facing viewer, otherwise flip */
if(traflag & RAY_TRAFLIP) {
float norm[3];
@@ -1183,7 +1183,7 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr)
float diff[3];
int do_tra, do_mir;
- do_tra= ((shi->mat->mode & (MA_RAYTRANSP)) && shr->alpha!=1.0f);
+ do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f);
do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f);
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 3a3d6f57830..b774bf6374d 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -477,7 +477,7 @@ static void add_filt_passes(RenderLayer *rl, int curmask, int rectx, int offset,
col= shr->refr;
break;
case SCE_PASS_RADIO:
- col= shr->rad;
+ col= NULL; // removed shr->rad;
break;
case SCE_PASS_NORMAL:
col= shr->nor;
@@ -569,7 +569,7 @@ static void add_passes(RenderLayer *rl, int offset, ShadeInput *shi, ShadeResult
col= shr->refr;
break;
case SCE_PASS_RADIO:
- col= shr->rad;
+ col= NULL; // removed shr->rad;
break;
case SCE_PASS_NORMAL:
col= shr->nor;
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index c860e9ac5d1..857b401e298 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -156,13 +156,13 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr)
/* depth >= 1 when ray-shading */
if(shi->depth==0) {
if(R.r.mode & R_RAYTRACE) {
- if(shi->ray_mirror!=0.0f || ((shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
+ if(shi->ray_mirror!=0.0f || ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
/* ray trace works on combined, but gives pass info */
ray_trace(shi, shr);
}
}
/* disable adding of sky for raytransp */
- if(shi->mat->mode & MA_RAYTRANSP)
+ if((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP))
if((shi->layflag & SCE_LAY_SKY) && (R.r.alphamode==R_ADDSKY))
shr->alpha= 1.0f;
}
@@ -190,7 +190,6 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr)
if(shi->passflag & (SCE_PASS_VECTOR|SCE_PASS_NORMAL|SCE_PASS_RADIO)) {
QUATCOPY(shr->winspeed, shi->winspeed);
VECCOPY(shr->nor, shi->vn);
- VECCOPY(shr->rad, shi->rad);
}
/* MIST */
@@ -558,10 +557,6 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
shi->orn[2]= -shi->vn[2];
}
- if(mode & MA_RADIO) {
- /* not supported */
- }
-
if(texco & TEXCO_REFL) {
/* mirror reflection color textures (and envmap) */
calc_R_ref(shi); /* wrong location for normal maps! XXXXXXXXXXXXXX */
@@ -580,8 +575,6 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
}
}
- shi->rad[0]= shi->rad[1]= shi->rad[2]= 0.0f;
-
/* this only avalailable for scanline renders */
if(shi->depth==0) {
if(texco & TEXCO_WINDOW) {
@@ -1154,24 +1147,6 @@ void shade_input_set_shade_texco(ShadeInput *shi)
shi->orn[2]= -shi->vn[2];
}
- if(mode & MA_RADIO) {
- float *r1, *r2, *r3;
-
- r1= RE_vertren_get_rad(obr, v1, 0);
- r2= RE_vertren_get_rad(obr, v2, 0);
- r3= RE_vertren_get_rad(obr, v3, 0);
-
- if(r1 && r2 && r3) {
- shi->rad[0]= (l*r3[0] - u*r1[0] - v*r2[0]);
- shi->rad[1]= (l*r3[1] - u*r1[1] - v*r2[1]);
- shi->rad[2]= (l*r3[2] - u*r1[2] - v*r2[2]);
- }
- else
- shi->rad[0]= shi->rad[1]= shi->rad[2]= 0.0f;
- }
- else
- shi->rad[0]= shi->rad[1]= shi->rad[2]= 0.0f;
-
if(texco & TEXCO_REFL) {
/* mirror reflection color textures (and envmap) */
calc_R_ref(shi); /* wrong location for normal maps! XXXXXXXXXXXXXX */
@@ -1199,8 +1174,6 @@ void shade_input_set_shade_texco(ShadeInput *shi)
}
}
}
- else
- shi->rad[0]= shi->rad[1]= shi->rad[2]= 0.0f;
/* this only avalailable for scanline renders */
if(shi->depth==0) {
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 2fbd93df0ce..d5c8cf30b30 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -1713,7 +1713,7 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
shi->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra);
/* note: shi->mode! */
- if(shi->mode & (MA_ZTRA|MA_RAYTRANSP)) {
+ if(shi->mode & MA_TRANSP) {
if(shi->spectra!=0.0f) {
float t = MAX3(shr->spec[0], shr->spec[1], shr->spec[2]);
t *= shi->spectra;
@@ -1730,11 +1730,12 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
shr->combined[1]+= shi->ambg;
shr->combined[2]+= shi->ambb;
+ /* removed
if(shi->combinedflag & SCE_PASS_RADIO) {
shr->combined[0]+= shi->r*shi->amb*shi->rad[0];
shr->combined[1]+= shi->g*shi->amb*shi->rad[1];
shr->combined[2]+= shi->b*shi->amb*shi->rad[2];
- }
+ }*/
/* add AO in combined? */
if(R.wrld.mode & WO_AMB_OCC) {
diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c
index a47fef840ca..6e2a0e966dc 100644
--- a/source/blender/render/intern/source/strand.c
+++ b/source/blender/render/intern/source/strand.c
@@ -234,8 +234,8 @@ void interpolate_shade_result(ShadeResult *shr1, ShadeResult *shr2, float t, Sha
interpolate_vec3(shr1->refl, shr2->refl, t, negt, shr->refl);
if(addpassflag & SCE_PASS_REFRACT)
interpolate_vec3(shr1->refr, shr2->refr, t, negt, shr->refr);
- if(addpassflag & SCE_PASS_RADIO)
- interpolate_vec3(shr1->rad, shr2->rad, t, negt, shr->rad);
+ /* removed if(addpassflag & SCE_PASS_RADIO)
+ interpolate_vec3(shr1->rad, shr2->rad, t, negt, shr->rad);*/
if(addpassflag & SCE_PASS_MIST)
interpolate_vec1(&shr1->mist, &shr2->mist, t, negt, &shr->mist);
}
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index 4436f3aa047..53a05dd0d67 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -2152,7 +2152,7 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart*,
if(obi->lay & lay) {
if(vlr->mat!=ma) {
ma= vlr->mat;
- nofill= ma->mode & (MA_ZTRA|MA_ONLYCAST);
+ nofill= (ma->mode & MA_ONLYCAST) || ((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP));
env= (ma->mode & MA_ENV);
wire= (ma->material_type == MA_TYPE_WIRE);
@@ -3306,7 +3306,7 @@ static int zbuffer_abuf(RenderPart *pa, APixstr *APixbuf, ListBase *apsmbase, Re
if(vlr->mat!=ma) {
ma= vlr->mat;
- dofill= (ma->mode & MA_ZTRA) && !(ma->mode & MA_ONLYCAST);
+ dofill= ((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP)) && !(ma->mode & MA_ONLYCAST);
}
if(dofill) {
@@ -3480,7 +3480,7 @@ void merge_transp_passes(RenderLayer *rl, ShadeResult *shr)
col= shr->refl;
break;
case SCE_PASS_RADIO:
- col= shr->rad;
+ col= NULL; // removed shr->rad;
break;
case SCE_PASS_REFRACT:
col= shr->refr;
@@ -3582,7 +3582,7 @@ void add_transp_passes(RenderLayer *rl, int offset, ShadeResult *shr, float alph
col= shr->refr;
break;
case SCE_PASS_RADIO:
- col= shr->rad;
+ col= NULL; // removed shr->rad;
break;
case SCE_PASS_NORMAL:
col= shr->nor;
@@ -3817,8 +3817,8 @@ static int addtosamp_shr(ShadeResult *samp_shr, ShadeSample *ssamp, int addpassf
if(addpassflag & SCE_PASS_REFRACT)
addvecmul(samp_shr->refr, shr->refr, fac);
- if(addpassflag & SCE_PASS_RADIO)
- addvecmul(samp_shr->rad, shr->rad, fac);
+ /* removed if(addpassflag & SCE_PASS_RADIO)
+ addvecmul(samp_shr->rad, shr->rad, fac);*/
if(addpassflag & SCE_PASS_MIST)
samp_shr->mist= samp_shr->mist+fac*shr->mist;