voxel-test/resources/shaders/tiling.fs

44 lines
1.6 KiB
Forth
Raw Normal View History

2024-09-19 21:33:32 +01:00
#version 330 core
uniform sampler2D diffuseMap;
uniform vec2 textureTiling;
in vec2 fragTexCoord;
in vec3 fragNormal;
in vec2 fragTileTexCoord;
2024-12-23 18:45:07 +00:00
flat in int ambientOcclusionSide1;
flat in int ambientOcclusionSide2;
flat in int ambientOcclusionCorner1;
flat in int ambientOcclusionCorner2;
flat in int ambientOcclusionCorner3;
flat in int quadHeight;
flat in int quadWidth;
2024-09-19 21:33:32 +01:00
out vec4 outColor;
// this is a shitty approximation of arcsin(x)/pi that gets the tails right and is reasonably close to the actual arcsin(x)/pi curve.
float fakeArcsin(float x) {
x = clamp(x, -1.0, 1.0);
float ax = abs(x);
float sqrtPart = sqrt(1.0 - ax);
float result = 0.5 - sqrtPart * (0.5 - 0.06667 * ax);
return x < 0.0 ? -result : result;
}
2024-09-19 21:33:32 +01:00
void main()
{
vec2 texCoord = (floor(fragTexCoord*textureTiling) + fract(fragTileTexCoord)) / textureTiling;
2024-09-19 21:33:32 +01:00
outColor = texture(diffuseMap, texCoord);
2024-12-23 18:45:07 +00:00
ivec2 floorFragTileTexCoord = ivec2(fragTileTexCoord);
if(fragTileTexCoord.x < 1 && (((ambientOcclusionSide1 >> floorFragTileTexCoord.y) & 1) == 1)) outColor *= 0.5 + fakeArcsin(fragTileTexCoord.x);
// if(fragTileTexCoord.x < 0.125 && fragTileTexCoord.x < fract(fragTileTexCoord.y) && fragTileTexCoord.x + fract(fragTileTexCoord.y) < 1.0 && ((ambientOcclusionSide1 >> floorFragTileTexCoord.y) & 1) == 1) outColor *= 0.5;
//if((fragTileTexCoord.x < 0.25 || fragTileTexCoord.x > quadWidth-0.25) && (((ambientOcclusionSide1 >> floorFragTileTexCoord.y) & 1) == 1)) outColor *= 0.5;
//if((fragTileTexCoord.y < 0.25 || fragTileTexCoord.y > quadHeight-0.25) && (((ambientOcclusionSide2 >> floorFragTileTexCoord.y) & 1) == 1)) outColor *= 0.5;
2024-12-23 18:45:07 +00:00
outColor.a = 1;
2024-09-19 21:33:32 +01:00
}