playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
40 lines (34 loc) • 1.21 kB
JavaScript
var normalMap_default = (
/* glsl */
`
uniform float material_bumpiness;
uniform float material_normalDetailMapBumpiness;
vec3 blendNormals(vec3 n1, vec3 n2) {
// https://blog.selfshadow.com/publications/blending-in-detail/#detail-oriented
n1 += vec3(0, 0, 1);
n2 *= vec3(-1, -1, 1);
return n1 * dot(n1, n2) / n1.z - n2;
}
void getNormal() {
vec3 normalMap = {STD_NORMAL_TEXTURE_DECODE}(texture2DBias({STD_NORMAL_TEXTURE_NAME}, {STD_NORMAL_TEXTURE_UV}, textureBias));
normalMap = mix(vec3(0.0, 0.0, 1.0), normalMap, material_bumpiness);
vec3 normalDetailMap = {STD_NORMALDETAIL_TEXTURE_DECODE}(texture2DBias({STD_NORMALDETAIL_TEXTURE_NAME}, {STD_NORMALDETAIL_TEXTURE_UV}, textureBias));
normalDetailMap = mix(vec3(0.0, 0.0, 1.0), normalDetailMap, material_normalDetailMapBumpiness);
normalMap = blendNormals(normalMap, normalDetailMap);
dNormalW = normalize(dTBN * normalMap);
dNormalW = dVertexNormalW;
}
`
);
export {
normalMap_default as default
};