UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

23 lines (21 loc) 788 B
var lightSheenPS = ` float sheenD(vec3 normal, vec3 h, float roughness) { const float PI = 3.141592653589793; float invR = 1.0 / (roughness * roughness); float cos2h = max(dot(normal, h), 0.0); cos2h *= cos2h; float sin2h = max(1.0 - cos2h, 0.0078125); return (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * PI); } float sheenV(vec3 normal, vec3 viewDir, vec3 light) { float NoV = max(dot(normal, viewDir), 0.000001); float NoL = max(dot(normal, light), 0.000001); return 1.0 / (4.0 * (NoL + NoV - NoL * NoV)); } float getLightSpecularSheen(vec3 h, vec3 worldNormal, vec3 viewDir, vec3 lightDirNorm, float sheenGloss) { float D = sheenD(worldNormal, h, sheenGloss); float V = sheenV(worldNormal, viewDir, -lightDirNorm); return D * V; } `; export { lightSheenPS as default };