glsl-specular-cook-torrance
Cook-Torrance specular/fresnel lighting term
Last updated 6 years ago by mikolalysenko .
MIT · Repository · Bugs · Original npm · Tarball · package.json
`\$ cnpm install glsl-specular-cook-torrance `
SYNC missed versions from official npm registry.

# glsl-specular-cook-torrance

Computes the specular power in the Cook-Torrance model.

# Example

``````#pragma glslify: cookTorranceSpec = require(glsl-specular-cook-torrance)

uniform vec3 eyePosition;
uniform vec3 lightPosition;

uniform float roughness, fresnel;

varying vec3 surfacePosition, surfaceNormal;

void main() {
//Light and view geometry
vec3 viewDirection = normalize(eyePosition - surfacePosition);
vec3 lightDirection = normalize(lightPosition - surfacePosition);

//Surface properties
vec3 normal = normalize(surfaceNormal);

//Compute specular power
float power = cookTorranceSpec(
lightDirection,
viewDirection,
normal,
roughness,
fresnel);

gl_FragColor = vec4(power,power,power,1.0);
}
``````

# Usage

Install with npm:

``````npm install glsl-specular-phong
``````

Then use with glslify.

# API

``````#pragma glslify: cookTorrance = require(glsl-specular-cook-torrance)
``````
##### `float cookTorrance(vec3 lightDir, vec3 eyeDir, vec3 normal, float roughness, float fresnel)`

Computes the specular power in the Cook-Torrance

• `lightDir` is a unit length `vec3` pointing from the surface point toward the light
• `eyeDir` is a unit length `vec3` pointing from the surface point toward the camera
• `normal` is the unit length surface normal at the sample point
• `roughness` is the surface roughness parameter, between 0 and 1. 0 means surface is perfectly smooth, 1 means surface is matte
• `fresnel` the Fresnel exponent. 0 = no Fresnel, higher values create a rim effect around objects

Returns A `float` representing the specular power

Note Unlike the usual Cook-Torrance model, the light power is not scaled by 1/(normal . lightDirection). This avoids an unnecessary numerically unstable division, but requires modifying how diffuse light is calculated.

(c) 2014 Mikola Lysenko. MIT License

## Current Tags

• 2.0.1                                ...           latest (6 years ago)

## 4 Versions

• 2.0.1                                ...           6 years ago
• 2.0.0                                ...           6 years ago
• 1.0.1                                ...           6 years ago
• 1.0.0                                ...           6 years ago
Maintainers (18)