[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60261] trunk/blender/source/blender/gpu: FIX: [#27536] GLSL object space normal maps have wrong shading
Andrea Weikert
elubie at gmx.net
Fri Sep 20 13:55:44 CEST 2013
Revision: 60261
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60261
Author: elubie
Date: 2013-09-20 11:55:43 +0000 (Fri, 20 Sep 2013)
Log Message:
-----------
FIX: [#27536] GLSL object space normal maps have wrong shading
Added object and world space for normal map in GLSL view.
Modified Paths:
--------------
trunk/blender/source/blender/gpu/intern/gpu_material.c
trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
Modified: trunk/blender/source/blender/gpu/intern/gpu_material.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_material.c 2013-09-20 11:14:08 UTC (rev 60260)
+++ trunk/blender/source/blender/gpu/intern/gpu_material.c 2013-09-20 11:55:43 UTC (rev 60261)
@@ -1126,8 +1126,15 @@
else { /* otherwise use accumulated perturbations */
GPU_link(mat, "mtex_nspace_tangent", GPU_attribute(CD_TANGENT, ""), shi->vn, tnor, &newnor);
}
+ } else if (mtex->normapspace == MTEX_NSPACE_OBJECT) {
+ /* transform normal by object then view matrix */
+ GPU_link(mat, "mtex_nspace_object", GPU_builtin(GPU_VIEW_MATRIX), GPU_builtin(GPU_OBJECT_MATRIX), tnor, &newnor);
+ } else if (mtex->normapspace == MTEX_NSPACE_WORLD) {
+ /* transform normal by view matrix */
+ GPU_link(mat, "mtex_nspace_world", GPU_builtin(GPU_VIEW_MATRIX), tnor, &newnor);
}
else {
+ /* no transform, normal in camera space */
newnor = tnor;
}
Modified: trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
===================================================================
--- trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl 2013-09-20 11:14:08 UTC (rev 60260)
+++ trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl 2013-09-20 11:55:43 UTC (rev 60261)
@@ -1415,6 +1415,16 @@
outnormal = normalize(outnormal);
}
+void mtex_nspace_world(mat4 viewmat, vec3 texnormal, out vec3 outnormal)
+{
+ outnormal = normalize((viewmat*vec4(texnormal, 0.0)).xyz);
+}
+
+void mtex_nspace_object(mat4 viewmat, mat4 obmat, vec3 texnormal, out vec3 outnormal)
+{
+ outnormal = normalize((viewmat*(obmat*vec4(texnormal, 0.0))).xyz);
+}
+
void mtex_blend_normal(float norfac, vec3 normal, vec3 newnormal, out vec3 outnormal)
{
outnormal = (1.0 - norfac)*normal + norfac*newnormal;
More information about the Bf-blender-cvs
mailing list