Читаю «webGl Up and running», которая, вроде как, вообще для веб-разработчиков, но как только дошло до шейдеров, всё равно почти перестал что-либо понимать, кроме того, что в gpu лучше не создавать псевдослучайные величины, а грузить их туда специальной текстурой:
uniform float time;
uniform sampler2D texture1;
uniform sampler2D texture2;
varying vec2 texCoord;
void main( void ) {
vec4 noise = texture2D( texture1, texCoord ); //get rgba from point of first texture(uv coords)
vec2 T1 = texCoord + vec2( 1.5, -1.5 ) * time * 0.01;//2 random values based on uv and time
vec2 T2 = texCoord + vec2( -0.5, 2.0 ) * time * 0.01;//а вот дальше уже ничего не понятно - зачем именно такие цифры?
T1.x -= noise.r * 2.0;
T1.y += noise.g * 4.0;
T2.x += noise.g * 0.2;
T2.y += noise.b * 0.2;
float p = texture2D( texture1, T1 * 2.0 ).a + 0.25;
vec4 color = texture2D( texture2, T2 );
vec4 temp = color * 2.0 * ( vec4( p, p, p, p ) ) + ( color * color );
gl_FragColor = temp;
}