cables_dev/cables/src/libs/cgl/light/createshaders.js
- export function getShadowPassVertexShader()
- {
- return `
- IN vec3 vPosition;
- IN vec2 attrTexCoord;
- IN vec3 attrVertNormal;
- IN float attrVertIndex;
- IN vec3 attrTangent;
- IN vec3 attrBiTangent;
-
- UNI mat4 projMatrix;
- UNI mat4 modelMatrix;
- UNI mat4 viewMatrix;
-
-
- OUT vec2 texCoord;
- OUT vec3 norm;
-
- {{MODULES_HEAD}}
-
- ${this.type === "point" ? "OUT vec3 modelPos;" : ""}
- void main() {
- texCoord=attrTexCoord;
- texCoord.y = 1. - texCoord.y;
- norm=attrVertNormal;
- vec4 pos = vec4(vPosition, 1.0);
- mat4 mMatrix=modelMatrix;
- vec3 tangent = attrTangent;
- vec3 bitangent = attrBiTangent;
-
- {{MODULE_VERTEX_POSITION}}
-
- mat4 mvMatrix=viewMatrix * mMatrix;
- vec4 vPos = projMatrix * mvMatrix * pos;
- ${this.type === "point" ? "modelPos = (mMatrix * pos).xyz;" : ""}
- gl_Position = vPos;
- }
- `;
- }
-
- export function getShadowPassFragmentShader()
- {
- /*
- // http://fabiensanglard.net/shadowmappingVSM/
- #define SQRT3 1.73205081
- #define SQRT3DIV2 0.86602540378
- #define SQRT12DIV9 -0.38490017946
-
- // FOR MOMENT SHADOW MAPPING
- const mat4 ENCODE_MATRIX = mat4(
- vec4(1.5, 0., SQRT3DIV2, 0.),
- vec4(0., 4., 0., 0.5),
- vec4(-2., 0., SQRT12DIV9, 0.),
- vec4(0., -4., 0., 0.5)
- );
- */
- /*
- dot(x, x) = x*x
- Finally, it is usually beneficial to clamp the partial derivative portion of M 2
- to avoid an excessively high variance if an occluder is almost parallel to the light direction.
- Hardware-generated partial derivatives become somewhat unstable in these cases
- and a correspondingly unstable variance can produce random, flashing pixels of light
- in regions that should be fully shadowed.
- https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-8-summed-area-variance-shadow-maps
- */
- return `
- {{MODULES_HEAD}}
- ${this.type === "point" ? "IN vec3 modelPos;" : ""}
- ${this.type === "point" ? "UNI vec3 inLightPosition;" : ""}
- ${this.type === "point" ? "UNI vec2 inNearFar;" : ""}
-
- IN vec2 texCoord;
-
- void main() {
- {{MODULE_BEGIN_FRAG}}
- vec4 col = vec4(1.);
-
-
- outColor = vec4(1.);
-
- {{MODULE_COLOR}}
-
- ${this.type === "point" ? "vec3 fromLightToFrag = (modelPos - inLightPosition);" : ""}
-
-
- ${this.type === "point" ? "float depth = (length(fromLightToFrag) - inNearFar.x) / (inNearFar.y - inNearFar.x);" : "float depth = gl_FragCoord.z;"}
-
- float dx = dFdx(depth); // for biasing depth-per-pixel
- float dy = dFdy(depth); // for biasing depth-per-pixel
-
- float clampedDerivative = clamp(dot(dx, dx) + dot(dy, dy), 0., 1.);
- float moment2 = dot(depth, depth) + 0.25 * clampedDerivative;
-
- outColor.x = depth;
- outColor.y = moment2;
- outColor.z = depth;
- }
- `;
- }
-
- export function getBlurPassVertexShader()
- {
- if (this.type === "point") return "";
- return `
-
- IN vec3 vPosition;
- IN vec2 attrTexCoord;
-
- OUT vec2 texCoord;
- OUT vec2 coord0;
- OUT vec2 coord1;
- OUT vec2 coord2;
- OUT vec2 coord3;
- OUT vec2 coord4;
- OUT vec2 coord5;
- OUT vec2 coord6;
-
- UNI mat4 projMatrix;
- UNI mat4 mvMatrix;
- UNI mat4 modelMatrix;
-
- UNI vec2 inXY;
-
- void main() {
- texCoord=attrTexCoord;
-
- vec4 pos = vec4(vPosition, 1.0);
-
- {{MODULE_VERTEX_POSITION}}
-
- coord3 = attrTexCoord;
-
-
- coord0 = attrTexCoord + (-3.0368997744118595 * inXY);
- coord0 = clamp(coord0, 0., 1.);
- coord1 = attrTexCoord + (-2.089778445362373 * inXY);
- coord1 = clamp(coord1, 0., 1.);
- coord2 = attrTexCoord + (-1.2004366090034069 * inXY);
- coord2 = clamp(coord2, 0., 1.);
- coord4 = attrTexCoord + (1.2004366090034069 * inXY);
- coord4 = clamp(coord4, 0., 1.);
- coord5 = attrTexCoord + (2.089778445362373* inXY);
- coord5 = clamp(coord5, 0., 1.);
- coord6 = attrTexCoord + (3.0368997744118595 * inXY);
- coord6 = clamp(coord6, 0., 1.);
-
- gl_Position = projMatrix * mvMatrix * pos;
- }
- `;
- }
-
- export function getBlurPassFragmentShader()
- {
- if (this.type === "point") return "";
-
- return `
- UNI sampler2D tex;
-
- IN vec2 coord0;
- IN vec2 coord1;
- IN vec2 coord2;
- IN vec2 coord3;
- IN vec2 coord4;
- IN vec2 coord5;
- IN vec2 coord6;
-
- void main() {
-
- vec4 color = vec4(0.0);
-
-
- color.xyz += texture(tex, coord0).xyz * 0.06927096443792478; // 1/64
- color.xyz += texture(tex, coord1).xyz * 0.1383328848652136; // 6/64
- color.xyz += texture(tex, coord2).xyz * 0.21920904690397863; // 15/64
- color.xyz += texture(tex, coord3).xyz * 0.14637421; // 20/64
- color.xyz += texture(tex, coord4).xyz * 0.21920904690397863; // 15/64
- color.xyz += texture(tex, coord5).xyz * 0.1383328848652136; // 6/64
- color.xyz += texture(tex, coord6).xyz * 0.06927096443795711; // 1/64
-
- color.a = 1.;
-
- outColor = color;
- }
- `;
- }