pex-renderer
Version:
Physically Based Renderer for Pex
62 lines (49 loc) • 1.27 kB
JavaScript
const SHADERS = require('../chunks/index.js')
module.exports = /* glsl */ `
precision highp float;
// Variables
// assuming texture in Linear Space
// most likely HDR or Texture2D with sRGB Ext
uniform sampler2D uEnvMap;
uniform int uEnvMapEncoding;
uniform int uOutputEncoding;
uniform float uBackgroundBlur;
varying vec3 wcNormal;
uniform bool uUseTonemapping;
${SHADERS.tonemapUncharted2}
uniform float uExposure;
// Includes
${SHADERS.math.PI}
${SHADERS.math.TWO_PI}
${SHADERS.rgbm}
${SHADERS.gamma}
${SHADERS.encodeDecode}
${SHADERS.envMapEquirect}
${SHADERS.octMap}
${SHADERS.irradiance}
void main() {
vec3 N = normalize(wcNormal);
vec4 color = vec4(0.0);
if (uBackgroundBlur <= 0.0) {
color = decode(texture2D(uEnvMap, envMapEquirect(N)), uEnvMapEncoding);
} else {
color = vec4(getIrradiance(N, uEnvMap, uEnvMapEncoding), 1.0);
}
if (uUseTonemapping) {
color.rgb *= uExposure;
color.rgb = tonemapUncharted2(color.rgb);
}
gl_FragData[0] = encode(color, uOutputEncoding);
gl_FragData[1] = vec4(0.0);
}
`