mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 20:59:19 +02:00
Cleanup of vertex shader by @tmj.
2-channel normalmaps with Z-component reconstruction. Normal vectors passed from fragment shaders to lightning calculations.
This commit is contained in:
@@ -30,9 +30,11 @@ float calc_shadow()
|
|||||||
vec2 calc_light(vec3 light_dir)
|
vec2 calc_light(vec3 light_dir)
|
||||||
{
|
{
|
||||||
#ifdef NORMALMAP
|
#ifdef NORMALMAP
|
||||||
vec3 normal = normalize(f_tbn * normalize(texture(normalmap, f_coord).rgb * 2.0 - 1.0));
|
vec3 normal = normal;
|
||||||
#elif defined(WATER)
|
#elif defined(WATER)
|
||||||
vec3 normal = normal_d;
|
vec3 normal = normal_d;
|
||||||
|
#elif defined(PARALLAX)
|
||||||
|
vec3 normal = normal_p;
|
||||||
#else
|
#else
|
||||||
vec3 normal = normalize(f_normal);
|
vec3 normal = normalize(f_normal);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ uniform sampler2DShadow shadowmap;
|
|||||||
uniform samplerCube envmap;
|
uniform samplerCube envmap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
vec3 normal;
|
||||||
|
|
||||||
#define NORMALMAP
|
#define NORMALMAP
|
||||||
#include <light_common.glsl>
|
#include <light_common.glsl>
|
||||||
#include <tonemapping.glsl>
|
#include <tonemapping.glsl>
|
||||||
@@ -44,7 +46,10 @@ void main()
|
|||||||
if (tex_color.a < opacity)
|
if (tex_color.a < opacity)
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
vec3 normal = normalize(f_tbn * normalize(texture(normalmap, f_coord).rgb * 2.0 - 1.0));
|
normal.xy = (texture(normalmap, f_coord).rg * 2.0 - 1.0);
|
||||||
|
normal.z = sqrt(1 - clamp((dot(normal.xy, normal.xy)), 0.0, 1.0));
|
||||||
|
normal = normalize(f_tbn * normalize(normal.xyz));
|
||||||
|
//vec3 normal = normalize(f_tbn * normalize(texture(normalmap, f_coord).rgb * 2.0 - 1.0));
|
||||||
vec3 refvec = reflect(f_pos.xyz, normal);
|
vec3 refvec = reflect(f_pos.xyz, normal);
|
||||||
#if ENVMAP_ENABLED
|
#if ENVMAP_ENABLED
|
||||||
vec3 envcolor = texture(envmap, refvec).rgb;
|
vec3 envcolor = texture(envmap, refvec).rgb;
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ uniform sampler2DShadow shadowmap;
|
|||||||
uniform samplerCube envmap;
|
uniform samplerCube envmap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NORMALMAP
|
vec3 normal_p;
|
||||||
|
#define PARALLAX
|
||||||
#include <light_common.glsl>
|
#include <light_common.glsl>
|
||||||
#include <tonemapping.glsl>
|
#include <tonemapping.glsl>
|
||||||
|
|
||||||
@@ -51,8 +52,11 @@ void main()
|
|||||||
|
|
||||||
if (tex_color.a < opacity)
|
if (tex_color.a < opacity)
|
||||||
discard;
|
discard;
|
||||||
vec3 normal = normalize(f_tbn * normalize(texture(normalmap, f_coord_p).rgb * 2.0 - 1.0));
|
vec3 normal = f_normal;
|
||||||
vec3 refvec = reflect(f_pos.xyz, normal);
|
normal.xy = (texture(normalmap, f_coord_p).rg * 2.0 - 1.0);
|
||||||
|
normal.z = sqrt(1 - clamp((dot(normal.xy, normal.xy)), 0.0, 1.0));
|
||||||
|
normal_p = normalize(f_tbn * normalize(normal.xyz));
|
||||||
|
vec3 refvec = reflect(f_pos.xyz, normal_p);
|
||||||
#if ENVMAP_ENABLED
|
#if ENVMAP_ENABLED
|
||||||
vec3 envcolor = texture(envmap, refvec).rgb;
|
vec3 envcolor = texture(envmap, refvec).rgb;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -8,20 +8,24 @@ flat out vec3 f_normal_raw;
|
|||||||
out vec2 f_coord;
|
out vec2 f_coord;
|
||||||
out vec4 f_pos;
|
out vec4 f_pos;
|
||||||
out mat3 f_tbn;
|
out mat3 f_tbn;
|
||||||
out vec4 f_tangent;
|
//out vec4 f_tangent;
|
||||||
out vec4 f_light_pos;
|
out vec4 f_light_pos;
|
||||||
out vec3 TangentFragPos;
|
|
||||||
out vec4 f_clip_pos;
|
out vec4 f_clip_pos;
|
||||||
out vec4 f_clip_future_pos;
|
out vec4 f_clip_future_pos;
|
||||||
|
|
||||||
|
//out vec3 TangentLightPos;
|
||||||
|
//out vec3 TangentViewPos;
|
||||||
|
out vec3 TangentFragPos;
|
||||||
|
|
||||||
#include <common>
|
#include <common>
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
f_normal = modelviewnormal * v_normal;
|
f_normal = normalize(modelviewnormal * v_normal);
|
||||||
f_normal_raw = v_normal;
|
f_normal_raw = v_normal;
|
||||||
f_coord = v_coord;
|
f_coord = v_coord;
|
||||||
f_tangent = v_tangent;
|
// f_tangent = v_tangent;
|
||||||
f_pos = modelview * vec4(v_vert, 1.0f);
|
f_pos = modelview * vec4(v_vert, 1.0f);
|
||||||
f_light_pos = lightview * f_pos;
|
f_light_pos = lightview * f_pos;
|
||||||
|
|
||||||
@@ -32,9 +36,12 @@ void main()
|
|||||||
gl_PointSize = param[1].x;
|
gl_PointSize = param[1].x;
|
||||||
|
|
||||||
vec3 T = normalize(modelviewnormal * v_tangent.xyz);
|
vec3 T = normalize(modelviewnormal * v_tangent.xyz);
|
||||||
vec3 B = normalize(modelviewnormal * cross(v_normal, v_tangent.xyz) * v_tangent.w);
|
vec3 N = f_normal;
|
||||||
vec3 N = normalize(modelviewnormal * v_normal);
|
vec3 B = normalize(cross(N, T));
|
||||||
f_tbn = mat3(T, B, N);
|
f_tbn = mat3(T, B, N);
|
||||||
mat3 TBN = transpose(mat3(T, B, N));
|
|
||||||
|
mat3 TBN = transpose(f_tbn);
|
||||||
|
// TangentLightPos = TBN * f_light_pos.xyz;
|
||||||
|
// TangentViewPos = TBN * vec3(0.0f, 0.0f, 0.0f);
|
||||||
TangentFragPos = TBN * f_pos.xyz;
|
TangentFragPos = TBN * f_pos.xyz;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user