UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

25 lines (24 loc) 1 kB
var lightSpecularGGX_default = ` float calcLightSpecular(float gloss, vec3 worldNormal, vec3 viewDir, vec3 h, vec3 lightDirNorm) { const float PI = 3.141592653589793; float roughness = max((1.0 - gloss) * (1.0 - gloss), 0.001); float alpha = roughness * roughness; float NoH = max(dot(worldNormal, h), 0.0); float NoV = max(dot(worldNormal, viewDir), 0.0); float NoL = max(dot(worldNormal, -lightDirNorm), 0.0); float NoH2 = NoH * NoH; float denom = NoH2 * (alpha - 1.0) + 1.0; float D = alpha / (PI * denom * denom); float alpha2 = alpha * alpha; float lambdaV = NoL * sqrt(NoV * NoV * (1.0 - alpha2) + alpha2); float lambdaL = NoV * sqrt(NoL * NoL * (1.0 - alpha2) + alpha2); float G = 0.5 / max(lambdaV + lambdaL, 0.00001); return D * G; } float getLightSpecular(vec3 h, vec3 reflDir, vec3 worldNormal, vec3 viewDir, vec3 lightDirNorm, float gloss, mat3 tbn) { return calcLightSpecular(gloss, worldNormal, viewDir, h, lightDirNorm); } `; export { lightSpecularGGX_default as default };