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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2007-11-23 17:10:05 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2007-11-23 17:10:05 +0300
commit885593ca21e2c8cc6f15eb9c1cd841c1fa20fa4b (patch)
tree9a991acc34ae033ddfe1d7e926f94c2d52117376 /source/blender/render
parent45a53c4749799b4549c18119e8ca2a996674891c (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.c7
-rw-r--r--source/blender/render/intern/source/rendercore.c13
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)