Browse Source

Renderer: Animate the blue noise

Panagiotis Christopoulos Charitos 9 years ago
parent
commit
a01390f706
3 changed files with 15 additions and 4 deletions
  1. 6 2
      shaders/Pps.frag.glsl
  2. 8 2
      src/anki/renderer/Pps.cpp
  3. 1 0
      tools/texture/convert_image.py

+ 6 - 2
shaders/Pps.frag.glsl

@@ -27,6 +27,11 @@ layout(ANKI_TEX_BINDING(0, 4)) uniform sampler2D u_smaaBlendTex;
 layout(ANKI_TEX_BINDING(0, 5)) uniform sampler2D u_dbgRt;
 #endif
 
+layout(std140, ANKI_UBO_BINDING(0, 0)) uniform u0_
+{
+	vec4 u_blueNoiseLayerPad3;
+};
+
 layout(std140, ANKI_SS_BINDING(0, 0)) readonly buffer s0_
 {
 	vec4 u_averageLuminancePad3;
@@ -155,8 +160,7 @@ void main()
 #endif
 
 #if BLUE_NOISE
-	ivec2 fragCoord = ivec2(gl_FragCoord.xy);
-	vec3 blueNoise = texelFetch(u_blueNoise, ivec3(fragCoord.x % 64, fragCoord.y % 64, 0), 0).rgb;
+	vec3 blueNoise = texture(u_blueNoise, vec3(FB_SIZE / vec2(64.0) * uv, u_blueNoiseLayerPad3.x), 0.0).rgb;
 	blueNoise = blueNoise * 2.0 - 1.0;
 	blueNoise = sign(blueNoise) * (1.0 - sqrt(1.0 - abs(blueNoise)));
 

+ 8 - 2
src/anki/renderer/Pps.cpp

@@ -111,7 +111,8 @@ Error Pps::run(RenderingContext& ctx)
 				"#define DRAW_TO_DEFAULT %u\n"
 				"#define SMAA_ENABLED 1\n"
 				"#define SMAA_RT_METRICS vec4(%f, %f, %f, %f)\n"
-				"#define SMAA_PRESET_%s\n",
+				"#define SMAA_PRESET_%s\n"
+				"#define FB_SIZE vec2(%uf, %uf)\n",
 				true,
 				m_sharpenEnabled,
 				m_r->getWidth(),
@@ -123,7 +124,9 @@ Error Pps::run(RenderingContext& ctx)
 				1.0 / m_r->getHeight(),
 				F32(m_r->getWidth()),
 				F32(m_r->getHeight()),
-				&m_r->getSmaa().m_qualityPerset[0]));
+				&m_r->getSmaa().m_qualityPerset[0],
+				m_r->getWidth(),
+				m_r->getHeight()));
 		}
 
 		if(!m_vert)
@@ -156,6 +159,9 @@ Error Pps::run(RenderingContext& ctx)
 
 	cmdb->bindStorageBuffer(0, 0, m_r->getTm().m_luminanceBuff, 0, MAX_PTR_SIZE);
 
+	Vec4* uniforms = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
+	uniforms->x() = F32(m_r->getFrameCount() % m_blueNoise->getLayerCount());
+
 	// Get or create FB
 	FramebufferPtr* fb = nullptr;
 	U width, height;

+ 1 - 0
tools/texture/convert_image.py

@@ -683,6 +683,7 @@ def main():
 	if (config.type == TT_3D or config.type == TT_2D_ARRAY) and len(config.in_files) < 2:
 		#raise Exception("Not enough images for 2DArray/3D texture")
 		printw("Not enough images for 2DArray/3D texture")
+	printi("Number of images %u" % len(config.in_files))
 
 	if config.type == TT_2D and len(config.in_files) != 1:
 		raise Exception("Only one image for 2D textures needed")