| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma anki start vert
- #include <AnKi/Shaders/QuadVert.glsl>
- #pragma anki end
- #pragma anki start frag
- #include <AnKi/Shaders/BilateralFilter.glsl>
- layout(set = 0, binding = 0) uniform sampler u_nearestAnyClampSampler;
- layout(set = 0, binding = 1) uniform sampler u_linearAnyClampSampler;
- layout(set = 0, binding = 2) uniform texture2D u_quarterDiffuseIndirectTex;
- layout(set = 0, binding = 3) uniform texture2D u_quarterDepthTex;
- layout(set = 0, binding = 4) uniform texture2D u_fullDepthTex;
- layout(set = 0, binding = 5) uniform texture2D u_gbuffer0Tex;
- layout(push_constant, std430) uniform b_pc
- {
- Vec2 u_quadTexelSize;
- Vec2 u_padding;
- };
- layout(location = 0) in Vec2 in_uv;
- layout(location = 0) out Vec3 out_color;
- void main()
- {
- // Reference
- const F32 depthCenter = textureLod(u_fullDepthTex, u_linearAnyClampSampler, in_uv, 0.0).x;
- // Do a bilateral upscale
- out_color = Vec3(0.0);
- const F32 radius = 1.0;
- F32 sumWeight = EPSILON;
- for(F32 x = -radius; x <= radius; x += 1.0)
- {
- for(F32 y = -radius; y <= radius; y += 1.0)
- {
- const Vec2 sampleUv = in_uv + Vec2(x, y) * u_quadTexelSize;
- const F32 depthTap = textureLod(u_quarterDepthTex, u_linearAnyClampSampler, sampleUv, 0.0).x;
- const F32 w = calculateBilateralWeightDepth(depthCenter, depthTap, 1.0);
- sumWeight += w;
- const Vec3 colorTap = textureLod(u_quarterDiffuseIndirectTex, u_nearestAnyClampSampler, sampleUv, 0.0).xyz;
- out_color += colorTap * w;
- }
- }
- // Modulate
- out_color /= sumWeight;
- const Vec3 albedo = textureLod(u_gbuffer0Tex, u_linearAnyClampSampler, in_uv, 0.0).xyz;
- out_color *= albedo;
- }
- #pragma anki end
|