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:
authorAndre Susano Pinto <andresusanopinto@gmail.com>2009-08-17 21:43:49 +0400
committerAndre Susano Pinto <andresusanopinto@gmail.com>2009-08-17 21:43:49 +0400
commit950b770c1ea0c05a907abc93ad7174a02432843f (patch)
tree12936d6440bc7a0710a2fc776d1e122e000ea71e /source/blender/render/intern
parent0e3acbaa386384f1b1d27a2b4e0f0dcd07c0e0e2 (diff)
parent931ffbedaa3e76a6ebec3df2af22176e504158db (diff)
svn merge -r 22371:22571 https://svn.blender.org/svnroot/bf-blender/branches/blender2.5/blender
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r--source/blender/render/intern/source/convertblender.c18
-rw-r--r--source/blender/render/intern/source/pipeline.c68
-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, 73 insertions, 77 deletions
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/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 31091ab020a..b417e07577c 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -879,33 +879,26 @@ static void renderresult_add_names(RenderResult *rr)
strcpy(rpass->name, get_pass_name(rpass->passtype, -1));
}
-
-/* only for temp buffer files, makes exact copy of render result */
-static void read_render_result(Render *re, int sample)
+/* called for reading temp files, and for external engines */
+static int read_render_result_from_file(char *filename, RenderResult *rr)
{
RenderLayer *rl;
RenderPass *rpass;
void *exrhandle= IMB_exr_get_handle();
int rectx, recty;
- char str[FILE_MAX];
-
- RE_FreeRenderResult(re->result);
- re->result= new_render_result(re, &re->disprect, 0, RR_USEMEM);
- render_unique_exr_name(re, str, sample);
- if(IMB_exr_begin_read(exrhandle, str, &rectx, &recty)==0) {
+ if(IMB_exr_begin_read(exrhandle, filename, &rectx, &recty)==0) {
IMB_exr_close(exrhandle);
- printf("cannot read: %s\n", str);
- return;
+ return 0;
}
- printf("read exr tmp file: %s\n", str);
-
- if(re->result == NULL || rectx!=re->result->rectx || recty!=re->result->recty) {
+ if(rr == NULL || rectx!=rr->rectx || recty!=rr->recty) {
printf("error in reading render result\n");
+ IMB_exr_close(exrhandle);
+ return 0;
}
else {
- for(rl= re->result->layers.first; rl; rl= rl->next) {
+ for(rl= rr->layers.first; rl; rl= rl->next) {
/* combined */
if(rl->rectf) {
@@ -925,10 +918,27 @@ static void read_render_result(Render *re, int sample)
}
IMB_exr_read_channels(exrhandle);
- renderresult_add_names(re->result);
+ renderresult_add_names(rr);
}
IMB_exr_close(exrhandle);
+
+ return 1;
+}
+
+/* only for temp buffer files, makes exact copy of render result */
+static void read_render_result(Render *re, int sample)
+{
+ char str[FILE_MAX];
+
+ RE_FreeRenderResult(re->result);
+ re->result= new_render_result(re, &re->disprect, 0, RR_USEMEM);
+
+ render_unique_exr_name(re, str, sample);
+ printf("read exr tmp file: %s\n", str);
+
+ if(!read_render_result_from_file(str, re->result))
+ printf("cannot read: %s\n", str);
}
/* *************************************************** */
@@ -2571,8 +2581,15 @@ static int render_initialize_from_scene(Render *re, Scene *scene, int anim, int
/* check all scenes involved */
tag_scenes_for_render(re);
- /* make sure dynamics are up to date */
- update_physics_cache(re, scene, anim_init);
+ /*
+ * Disabled completely for now,
+ * can be later set as render profile option
+ * and default for background render.
+ */
+ if(0) {
+ /* make sure dynamics are up to date */
+ update_physics_cache(re, scene, anim_init);
+ }
if(scene->r.scemode & R_SINGLE_LAYER)
push_render_result(re);
@@ -2948,7 +2965,7 @@ void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info)
/* loads in image into a result, size must match
* x/y offsets are only used on a partial copy when dimensions dont match */
-void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *filename, int x, int y)
+void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, char *filename)
{
ImBuf *ibuf = IMB_loadiffname(filename, IB_rect);
@@ -2959,7 +2976,7 @@ void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *file
memcpy(layer->rectf, ibuf->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
} else {
- if ((ibuf->x - x >= layer->rectx) && (ibuf->y - y >= layer->recty)) {
+ if ((ibuf->x >= layer->rectx) && (ibuf->y >= layer->recty)) {
ImBuf *ibuf_clip;
if(ibuf->rect_float==NULL)
@@ -2967,7 +2984,7 @@ void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *file
ibuf_clip = IMB_allocImBuf(layer->rectx, layer->recty, 32, IB_rectfloat, 0);
if(ibuf_clip) {
- IMB_rectcpy(ibuf_clip, ibuf, 0,0, x,y, layer->rectx, layer->recty);
+ IMB_rectcpy(ibuf_clip, ibuf, 0,0, 0,0, layer->rectx, layer->recty);
memcpy(layer->rectf, ibuf_clip->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
IMB_freeImBuf(ibuf_clip);
@@ -2987,6 +3004,15 @@ void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *file
BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to load '%s'\n", filename);
}
}
+
+void RE_result_load_from_file(RenderResult *result, ReportList *reports, char *filename)
+{
+ if(!read_render_result_from_file(filename, result)) {
+ BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to load '%s'\n", filename);
+ return;
+ }
+}
+
static void external_render_3d(Render *re, RenderEngineType *type)
{
RenderEngine engine;
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index 071c70ae504..05c961d49de 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -582,7 +582,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) {
@@ -686,7 +686,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;
@@ -694,7 +694,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];
@@ -1402,7 +1402,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);
/* raytrace mirror amd refract like to separate the spec color */
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 7e9578d179e..94d7651a03c 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -478,7 +478,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;
@@ -576,7 +576,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 030091b80f6..0da2f0b1c9d 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;
}
@@ -191,7 +191,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 */
@@ -569,10 +568,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 */
@@ -591,8 +586,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) {
@@ -1165,24 +1158,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 */
@@ -1210,8 +1185,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;