#version 330
precision highp float;
in vec4 Normal;
smooth in vec4 lightDir0;
smooth in vec4 lightDir1;
smooth in vec4 eyeVec;
uniform vec4 LightDiffuse1 = vec4(0.9, 0.4, 0.2, 1.0);
uniform vec4 LightDiffuse2 = vec4(0.1, 0.7, 0.6, 1.0);
uniform vec4 mat_specular = vec4(0.0, 0.0, 0.0, 1.0);
out vec4 Out_Color;
void main()
vec4 light0_ambient = vec4(0.1, 0.05, 0.05, 1.0);
vec4 light0_specular = vec4(0.9, 0.9, 0.9, 1.0);
vec4 light1_ambient = vec4(0.05, 0.05, 0.05, 1.0);
vec4 light1_specular = vec4(0.9, 0.9, 0.9, 1.0);
vec4 matAmbient = vec4(0.25, 0.25, 0.25, 1.0);
vec4 matDiffuse = vec4(0.8, 0.8, 0.8, 1.0);
float matShininess = mat_specular.a;
vec3 final_color = vec3(0.0, 0.0, 0.0);
float distSqr = dot(lightDir0, lightDir0);
float invRadius = 0.025;
float att = clamp(1.0 - invRadius * sqrt(distSqr), 0.0, 1.0);
final_color += (light0_ambient.rgb * matAmbient.rgb) * att;
vec3 N = normalize(Normal.xyz);
vec3 L = normalize(lightDir0.xyz);
float lambertTerm = dot(N,L);
if (lambertTerm > 0.0)
final_color += (LightDiffuse1.rgb * matDiffuse.rgb) * lambertTerm * att;
vec3 E = normalize(eyeVec.xyz);
vec3 R = reflect(-L, N);
float specular = pow(max(dot(R, E), 0.0), 60.0);
final_color += light0_specular.xyz * vec3(0.8, 0.8, 0.9) * specular;
att = 1.0;
L = normalize(lightDir1.xyz);
lambertTerm = dot(N,L);
if (lambertTerm > 0.0)
final_color += (LightDiffuse2.rgb * matDiffuse.rgb) * lambertTerm * att;
vec3 E = normalize(eyeVec.xyz);
vec3 R = reflect(-L, N);
float specular = pow(max(dot(R, E), 0.0), 60.0);
final_color += light1_specular.xyz * vec3(0.8, 0.8, 0.9) * specular;
Out_Color.rgb = final_color;
Out_Color.a = 1.0;precision highp float;
in vec4 Vertex_UV;
out vec4 Out_Color;
uniform vec2 resolution;
uniform float time;
float k_PI = 3.141592654;
float k_MoveSpeed = 0.5;
float k_BlobSize = 0.5;
float k_OrbitRadius = 0.5;
...
vec2 GetRandom2( in vec2 vInput )
vec2 temp1 = vInput * vec2(17.1232, 33.32432);
vec2 temp2 = vInput * vec2(34.32432, 12.9742);
vec2 temp3 = vec2(sin(temp1.x) + sin(temp2.y), sin(temp1.y) + sin(temp2.x)) * 121.1231;
return fract(temp3);
vec2 GetOffset2( in vec2 vInput )
{ return vec2(sin(vInput.x * k_PI * 2.0), cos(vInput.y * k_PI * 2.0)); }
float BlobTexture( in vec2 vPos )
float fLen = length(vPos) / k_BlobSize;
return max(1.0 - fLen, 0.0);
float GetBlobValue( in vec2 vPosition, in vec2 vTileOffset )
vec2 vTilePos = floor(vPosition - vTileOffset);
vec2 vRandom = GetRandom2(vTilePos);
vec2 vTime2d = vec2(time, time * 0.92312) * k_MoveSpeed;
vec2 vBlobPos = GetOffset2(vRandom + vTime2d) * k_OrbitRadius;
vec2 vSubTilePos = fract(vPosition) + vTileOffset;
return BlobTexture(vSubTilePos - vBlobPos);
vec3 GetColour( in vec2 vPixelPosition )
vec2 vPosition = vPixelPosition;
float fValue = 0.0;
fValue += GetBlobValue( vPosition, vec2( 0.0, 0.0 ) );
fValue += GetBlobValue( vPosition, vec2( -1.0, 0.0 ) );
fValue += GetBlobValue( vPosition, vec2( 0.0, -1.0 ) );
fValue += GetBlobValue( vPosition, vec2( -1.0, -1.0 ) );
fValue = max(fValue, 0.0);
fValue = 1.0 - abs(0.7 - fValue);
fValue = max(fValue, 0.0);
fValue = pow(fValue, 5.0);
vec3 cColA = vec3(0.7, 0.0, 0.0);
vec3 cColB = vec3(0.2, 0.0, 0.2);
return cColA * fValue + cColB * (1.0 - fValue);