68 lines
2.0 KiB
GLSL
68 lines
2.0 KiB
GLSL
|
|
#include "common_fragment.h"
|
|
|
|
uniform sampler2D g_Texture0;
|
|
uniform sampler2D g_Texture1;
|
|
uniform sampler2D g_Texture2;
|
|
|
|
#if TINT
|
|
uniform vec3 g_Color1; // {"material":"color1","default":"0 0 0"}
|
|
uniform vec3 g_Color2; // {"material":"color2","default":"0 0 0"}
|
|
uniform vec3 g_Color3; // {"material":"color3","default":"1 1 1"}
|
|
#endif
|
|
|
|
uniform float g_WaveStrength; // {"material":"Strength","default":0.5}
|
|
|
|
varying vec2 v_TexCoord;
|
|
varying vec4 v_NormalCoord;
|
|
|
|
void main() {
|
|
vec2 normalCoords1 = v_NormalCoord.xy;
|
|
vec2 normalCoords2 = v_NormalCoord.zw;
|
|
|
|
normalCoords1.x -= ((0.5 - v_TexCoord.x) * (1 - v_TexCoord.y)) * 3;
|
|
normalCoords1.x += 2 * pow(v_TexCoord.y - 0.1, 3) * pow(v_TexCoord.x, 2);
|
|
normalCoords2.x -= ((1.0 - v_TexCoord.x) * (1 - v_TexCoord.y)) * 2;
|
|
|
|
vec3 normal = DecompressNormal(texSample2D(g_Texture1, normalCoords1));
|
|
normal *= DecompressNormal(texSample2D(g_Texture1, normalCoords2));
|
|
//normal.xy += DecompressNormal(texSample2D(g_Texture1, normalCoords2)).xy;
|
|
|
|
normal = mix(vec3(0, 0, 1), normal, g_WaveStrength);
|
|
normal = normalize(normal);
|
|
|
|
vec2 baseCoords = v_TexCoord.xy + normal.xy * 0.02;
|
|
|
|
//vec2 baseCoords2 = v_TexCoord.xy + normal.xy * 0.1;
|
|
//clip(baseCoords2.y - 0.1);
|
|
//clip(0.9 - baseCoords2.y);
|
|
//clip(baseCoords2.x - 0.18);
|
|
//clip(0.82 - baseCoords2.x);
|
|
|
|
vec3 albedo = texSample2D(g_Texture0, baseCoords.xy).rgb;
|
|
float cloth = texSample2D(g_Texture2, baseCoords.xy * 4).r;
|
|
|
|
#if TINT
|
|
vec3 color = mix(g_Color1, g_Color2, albedo.r);
|
|
color = mix(color, g_Color3, albedo.g);
|
|
color *= albedo.b * cloth;
|
|
color += cloth * 0.1;
|
|
#else
|
|
vec3 color = albedo;
|
|
#endif
|
|
|
|
float light = 0.2 + dot(vec3(0.707, 0.707, 0), normal) * 0.5 + 0.5;
|
|
light += pow(light, 5) * 0.5;
|
|
color *= light + light * saturate(cloth * 2 - 1);
|
|
|
|
// Vignette
|
|
//float vignette = length(v_TexCoord.xy - 0.5);
|
|
//color *= smoothstep(0.7, 0.2, vignette);
|
|
|
|
// gl_FragColor = albedo;
|
|
gl_FragColor.rgb = color;
|
|
gl_FragColor.a = 1;
|
|
|
|
//gl_FragColor.rgb = (normal * 0.5 + 0.5);
|
|
}
|