gta-modeview/shaders.js
2020-07-29 22:10:38 +02:00

190 lines
3.9 KiB
JavaScript

const defaultVS = `
attribute vec3 in_pos;
attribute vec3 in_normal;
attribute vec4 in_color;
attribute vec2 in_tex0;
uniform mat4 u_world;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform vec4 u_matColor;
uniform vec4 u_surfaceProps;
uniform vec3 u_ambLight;
uniform vec3 u_lightDir;
uniform vec3 u_lightCol;
varying highp vec4 v_color;
varying highp vec2 v_tex0;
void main() {
gl_Position = u_proj * u_view * u_world * vec4(in_pos, 1.0);
v_tex0 = in_tex0;
v_color = in_color;
v_color.rgb += u_ambLight*u_surfaceProps.x;
vec3 N = mat3(u_world) * in_normal;
float L = max(0.0, dot(N, -normalize(u_lightDir)));
v_color.rgb += L*u_lightCol*u_surfaceProps.z;
v_color = clamp(v_color, 0.0, 1.0);
v_color *= u_matColor;
}
`;
const defaultFS = `
uniform sampler2D tex;
uniform highp float u_alphaRef;
varying highp vec4 v_color;
varying highp vec2 v_tex0;
void main() {
gl_FragColor = v_color*texture2D(tex, v_tex0);
if(gl_FragColor.a < u_alphaRef)
discard;
}
`;
const envVS = `
attribute vec3 in_pos;
attribute vec3 in_normal;
attribute vec4 in_color;
attribute vec2 in_tex0;
uniform mat4 u_world;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_env;
uniform vec4 u_matColor;
uniform vec4 u_surfaceProps;
uniform vec3 u_ambLight;
uniform vec3 u_lightDir;
uniform vec3 u_lightCol;
varying highp vec4 v_color0;
varying highp vec4 v_color1;
varying highp vec2 v_tex0;
varying highp vec2 v_tex1;
void main() {
gl_Position = u_proj * u_view * u_world * vec4(in_pos, 1.0);
v_tex0 = in_tex0;
v_color0 = in_color;
v_color0.rgb += u_ambLight*u_surfaceProps.x;
vec3 N = mat3(u_world) * in_normal;
float L = max(0.0, dot(N, -normalize(u_lightDir)));
v_color0.rgb += L*u_lightCol*u_surfaceProps.z;
v_color0 = clamp(v_color0, 0.0, 1.0);
v_color0 *= u_matColor;
v_color1 = v_color0*u_surfaceProps.y;
v_tex1 = (u_env*vec4(N, 1.0)).xy;
}
`;
const envFS = `
uniform sampler2D tex0;
uniform sampler2D tex1;
uniform highp float u_alphaRef;
varying highp vec4 v_color0;
varying highp vec4 v_color1;
varying highp vec2 v_tex0;
varying highp vec2 v_tex1;
void main() {
gl_FragColor = v_color0*texture2D(tex0, v_tex0);
if(gl_FragColor.a < u_alphaRef)
discard;
gl_FragColor.rgb += (v_color1*texture2D(tex1, v_tex1)).rgb;
}
`;
const carPS2VS = `
attribute vec3 in_pos;
attribute vec3 in_normal;
attribute vec4 in_color;
attribute vec2 in_tex0;
attribute vec2 in_tex1;
uniform mat4 u_world;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_env;
uniform vec4 u_matColor;
uniform vec4 u_surfaceProps;
uniform vec3 u_ambLight;
uniform vec3 u_lightDir;
uniform vec3 u_lightCol;
varying highp vec4 v_color0;
varying highp vec4 v_color1;
varying highp vec4 v_color2;
varying highp vec2 v_tex0;
varying highp vec2 v_tex1;
varying highp vec2 v_tex2;
void main() {
gl_Position = u_proj * u_view * u_world * vec4(in_pos, 1.0);
v_tex0 = in_tex0;
v_color0 = in_color;
v_color0.rgb += u_ambLight*u_surfaceProps.x;
vec3 N = mat3(u_world) * in_normal;
float L = max(0.0, dot(N, -normalize(u_lightDir)));
v_color0.rgb += L*u_lightCol*u_surfaceProps.z;
v_color0 = clamp(v_color0, 0.0, 1.0);
v_color0 *= u_matColor;
v_tex1 = in_tex1;
v_color1 = vec4(1.5*u_surfaceProps.w);
N = mat3(u_view) * N;
vec3 D = mat3(u_view) * u_lightDir;
N = D - 2.0*N*dot(N, D);
v_tex2 = (N.xy + vec2(1.0, 1.0))/2.0;
if(N.z < 0.0)
v_color2 = vec4(0.75*u_surfaceProps.y);
else
v_color2 = vec4(0.0);
}
`;
const carPS2FS = `
uniform sampler2D tex0;
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform highp float u_alphaRef;
varying highp vec4 v_color0;
varying highp vec4 v_color1;
varying highp vec4 v_color2;
varying highp vec2 v_tex0;
varying highp vec2 v_tex1;
varying highp vec2 v_tex2;
void main() {
gl_FragColor = v_color0*texture2D(tex0, v_tex0);
if(gl_FragColor.a < u_alphaRef)
discard;
gl_FragColor.rgb += (v_color1*texture2D(tex1, v_tex1)).rgb;
gl_FragColor.rgb += (v_color2*texture2D(tex2, v_tex2)).rgb;
}
`;