[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