MetaCore/third_party/simplepbr-shaders/simplepbr.vert

47 lines
1.5 KiB
GLSL

#version 120
#ifndef MAX_LIGHTS
#define MAX_LIGHTS 8
#endif
uniform mat4 p3d_ProjectionMatrix;
uniform mat4 p3d_ModelViewMatrix;
uniform mat4 p3d_ModelMatrix;
uniform mat3 p3d_NormalMatrix;
uniform mat4 p3d_TextureMatrix;
uniform mat4 p3d_ModelMatrixInverseTranspose;
attribute vec4 p3d_Vertex;
attribute vec4 p3d_Color;
attribute vec3 p3d_Normal;
attribute vec4 p3d_Tangent;
attribute vec2 p3d_MultiTexCoord0;
varying vec3 v_view_position;
varying vec3 v_world_position;
varying vec4 v_color;
varying vec2 v_texcoord;
varying mat3 v_view_tbn;
varying mat3 v_world_tbn;
void main() {
vec4 view_position = p3d_ModelViewMatrix * p3d_Vertex;
v_view_position = view_position.xyz;
v_world_position = (p3d_ModelMatrix * p3d_Vertex).xyz;
v_color = p3d_Color;
v_texcoord = (p3d_TextureMatrix * vec4(p3d_MultiTexCoord0, 0, 1)).xy;
vec3 view_normal = normalize(p3d_NormalMatrix * p3d_Normal);
vec3 view_tangent = normalize(p3d_NormalMatrix * p3d_Tangent.xyz);
vec3 view_bitangent = cross(view_normal, view_tangent) * p3d_Tangent.w;
v_view_tbn = mat3(view_tangent, view_bitangent, view_normal);
mat3 world_normal_mat = mat3(p3d_ModelMatrixInverseTranspose);
vec3 world_normal = normalize(world_normal_mat * p3d_Normal);
vec3 world_tangent = normalize(world_normal_mat * p3d_Tangent.xyz);
vec3 world_bitangent = cross(world_normal, world_tangent) * p3d_Tangent.w;
v_world_tbn = mat3(world_tangent, world_bitangent, world_normal);
gl_Position = p3d_ProjectionMatrix * view_position;
}