mirror of
https://github.com/processing/processing4.git
synced 2026-02-06 07:09:18 +01:00
46 lines
1.1 KiB
GLSL
46 lines
1.1 KiB
GLSL
// Copyright (C) 2007 Dave Griffiths
|
|
// Copyright (C) 2007 Dave Griffiths
|
|
// Licence: GPLv2 (see COPYING)
|
|
// Fluxus Shader Library
|
|
// ---------------------
|
|
// Glossy Specular Reflection Shader
|
|
// A more controllable version of blinn shading,
|
|
// Useful for ceramic or fluids - from Advanced
|
|
// Renderman, thanks to Larry Gritz
|
|
|
|
#ifdef GL_ES
|
|
precision mediump float;
|
|
precision mediump int;
|
|
#endif
|
|
|
|
uniform vec3 AmbientColour;
|
|
uniform vec3 DiffuseColour;
|
|
uniform vec3 SpecularColour;
|
|
uniform float AmbientIntensity;
|
|
uniform float DiffuseIntensity;
|
|
uniform float SpecularIntensity;
|
|
uniform float Roughness;
|
|
uniform float Sharpness;
|
|
|
|
varying vec3 N;
|
|
varying vec3 P;
|
|
varying vec3 V;
|
|
varying vec3 L;
|
|
|
|
void main()
|
|
{
|
|
float w = 0.18*(1.0-Sharpness);
|
|
|
|
vec3 l = normalize(L);
|
|
vec3 n = normalize(N);
|
|
vec3 v = normalize(V);
|
|
vec3 h = normalize(l+v);
|
|
|
|
float diffuse = dot(l,n);
|
|
float specular = smoothstep(0.72-w,0.72+w,pow(max(0.0,dot(n,h)),1.0/Roughness));
|
|
|
|
gl_FragColor = vec4(AmbientColour*AmbientIntensity +
|
|
DiffuseColour*diffuse*DiffuseIntensity +
|
|
SpecularColour*specular*SpecularIntensity,1);
|
|
}
|