[osg-users] TBN Matrix for Normal Mapping - OSG and GLSL

Sebastian Messerschmidt sebastian.messerschmidt at gmx.de
Wed Nov 8 00:18:25 PST 2017



Hi Rômulo,

> Hi,
> 
> I have used normal mapping using GLSL and OSG for my application (an imaging sonar simulation) and I got problems by calculating the TBN matrix on shaders. The normal vectors contain lower resolution on border in comparison with the center of image.

You cannot get a valid Co-TangentSpace by taking only the normal into 
account considering arbitrary geometries. There are multiple ways to 
tackle this however:
First is to calculate the mesh's tangentspace beforehand and pass the 
tangent and binormal via vertex attributes.
See the osgUtil::TangentSpaceGenerator (example in the osg::CookBook 
AFAIK).

Second one is to calculate it in the view-space. Beware of dragons, 
since the precision will be awful for big coordinates:

http://www.thetenthplanet.de/archives/1180

hth
Sebastian

> 
> Follows my vertex code:
> 
> Code:
> 
> #version 130
> 
> out vec3 pos;
> out vec3 normal;
> out mat3 TBN;
> 
> void main() {
>      pos = (gl_ModelViewMatrix * gl_Vertex).xyz;
>      normal = gl_NormalMatrix * gl_Normal.xyz;
> 
>      vec3 n = normalize(normal);
>      vec3 t = normalize(cross(normal, vec3(-1,0,0)));
>      vec3 b = cross(t, n) + cross(n, t);
>      TBN = transpose(mat3(t,b,n));
> 
>      gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
>      gl_TexCoord[0] = gl_MultiTexCoord0;
> }
> 
> 
> 
> 
> Part of my fragment code:
> 
> Code:
> 
> #version 130
> 
> in vec3 pos;
> in vec3 normal;
> in mat3 TBN;
> uniform sampler2D normalTexture;
> 
> void main() {
>      vec3 newNormal = (texture2D(normalTexture, gl_TexCoord[0].st).rgb * 2.0 - 1) * TBN;
>      newNormal = normalize(newNormal);
> ...
> }
> 
> 
> 
> 
> The resulting figure is attached.
> 
> How can I calculate the TBN matrix to compute the normal mapping properly?
> 
> Thanks in advance,
> 
> 
> ...
> 
> Thank you!
> 
> Cheers,
> Rômulo[/img]
> 
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=72324#72324
> 
> 
> 
> 
> Attachments:
> http://forum.openscenegraph.org//files/screenshot_from_2017_11_06_23_00_48_832.png
> 
> 
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 


More information about the osg-users mailing list