[Bf-blender-cvs] [4aaf5ba] master: Fix input for Texture node (envmap+world_space_shading)
Alexander Romanov
noreply at git.blender.org
Mon Jul 4 10:10:06 CEST 2016
Commit: 4aaf5baccf1b2f6bb0d618ab5005848431e168d0
Author: Alexander Romanov
Date: Mon Jul 4 11:08:48 2016 +0300
Branches: master
https://developer.blender.org/rB4aaf5baccf1b2f6bb0d618ab5005848431e168d0
Fix input for Texture node (envmap+world_space_shading)
This patch fixes shortcoming of D2046.
The original behavior without world_space_shading flag is that Texture node expects the reflected vector in view space. But with world_space_shading it should be in world space.
In attached file you will see a simple material setup and a node material analogue.
Simple material must have the same behavior regardless world_space_shading flag.
{F318866}
Alexander (Blend4Web Team)
Reviewers: brecht
Reviewed By: brecht
Subscribers: campbellbarton, homyachetser, Evgeny_Rodygin, AlexKowel, yurikovelenov
Differential Revision: https://developer.blender.org/D2072
===================================================================
M source/blender/render/intern/source/envmap.c
M source/blender/render/intern/source/render_texture.c
===================================================================
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index b1afb86..d97e18d 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -52,6 +52,7 @@
#include "BKE_main.h"
#include "BKE_image.h" /* BKE_imbuf_write */
#include "BKE_texture.h"
+#include "BKE_scene.h"
/* this module */
#include "render_types.h"
@@ -737,21 +738,28 @@ int envmaptex(Tex *tex, const float texvec[3], float dxt[3], float dyt[3], int o
/* rotate to envmap space, if object is set */
copy_v3_v3(vec, texvec);
- if (env->object) mul_m3_v3(env->obimat, vec);
- else mul_mat3_m4_v3(R.viewinv, vec);
+ if (env->object) {
+ mul_m3_v3(env->obimat, vec);
+ if (osatex) {
+ mul_m3_v3(env->obimat, dxt);
+ mul_m3_v3(env->obimat, dyt);
+ }
+ }
+ else {
+ if (!BKE_scene_use_world_space_shading(R.scene)) {
+ // texvec is in view space
+ mul_mat3_m4_v3(R.viewinv, vec);
+ if (osatex) {
+ mul_mat3_m4_v3(R.viewinv, dxt);
+ mul_mat3_m4_v3(R.viewinv, dyt);
+ }
+ }
+ }
face = envcube_isect(env, vec, sco);
ibuf = env->cube[face];
if (osatex) {
- if (env->object) {
- mul_m3_v3(env->obimat, dxt);
- mul_m3_v3(env->obimat, dyt);
- }
- else {
- mul_mat3_m4_v3(R.viewinv, dxt);
- mul_mat3_m4_v3(R.viewinv, dyt);
- }
set_dxtdyt(dxts, dyts, dxt, dyt, face);
imagewraposa(tex, NULL, ibuf, sco, dxts, dyts, texres, pool, skip_load_image);
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 530ebc0..dc22859 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -1720,6 +1720,21 @@ static void texco_mapping(ShadeInput *shi, Tex *tex, MTex *mtex,
}
else dxt[2]= dyt[2] = 0.f;
}
+
+ if (mtex->tex->type == TEX_ENVMAP) {
+ EnvMap *env = tex->env;
+ if (!env->object) {
+ // env->object is a view point for envmap rendering
+ // if it's not set, return the result depending on the world_space_shading flag
+ if (BKE_scene_use_world_space_shading(R.scene)) {
+ mul_mat3_m4_v3(R.viewinv, texvec);
+ if (shi->osatex) {
+ mul_mat3_m4_v3(R.viewinv, dxt);
+ mul_mat3_m4_v3(R.viewinv, dyt);
+ }
+ }
+ }
+ }
}
}
More information about the Bf-blender-cvs
mailing list