Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Library for shadow map lookup
- */
- vec4 getLightMapValueAt(
- in vec3 blockPosition,
- in sampler3D lightMap0,
- in sampler3D lightMap1,
- in sampler3D lightMap2,
- in sampler3D lightMap3,
- in sampler3D lightMap4,
- in sampler3D lightMap5,
- in sampler3D lightMap6,
- in sampler3D lightMap7,
- in sampler3D lightMap8
- ) {
- ivec3 shadowMapPosition = ivec3(modulo(blockPosition.x, 32.0), blockPosition.y, modulo(blockPosition.z, 32.0));
- if (blockPosition.x < 0.0) {
- if (blockPosition.z < 0.0) {
- return texelFetch(lightMap0, shadowMapPosition, 0);
- } else
- if (blockPosition.z < 32.0) {
- return texelFetch(lightMap3, shadowMapPosition, 0);
- } else {
- return texelFetch(lightMap6, shadowMapPosition, 0);
- }
- } else
- if (blockPosition.x < 32.0) {
- if (blockPosition.z < 0.0) {
- return texelFetch(lightMap1, shadowMapPosition, 0);
- } else
- if (blockPosition.z < 32.0) {
- return texelFetch(lightMap4, shadowMapPosition, 0);
- } else {
- return texelFetch(lightMap7, shadowMapPosition, 0);
- }
- } else {
- if (blockPosition.z < 0.0) {
- return texelFetch(lightMap2, shadowMapPosition, 0);
- } else
- if (blockPosition.z < 32.0) {
- return texelFetch(lightMap5, shadowMapPosition, 0);
- } else {
- return texelFetch(lightMap8, shadowMapPosition, 0);
- }
- }
- }
- vec4 getLightMapValueAtBlockPosition(
- in vec3 position,
- in sampler3D lightMap0,
- in sampler3D lightMap1,
- in sampler3D lightMap2,
- in sampler3D lightMap3,
- in sampler3D lightMap4,
- in sampler3D lightMap5,
- in sampler3D lightMap6,
- in sampler3D lightMap7,
- in sampler3D lightMap8
- ) {
- vec3 blockPosition = vec3(floor(position.x), floor(position.y), floor(position.z));
- vec3 blockCenterPosition = blockPosition + vec3(0.5, 0.5, 0.5);
- return getLightMapValueAt(blockCenterPosition, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- }
- /**
- * returns the mix of the 4 closest lights (over shadow map borders!)
- */
- vec4 getCubedMixedLightMapValueAt(
- in vec3 position,
- in sampler3D lightMap0,
- in sampler3D lightMap1,
- in sampler3D lightMap2,
- in sampler3D lightMap3,
- in sampler3D lightMap4,
- in sampler3D lightMap5,
- in sampler3D lightMap6,
- in sampler3D lightMap7,
- in sampler3D lightMap8
- ) {
- vec3 cubePosition = vec3(floor(position.x), floor(position.y), floor(position.z));
- vec3 cubeCenterPosition = cubePosition + vec3(0.5, 0.5, 0.5);
- vec3 normalVector = position - cubeCenterPosition;
- vec3 directionX = vec3(sign(normalVector.x), 0, 0);
- vec3 directionY = vec3(0, sign(normalVector.y), 0);
- vec3 directionZ = vec3(0, 0, sign(normalVector.z));
- vec4 tmp0 = getLightMapValueAtBlockPosition(cubeCenterPosition, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp1 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionX, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp2 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionY, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp3 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionX + directionY, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- float xPos = abs(position.x - cubeCenterPosition.x);
- float yPos = abs(position.y - cubeCenterPosition.y);
- vec4 tmpShadow1 = mix(tmp0, tmp1, xPos);
- vec4 tmpShadow2 = mix(tmp2, tmp3, xPos);
- vec4 tmpShadowZ0 = mix(tmpShadow1, tmpShadow2, yPos);
- vec4 tmp4 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionZ, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp5 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionX + directionZ, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp6 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionY + directionZ, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmp7 = getLightMapValueAtBlockPosition(cubeCenterPosition + directionX + directionY + directionZ, lightMap0, lightMap1, lightMap2, lightMap3, lightMap4, lightMap5, lightMap6, lightMap7, lightMap8);
- vec4 tmpShadow3 = mix(tmp4, tmp5, xPos);
- vec4 tmpShadow4 = mix(tmp6, tmp7, xPos);
- vec4 tmpShadowZ1 = mix(tmpShadow3, tmpShadow4, yPos);
- float zPos = abs(position.z - cubeCenterPosition.z);
- return mix(tmpShadowZ0, tmpShadowZ1, zPos);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement