[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13474] trunk/blender/source/blender/ render:
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Jan 30 14:35:35 CET 2008
Revision: 13474
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13474
Author: blendix
Date: 2008-01-30 14:35:28 +0100 (Wed, 30 Jan 2008)
Log Message:
-----------
- Bugfix for ztransp not being filled into the z-pass after FSA changes.
- Bugfix for speedvectors being not properly set for some strands.
Modified Paths:
--------------
trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
trunk/blender/source/blender/render/intern/source/convertblender.c
trunk/blender/source/blender/render/intern/source/rendercore.c
trunk/blender/source/blender/render/intern/source/shadeinput.c
trunk/blender/source/blender/render/intern/source/strand.c
trunk/blender/source/blender/render/intern/source/zbuf.c
Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h 2008-01-30 13:35:28 UTC (rev 13474)
@@ -47,7 +47,7 @@
{
float combined[4];
float col[4];
- float alpha, mist;
+ float alpha, mist, z;
float diff[3]; /* no ramps, shadow, etc */
float spec[3];
float shad[3];
Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-01-30 13:35:28 UTC (rev 13474)
@@ -4746,7 +4746,7 @@
else strand++;
index= RE_strandren_get_face(obr, strand, 0);
- if(index && *index) {
+ if(index) {
speed= RE_strandren_get_winspeed(obi, strand, 1);
/* interpolate speed vectors from strand surface */
Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c 2008-01-30 13:35:28 UTC (rev 13474)
@@ -359,7 +359,7 @@
switch(rpass->passtype) {
case SCE_PASS_Z:
fp= rpass->rect + offset;
- *fp= -shi->co[2];
+ *fp= shr->z;
break;
case SCE_PASS_RGBA:
col= shr->col;
@@ -451,7 +451,7 @@
switch(rpass->passtype) {
case SCE_PASS_Z:
fp= rpass->rect + offset;
- *fp= -shi->co[2];
+ *fp= shr->z;
break;
case SCE_PASS_RGBA:
col= shr->col;
Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c 2008-01-30 13:35:28 UTC (rev 13474)
@@ -186,6 +186,8 @@
}
else shr->combined[3]= 1.0f;
+ /* add z */
+ shr->z= -shi->co[2];
}
/* **************************************************************************** */
Modified: trunk/blender/source/blender/render/intern/source/strand.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/strand.c 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/strand.c 2008-01-30 13:35:28 UTC (rev 13474)
@@ -214,6 +214,8 @@
}
/* optim... */
if(addpassflag & ~(SCE_PASS_VECTOR)) {
+ if(addpassflag & SCE_PASS_Z)
+ interpolate_vec1(&shr1->z, &shr2->z, t, negt, &shr->z);
if(addpassflag & SCE_PASS_RGBA)
interpolate_vec4(shr1->col, shr2->col, t, negt, shr->col);
if(addpassflag & SCE_PASS_NORMAL) {
@@ -411,6 +413,7 @@
ZSpan *zspan;
APixstrand *apixbuf;
+ int *totapixbuf;
int *rectz;
long *rectdaps;
int rectx, recty;
@@ -483,6 +486,8 @@
return zspan->curpstrand;
}
+#define MAX_ZROW 2000
+
static void do_strand_fillac(void *handle, int x, int y, float u, float v, float z)
{
StrandPart *spart= (StrandPart*)handle;
@@ -528,7 +533,7 @@
{apn->obi[n]= obi; apn->p[n]= strnr; apn->z[n]= zverg; apn->mask[n]= mask; apn->v[n]= t; apn->u[n]= s; apn->seg[n]= seg; break; }
/* add to pixel list */
- if(zverg < bufferz) {
+ if(zverg < bufferz && (spart->totapixbuf[offset] < MAX_ZROW)) {
t = u*spart->t[0] + v*spart->t[1] + (1.0f-u-v)*spart->t[2];
s = fabs(u*spart->s[0] + v*spart->s[1] + (1.0f-u-v)*spart->s[2]);
@@ -551,6 +556,7 @@
strand_shade_refcount(cache, sseg->v[1]);
strand_shade_refcount(cache, sseg->v[2]);
+ spart->totapixbuf[offset]++;
}
}
@@ -875,6 +881,8 @@
BLI_memarena_free(memarena);
+ spart.totapixbuf= MEM_callocN(sizeof(int)*pa->rectx*pa->recty, "totapixbuf");
+
if(!re->test_break()) {
/* render segments in sorted order */
sortseg= sortsegments;
@@ -907,6 +915,7 @@
if(sortsegments)
MEM_freeN(sortsegments);
+ MEM_freeN(spart.totapixbuf);
zbuf_free_span(&zspan);
Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c 2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c 2008-01-30 13:35:28 UTC (rev 13474)
@@ -3575,6 +3575,11 @@
int pixsize= 3;
switch(rpass->passtype) {
+ case SCE_PASS_Z:
+ fp= rpass->rect + offset;
+ if(shr->z < *fp)
+ *fp= shr->z;
+ break;
case SCE_PASS_RGBA:
fp= rpass->rect + 4*offset;
addAlphaOverFloat(fp, shr->col);
@@ -3801,6 +3806,8 @@
addAlphaUnderFloat(samp_shr->combined, shr->combined);
+ samp_shr->z= MIN2(samp_shr->z, shr->z);
+
if(addpassflag & SCE_PASS_VECTOR) {
QUATCOPY(samp_shr->winspeed, shr->winspeed);
}
@@ -4071,6 +4078,8 @@
/* for each mask-sample we alpha-under colors. then in end it's added using filter */
memset(samp_shr, 0, sizeof(ShadeResult)*R.osa);
+ for(a=0; a<R.osa; a++)
+ samp_shr[a].z= 10e10f;
/* nice this memset, but speed vectors are not initialized OK then. it is sufficient to only clear 1 (see merge_transp_passes) */
if(addpassflag & SCE_PASS_VECTOR)
More information about the Bf-blender-cvs
mailing list