UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

49 lines (48 loc) 1.78 kB
module.exports = [ '#pragma phaserTemplate(shaderName)', 'precision mediump float;', 'uniform sampler2D uMainSampler;', 'uniform float uRadius;', 'uniform float uPower;', 'varying vec2 outTexCoord;', '#define PI 3.14159265358979323846', '#pragma phaserTemplate(fragmentHeader)', '#define STEP_X 1.0 / SAMPLES_X', '#define STEP_Y 1.0 / SAMPLES_Y', 'vec3 uvPanoramaNormal(vec2 uv)', '{', ' float y = uv.y * 2.0 - 1.0;', ' float angle = (uv.x * 2.0 - 1.0) * PI;', ' float x = sin(angle);', ' float z = cos(angle);', ' vec2 xz = vec2(x, z);', ' xz *= sqrt(1.0 - y * y);', ' return normalize(vec3(xz.x, y, xz.y));', '}', 'void main()', '{', ' vec3 acc = vec3(0.0);', ' float div = 0.0;', ' vec3 texelNormal = uvPanoramaNormal(outTexCoord);', ' for (float y = STEP_Y / 2.0; y < 1.0; y += STEP_Y)', ' {', ' float yWeight = cos((y * 2.0 - 1.0) * PI / 2.0);', ' for (float x = STEP_X / 2.0; x < 1.0; x += STEP_X)', ' {', ' vec2 uv = vec2(x, y);', ' vec3 sampleNormal = uvPanoramaNormal(uv);', ' float dotProduct = dot(sampleNormal, texelNormal);', ' dotProduct = (dotProduct - 1.0 + uRadius) / uRadius;', ' if (dotProduct <= 0.0)', ' {', ' continue;', ' }', ' vec3 color = texture2D(uMainSampler, uv).rgb;', ' color *= pow(length(color), uPower);', ' acc += color * dotProduct * yWeight;', ' div += dotProduct * yWeight;', ' }', ' }', ' gl_FragColor = vec4(acc / div, 1.0);', '}', ].join('\n');