diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-03-30 16:01:17 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-03-30 16:01:17 +0400 |
commit | 253de0ed86f273d0032acbbd0b8237a358b35cbd (patch) | |
tree | c75b539afcc64851d3b0a13de21e5dd02c41bb4c /source/blender/render | |
parent | 052cb2afd22b9f54fdb1528066e6e3cba6db6e99 (diff) |
* Assign weight from bones in weight paint mode now respects paint face
mask, also avoid making vertex groups if they will not be filled.
* Add back image pin option in image editor header.
* Fix deep shadow not respecting Cast Buffer Shadows option.
* Tangent space normal map baking should work again now.
* Fix a problem with particle duplis, due to own bugfix for #20350,
the problem for that seems to be in dupliverts, not particles.
* Fix external multires data link getting lost on exiting editmode.
(commits 27776,27777,27830,27840,27841,27862 by Brecht from render25 branch)
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_raytrace.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/raytrace/rayobject.cpp | 16 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 22 | ||||
-rw-r--r-- | source/blender/render/intern/source/zbuf.c | 5 |
5 files changed, 23 insertions, 23 deletions
diff --git a/source/blender/render/extern/include/RE_raytrace.h b/source/blender/render/extern/include/RE_raytrace.h index 317de5b9954..215dd816a4e 100644 --- a/source/blender/render/extern/include/RE_raytrace.h +++ b/source/blender/render/extern/include/RE_raytrace.h @@ -201,6 +201,7 @@ struct Isect #define RE_SKIP_VLR_NEIGHBOUR (1 << 1) #define RE_SKIP_VLR_RENDER_CHECK (1 << 2) #define RE_SKIP_VLR_NON_SOLID_MATERIAL (1 << 3) +#define RE_SKIP_VLR_BAKE_CHECK (1 << 4) /* TODO use: FLT_MAX? */ #define RE_RAYTRACE_MAXDIST 1e33 diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index 19e41b0f92a..024577e9f1f 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -165,6 +165,11 @@ static inline int vlr_check_intersect_solid(Isect *is, ObjectInstanceRen* obi, V return 0; } +static inline int vlr_check_bake(Isect *is, ObjectInstanceRen* obi, VlakRen *vlr) +{ + return (obi->obr->ob != is->userdata); +} + static inline int rayface_check_cullface(RayFace *face, Isect *is) { float nor[3]; @@ -189,17 +194,24 @@ static int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *is) if(is->orig.ob == face->ob && is->orig.face == face->face) return 0; - + /* check if we should intersect this face */ if(is->skip & RE_SKIP_VLR_RENDER_CHECK) { if(vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0) return 0; } - if(is->skip & RE_SKIP_VLR_NON_SOLID_MATERIAL) + else if(is->skip & RE_SKIP_VLR_NON_SOLID_MATERIAL) { + if(vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0) + return 0; if(vlr_check_intersect_solid(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0) return 0; } + else if(is->skip & RE_SKIP_VLR_BAKE_CHECK) { + if(vlr_check_bake(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face ) == 0) + return 0; + } + if(is->skip & RE_SKIP_CULLFACE) { if(rayface_check_cullface(face, is) == 0) diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 9c589ee1b64..015922216f9 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -1856,7 +1856,7 @@ static void ray_ao_qmc(ShadeInput *shi, float *ao, float *env) RE_RC_INIT(isec, *shi); isec.orig.ob = shi->obi; isec.orig.face = shi->vlr; - isec.skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK | RE_SKIP_VLR_NON_SOLID_MATERIAL; + isec.skip = RE_SKIP_VLR_NEIGHBOUR|RE_SKIP_VLR_NON_SOLID_MATERIAL; isec.hint = 0; isec.hit.ob = 0; diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 7375ea0f863..d9521bc892f 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -2266,21 +2266,8 @@ static void bake_displacement(void *handle, ShadeInput *shi, float dist, int x, } } -#if 0 -static int bake_check_intersect(Isect *is, int ob, RayFace *face) -{ - BakeShade *bs = (BakeShade*)is->userdata; - - /* no direction checking for now, doesn't always improve the result - * (INPR(shi->facenor, bs->dir) > 0.0f); */ - - return (R.objectinstance[ob & ~RE_RAY_TRANSFORM_OFFS].obr->ob != bs->actob); -} -#endif - static int bake_intersect_tree(RayObject* raytree, Isect* isect, float *start, float *dir, float sign, float *hitco, float *dist) { - //TODO, validate against blender 2.4x, results may have changed. float maxdist; int hit; @@ -2288,7 +2275,7 @@ static int bake_intersect_tree(RayObject* raytree, Isect* isect, float *start, f if(R.r.bake_maxdist > 0.0f) maxdist= R.r.bake_maxdist; else - maxdist= FLT_MAX + R.r.bake_biasdist; + maxdist= RE_RAYTRACE_MAXDIST + R.r.bake_biasdist; /* 'dir' is always normalized */ VECADDFAC(isect->start, start, dir, -R.r.bake_biasdist); @@ -2299,10 +2286,6 @@ static int bake_intersect_tree(RayObject* raytree, Isect* isect, float *start, f isect->labda = maxdist; - /* TODO, 2.4x had this... - hit = RE_ray_tree_intersect_check(R.raytree, isect, bake_check_intersect); - ...the active object may NOT be ignored in some cases. - */ hit = RE_rayobject_raycast(raytree, isect); if(hit) { hitco[0] = isect->start[0] + isect->labda*isect->vec[0]; @@ -2432,7 +2415,8 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v) isec.orig.ob = obi; isec.orig.face = vlr; - isec.userdata= bs; + isec.userdata= bs->actob; + isec.skip = RE_SKIP_VLR_NEIGHBOUR|RE_SKIP_VLR_BAKE_CHECK; if(bake_intersect_tree(R.raytree, &isec, shi->co, shi->vn, sign, co, &dist)) { if(!hit || len_v3v3(shi->co, co) < len_v3v3(shi->co, minco)) { diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 2e6892cbc1c..4f872a238cd 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -3312,7 +3312,10 @@ static int zbuffer_abuf(Render *re, RenderPart *pa, APixstr *APixbuf, ListBase * if(vlr->mat!=ma) { ma= vlr->mat; - dofill= shadow || (((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP)) && !(ma->mode & MA_ONLYCAST)); + if(shadow) + dofill= (ma->mode & MA_SHADBUF); + else + dofill= (((ma->mode & MA_TRANSP) && (ma->mode & MA_ZTRANSP)) && !(ma->mode & MA_ONLYCAST)); } if(dofill) { |