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>2006-02-04 18:07:48 +0300
committerTon Roosendaal <ton@blender.org>2006-02-04 18:07:48 +0300
commitbf8b4f293d190ba7152bd93c16f35966694a1049 (patch)
tree6a6a73ab4afc2286f345347dac6fc3c7ef300f5d /source/blender/render
parent98a0768028a659b30bd1a576c0bbdf9c4893dcff (diff)
New Material option: "OnlyCast". This makes the object only cast shadows,
not show up in renders, nor being mirrored.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/ray.c23
-rw-r--r--source/blender/render/intern/source/zbuf.c18
2 files changed, 24 insertions, 17 deletions
diff --git a/source/blender/render/intern/source/ray.c b/source/blender/render/intern/source/ray.c
index ff27a287339..e493fcee1e2 100644
--- a/source/blender/render/intern/source/ray.c
+++ b/source/blender/render/intern/source/ray.c
@@ -972,18 +972,21 @@ static int testnode(Isect *is, Node *no, OcVal ocval)
while(vlr) {
if(is->vlrorig != vlr) {
-
- ov= no->ov+nr;
- if( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) {
- //accepted++;
-
- isect.vlr= vlr;
- if(intersection(&isect)) {
- if(isect.labda<is->labda) *is= isect;
- found= 1;
+ /* I now... cpu cycle waste, might do smarter once */
+ if(is->mode==DDA_MIRROR && (vlr->mat->mode & MA_ONLYCAST));
+ else {
+ ov= no->ov+nr;
+ if( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) {
+ //accepted++;
+
+ isect.vlr= vlr;
+ if(intersection(&isect)) {
+ if(isect.labda<is->labda) *is= isect;
+ found= 1;
+ }
}
+ //else rejected++;
}
- //else rejected++;
}
nr++;
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index cc6764f8bc4..e853ba9e56e 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -1613,7 +1613,7 @@ void zbuffer_solid(RenderPart *pa, unsigned int lay, short layflag)
Material *ma=0;
int v, zvlnr;
unsigned short clipmask;
- short transp=0, env=0, wire=0;
+ short nofill=0, env=0, wire=0;
zbuf_alloc_span(&zspan, pa->rectx, pa->recty);
@@ -1650,7 +1650,7 @@ void zbuffer_solid(RenderPart *pa, unsigned int lay, short layflag)
if((vlr->flag & R_VISIBLE) && (vlr->lay & lay)) {
if(vlr->mat!=ma) {
ma= vlr->mat;
- transp= ma->mode & MA_ZTRA;
+ nofill= ma->mode & (MA_ZTRA|MA_ONLYCAST);
env= (ma->mode & MA_ENV);
wire= (ma->mode & MA_WIRE);
@@ -1658,7 +1658,7 @@ void zbuffer_solid(RenderPart *pa, unsigned int lay, short layflag)
else zspan.zbuffunc= zbufinvulGL4;
}
- if(transp==0) {
+ if(nofill==0) {
unsigned short partclip;
/* partclipping doesn't need viewplane clipping */
@@ -1922,10 +1922,10 @@ static void copyto_abufz(RenderPart *pa, int *arectz, int sample)
static void zbuffer_abuf(RenderPart *pa, APixstr *APixbuf, ListBase *apsmbase, unsigned int lay, short layflag)
{
ZSpan zspan;
- Material *ma=0;
+ Material *ma=NULL;
VlakRen *vlr=NULL;
float vec[3], hoco[4], mul, zval, fval;
- int v, zvlnr, zsample;
+ int v, zvlnr, zsample, dofill;
unsigned short clipmask;
zbuf_alloc_span(&zspan, pa->rectx, pa->recty);
@@ -1963,8 +1963,12 @@ static void zbuffer_abuf(RenderPart *pa, APixstr *APixbuf, ListBase *apsmbase, u
vlr= R.blovl[v>>8];
else vlr++;
- ma= vlr->mat;
- if(ma->mode & (MA_ZTRA)) {
+ if(vlr->mat!=ma) {
+ ma= vlr->mat;
+ dofill= (ma->mode & MA_ZTRA) && !(ma->mode & MA_ONLYCAST);
+ }
+
+ if(dofill) {
if((vlr->flag & R_VISIBLE) && (vlr->lay & lay)) {
unsigned short partclip;