diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-11-23 17:10:05 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-11-23 17:10:05 +0300 |
commit | 885593ca21e2c8cc6f15eb9c1cd841c1fa20fa4b (patch) | |
tree | 9a991acc34ae033ddfe1d7e926f94c2d52117376 /source/blender/render | |
parent | 45a53c4749799b4549c18119e8ca2a996674891c (diff) |
Fix for bugs #6709 and #7005:
- SSS not working with negative scale objects.
- Fluids + SSS not always rendering smooth normals correct.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 7 | ||||
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 13 |
2 files changed, 12 insertions, 8 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 29b48413ca7..ca9c7652441 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1883,9 +1883,10 @@ static void init_render_mesh(Render *re, Object *ob, Object *par, int only_verts MTC_Mat4MulVecfl(mat, ver->co); if(useFluidmeshNormals) { - xn = mvert->no[0]/ 32767.0; - yn = mvert->no[1]/ 32767.0; - zn = mvert->no[2]/ 32767.0; + /* normals are inverted in render */ + xn = -mvert->no[0]/ 32767.0; + yn = -mvert->no[1]/ 32767.0; + zn = -mvert->no[2]/ 32767.0; /* transfor to cam space */ ver->n[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn; ver->n[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn; diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index b12d6094f2b..0f91a92fe9c 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -1182,11 +1182,8 @@ static void shade_sample_sss(ShadeSample *ssamp, Material *mat, VlakRen *vlr, in shade_input_set_triangle_i(shi, vlr, 0, 1, 2); /* we don't want flipped normals, they screw up back scattering */ - if(vlr->noflag & R_FLIPPED_NO) { - shi->facenor[0]= -shi->facenor[0]; - shi->facenor[1]= -shi->facenor[1]; - shi->facenor[2]= -shi->facenor[2]; - } + if(vlr->noflag & R_FLIPPED_NO) + VecMulf(shi->facenor, -1.0f); /* center pixel */ x += 0.5f; @@ -1214,6 +1211,12 @@ static void shade_sample_sss(ShadeSample *ssamp, Material *mat, VlakRen *vlr, in shade_input_set_uv(shi); shade_input_set_normals(shi); + /* not a pretty solution, but fixes common cases */ + if(vlr->ob && vlr->ob->transflag & OB_NEG_SCALE) { + VecMulf(shi->vn, -1.0f); + VecMulf(shi->vno, -1.0f); + } + /* if nodetree, use the material that we are currently preprocessing instead of the node material */ if(shi->mat->nodetree && shi->mat->use_nodes) |