1
0
Fork 0

Restore the foam to the Rembrandt water shader

Signed-off-by: Emilian Huminiuc <emilianh@gmail.com>
This commit is contained in:
Emilian Huminiuc 2012-10-06 14:11:39 +03:00
parent 65dbc4cc0b
commit 6e8f1b7fee
3 changed files with 12 additions and 8 deletions

View file

@ -38,7 +38,7 @@ varying vec4 waterTex1; //moving texcoords
varying vec4 waterTex2; //moving texcoords varying vec4 waterTex2; //moving texcoords
varying vec3 viewerdir; varying vec3 viewerdir;
varying vec3 normal; varying vec3 normal;
varying vec3 Vnormal; varying vec3 rawNormal;
varying vec3 VTangent; varying vec3 VTangent;
varying vec3 VBinormal; varying vec3 VBinormal;
@ -65,7 +65,7 @@ void main(void)
vec3 E = normalize(viewerdir); vec3 E = normalize(viewerdir);
vec3 Normal = normalize(normal); vec3 Normal = normalize(normal);
vec3 vNormal = normalize(Vnormal); vec3 vNormal = normalize(rawNormal);
const float water_shininess = 240.0; const float water_shininess = 240.0;
@ -171,7 +171,8 @@ void main(void)
vec3 N2 = normalize(mix(N0, N1, mixFactor) * waveRoughness); vec3 N2 = normalize(mix(N0, N1, mixFactor) * waveRoughness);
Normal = normalize(N2.x * VTangent + N2.y * VBinormal + N2.z * Normal); Normal = normalize(N2.x * VTangent + N2.y * VBinormal + N2.z * Normal);
vNormal = normalize(mix(vNormal + N0, vNormal + N1, mixFactor) * waveRoughness); //vNormal = normalize(mix(vNormal + N0, vNormal + N1, mixFactor) * waveRoughness);
vNormal = normalize(N2.x * vec3(1.,0.,0.) + N2.y * vec3(0.,1.,0.) + N2.z * vNormal);
if (normalmap_dds > 0){ if (normalmap_dds > 0){
Normal = -Normal; //dds fix Normal = -Normal; //dds fix

View file

@ -13,6 +13,7 @@ varying vec4 waterTex2;
varying vec3 viewerdir; varying vec3 viewerdir;
varying vec3 lightdir; varying vec3 lightdir;
varying vec3 normal; varying vec3 normal;
varying vec3 rawNormal;
varying vec3 VTangent; varying vec3 VTangent;
varying vec3 VBinormal; varying vec3 VBinormal;
@ -37,6 +38,7 @@ void rotationmatrix(in float angle, out mat4 rotmat)
void main(void) void main(void)
{ {
mat4 RotationMatrix; mat4 RotationMatrix;
rawNormal= gl_Normal;
normal = gl_NormalMatrix * gl_Normal; normal = gl_NormalMatrix * gl_Normal;
VTangent = normalize(gl_NormalMatrix * tangent); VTangent = normalize(gl_NormalMatrix * tangent);
VBinormal = normalize(gl_NormalMatrix * binormal); VBinormal = normalize(gl_NormalMatrix * binormal);

View file

@ -46,7 +46,7 @@ varying vec4 waterTex2 ; //moving texcoords
varying vec3 viewerdir ; varying vec3 viewerdir ;
varying vec3 lightdir ; varying vec3 lightdir ;
varying vec3 normal ; varying vec3 normal ;
varying vec3 Vnormal ; varying vec3 rawNormal ;
varying vec3 VTangent ; varying vec3 VTangent ;
varying vec3 VBinormal ; varying vec3 VBinormal ;
@ -147,8 +147,8 @@ void main(void)
//vec3 H = normalize(L + E); //vec3 H = normalize(L + E);
vec3 Normal = normalize(normal) ; vec3 Normal = normalize(normal) ;
vec3 vNormal = normalize(Vnormal) ; vec3 vNormal = normalize(rawNormal) ;
const float water_shininess = 128.0 ; const float water_shininess = 240.0 ;
// float range = gl_ProjectionMatrix[3].z/(gl_FragCoord.z * -2.0 + 1.0 - gl_ProjectionMatrix[2].z); // float range = gl_ProjectionMatrix[3].z/(gl_FragCoord.z * -2.0 + 1.0 - gl_ProjectionMatrix[2].z);
@ -334,7 +334,8 @@ void main(void)
N0.g += ddySum; N0.g += ddySum;
vec3 N2 = normalize(mix(N0, N1, mixFactor) * waveRoughness); vec3 N2 = normalize(mix(N0, N1, mixFactor) * waveRoughness);
Normal = normalize(N2.x * VTangent + N2.y * VBinormal + N2.z * Normal); Normal = normalize(N2.x * VTangent + N2.y * VBinormal + N2.z * Normal);
vNormal = normalize(mix(vNormal + N0, vNormal + N1, mixFactor) * waveRoughness); //vNormal = normalize(mix(vNormal + N0, vNormal + N1, mixFactor) * waveRoughness);
vNormal = normalize(N2.x * vec3(1.0, 0.0, 0.0) + N2.y * vec3(0.0, 1., 0.0) + N2.z * vNormal);
if (normalmap_dds > 0){ //dds fix if (normalmap_dds > 0){ //dds fix
Normal = -Normal; Normal = -Normal;
vNormal = -vNormal; vNormal = -vNormal;
@ -379,5 +380,5 @@ void main(void)
vec3( 0.3, 0.59, 0.11 ) vec3( 0.3, 0.59, 0.11 )
); );
float specular = smoothstep(0.0, 3.5, cover); float specular = smoothstep(0.0, 3.5, cover);
encode_gbuffer(Normal, finalColor.rgb, 254, specular, water_shininess, emission, gl_FragCoord.z); encode_gbuffer(Normal, finalColor.rgb, 254, specular, water_shininess, emission, gl_FragCoord.z);
} }