Hi,
I am trying to draw a cube with a bump map using normal maps but I really cant see any bump effect on a spinning cube. My unit cube is imported out of maya as a collada file with geometric tangents option (and they seem right).
My worldspace light direction is (0.0, 0.0, 1.0).
My camera position is (0.0, 0.0, 5.0).
I am rotating my cube across Y axis.
Am I missing anything in my shader that could cause a problem?
Thanks in advance!
My vertex shader:
// Structs
struct DirectionalLight
{
vec3 direction;
vec3 color;
};
// Uniforms
uniform DirectionalLight u_directionalLight;
uniform mat4 u_worldViewProjectionMatrix;
// Inputs
attribute vec4 a_position;
attribute vec3 a_normal;
attribute vec2 a_texCoord;
attribute vec3 a_tangent;
attribute vec3 a_binormal;
// Outputs
varying vec3 v_lightDirectionTangentSpace;
varying vec2 v_texCoord;
void main()
{
gl_Position = u_worldViewProjectionMatrix * a_position;
// Create a transform to convert a vector to tangent space.
mat3 tangentSpaceTransform = mat3(a_tangent, a_binormal, a_normal);
// Transform light direction to tangent space.
v_lightDirectionTangentSpace = u_directionalLight.direction * tangentSpaceTransform;
v_texCoord = a_texCoord;
}
Fragement shader
precision highp float;
// Structs
struct DirectionalLight
{
vec3 direction; // Direction of the light
vec3 color; // RGB color of the light
};
// Uniforms
uniform DirectionalLight u_directionalLight; // Directional Light
uniform vec3 u_ambientColor; // Ambient color
uniform sampler2D u_diffuseTexture;
uniform sampler2D u_normalMapTexture;
// Inputs
varying vec3 v_lightDirectionTangentSpace;
varying vec2 v_texCoord;
void main()
{
vec3 normalVector = normalize(texture2D(u_normalMapTexture, v_texCoord).xyz * 2.0 - 1.0);
vec4 baseColor = texture2D(u_diffuseTexture, v_texCoord);
vec4 ambientColor = vec4(u_ambientColor, 1.0) * baseColor;
// Diffuse
float diffuseIntensity = max(0.0, dot(normalVector, v_lightDirectionTangentSpace));
vec4 diffuseColor = (vec4(u_directionalLight.color, 1.0) * diffuseIntensity) * baseColor;
gl_FragColor = ambientColor + diffuseColor;
}
Normalmap shader
Hi,
I am trying to draw a cube with a bump map using normal maps but I really cant see any bump effect on a spinning cube. My unit cube is imported out of maya as a collada file with geometric tangents option (and they seem right).
My worldspace light direction is (0.0, 0.0, 1.0).
My camera position is (0.0, 0.0, 5.0).
I am rotating my cube across Y axis.
Am I missing anything in my shader that could cause a problem?
Thanks in advance!
My vertex shader:
// Structs
struct DirectionalLight
{
vec3 direction;
vec3 color;
};
// Uniforms
uniform DirectionalLight u_directionalLight;
uniform mat4 u_worldViewProjectionMatrix;
// Inputs
attribute vec4 a_position;
attribute vec3 a_normal;
attribute vec2 a_texCoord;
attribute vec3 a_tangent;
attribute vec3 a_binormal;
// Outputs
varying vec3 v_lightDirectionTangentSpace;
varying vec2 v_texCoord;
void main()
{
gl_Position = u_worldViewProjectionMatrix * a_position;
// Create a transform to convert a vector to tangent space.
mat3 tangentSpaceTransform = mat3(a_tangent, a_binormal, a_normal);
// Transform light direction to tangent space.
v_lightDirectionTangentSpace = u_directionalLight.direction * tangentSpaceTransform;
v_texCoord = a_texCoord;
}
Fragement shader
precision highp float;
// Structs
struct DirectionalLight
{
vec3 direction; // Direction of the light
vec3 color; // RGB color of the light
};
// Uniforms
uniform DirectionalLight u_directionalLight; // Directional Light
uniform vec3 u_ambientColor; // Ambient color
uniform sampler2D u_diffuseTexture;
uniform sampler2D u_normalMapTexture;
// Inputs
varying vec3 v_lightDirectionTangentSpace;
varying vec2 v_texCoord;
void main()
{
vec3 normalVector = normalize(texture2D(u_normalMapTexture, v_texCoord).xyz * 2.0 - 1.0);
vec4 baseColor = texture2D(u_diffuseTexture, v_texCoord);
vec4 ambientColor = vec4(u_ambientColor, 1.0) * baseColor;
// Diffuse
float diffuseIntensity = max(0.0, dot(normalVector, v_lightDirectionTangentSpace));
vec4 diffuseColor = (vec4(u_directionalLight.color, 1.0) * diffuseIntensity) * baseColor;
gl_FragColor = ambientColor + diffuseColor;
}
Are you able to bump map a single quad? Doing a quad is easier than doing a cube. Doing a static cube is easier than doing a rotating cube. Generally, I find that if I use a bottom up I approach, it's much easier to figure out what's wrong.
[color="#1C2837"]
[color="#1C2837"]solved!
[color="#1C2837"] "v_lightDirectionTangentSpace = u_directionalLight.direction * tangentSpaceTransform;"
[color="#1C2837"]
[color="#1C2837"]must have been
[color="#1C2837"]
[color="#1C2837"]v_lightDirectionTangentSpace = [color="#1C2837"]tangentSpaceTransform * [color="#1C2837"]u_directionalLight.direction;
[color="#1C2837"]
[color="#1C2837"]This was messing up the light direction and hence the lighting calculations!
[color="#1C2837"]solved!
[color="#1C2837"] "v_lightDirectionTangentSpace = u_directionalLight.direction * tangentSpaceTransform;"
[color="#1C2837"]
[color="#1C2837"]must have been
[color="#1C2837"]
[color="#1C2837"]v_lightDirectionTangentSpace = [color="#1C2837"]tangentSpaceTransform * [color="#1C2837"]u_directionalLight.direction;
[color="#1C2837"]
[color="#1C2837"]This was messing up the light direction and hence the lighting calculations!
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement