Browse Source

Finalizing indirect lighting

Panagiotis Christopoulos Charitos 10 years ago
parent
commit
8a609cbffe
5 changed files with 30 additions and 23 deletions
  1. 2 2
      shaders/MsCommonFrag.glsl
  2. 9 7
      shaders/Refl.frag.glsl
  3. 2 1
      src/renderer/Ms.cpp
  4. 13 9
      src/renderer/Refl.cpp
  5. 4 4
      testapp/Main.cpp

+ 2 - 2
shaders/MsCommonFrag.glsl

@@ -221,9 +221,9 @@ void writeRts(in vec3 diffColor, // from 0 to 1
 	in float metallic)
 	in float metallic)
 {
 {
 	GbufferInfo g;
 	GbufferInfo g;
-	g.diffuse = diffColor;
+	g.diffuse = mix(diffColor, vec3(0.0), metallic);
 	g.normal = normal;
 	g.normal = normal;
-	g.specular = specularColor;
+	g.specular = mix(specularColor, diffColor, metallic);
 	g.roughness = roughness;
 	g.roughness = roughness;
 	g.subsurface = subsurface;
 	g.subsurface = subsurface;
 	g.emission = emission;
 	g.emission = emission;

+ 9 - 7
shaders/Refl.frag.glsl

@@ -7,8 +7,9 @@
 
 
 // Common
 // Common
 layout(TEX_BINDING(0, 0)) uniform sampler2D u_depthRt;
 layout(TEX_BINDING(0, 0)) uniform sampler2D u_depthRt;
-layout(TEX_BINDING(0, 1)) uniform sampler2D u_msRt1;
-layout(TEX_BINDING(0, 2)) uniform sampler2D u_msRt2;
+layout(TEX_BINDING(0, 1)) uniform sampler2D u_msRt0;
+layout(TEX_BINDING(0, 2)) uniform sampler2D u_msRt1;
+layout(TEX_BINDING(0, 3)) uniform sampler2D u_msRt2;
 
 
 layout(std140, UBO_BINDING(0, 0)) uniform u0_
 layout(std140, UBO_BINDING(0, 0)) uniform u0_
 {
 {
@@ -18,7 +19,7 @@ layout(std140, UBO_BINDING(0, 0)) uniform u0_
 
 
 // SSLR
 // SSLR
 #if SSLR_ENABLED
 #if SSLR_ENABLED
-layout(TEX_BINDING(0, 3)) uniform sampler2D u_isRt;
+layout(TEX_BINDING(0, 4)) uniform sampler2D u_isRt;
 #include "shaders/Sslr.glsl"
 #include "shaders/Sslr.glsl"
 #endif
 #endif
 
 
@@ -26,7 +27,7 @@ layout(TEX_BINDING(0, 3)) uniform sampler2D u_isRt;
 #if IR_ENABLED
 #if IR_ENABLED
 #define IMAGE_REFLECTIONS_SET 0
 #define IMAGE_REFLECTIONS_SET 0
 #define IMAGE_REFLECTIONS_FIRST_SS_BINDING 0
 #define IMAGE_REFLECTIONS_FIRST_SS_BINDING 0
-#define IMAGE_REFLECTIONS_TEX_BINDING 4
+#define IMAGE_REFLECTIONS_TEX_BINDING 5
 #include "shaders/ImageReflections.glsl"
 #include "shaders/ImageReflections.glsl"
 #undef IMAGE_REFLECTIONS_SET
 #undef IMAGE_REFLECTIONS_SET
 #undef IMAGE_REFLECTIONS_FIRST_SS_BINDING
 #undef IMAGE_REFLECTIONS_FIRST_SS_BINDING
@@ -48,8 +49,7 @@ void main()
 		(2.0 * in_texCoord - 1.0) * u_projectionParams.xy * posVSpace.z;
 		(2.0 * in_texCoord - 1.0) * u_projectionParams.xy * posVSpace.z;
 
 
 	GbufferInfo gbuffer;
 	GbufferInfo gbuffer;
-	readSpecularRoughnessFromGBuffer(u_msRt1, in_texCoord, gbuffer);
-	readNormalMetallicFromGBuffer(u_msRt2, in_texCoord, gbuffer);
+	readGBuffer(u_msRt0, u_msRt1, u_msRt2, in_texCoord, gbuffer);
 
 
 	// Compute relflection vector
 	// Compute relflection vector
 	vec3 eye = normalize(posVSpace);
 	vec3 eye = normalize(posVSpace);
@@ -84,6 +84,8 @@ void main()
 	vec3 specIndirect, diffIndirect;
 	vec3 specIndirect, diffIndirect;
 	readIndirect(
 	readIndirect(
 		posVSpace, r, gbuffer.normal, reflLod, specIndirect, diffIndirect);
 		posVSpace, r, gbuffer.normal, reflLod, specIndirect, diffIndirect);
+
+	diffIndirect *= gbuffer.diffuse;
 #endif
 #endif
 
 
 	// Finalize the indirect specular
 	// Finalize the indirect specular
@@ -92,5 +94,5 @@ void main()
 	specIndirect = specIndirect * (gbuffer.specular * envBRDF.x + envBRDF.y);
 	specIndirect = specIndirect * (gbuffer.specular * envBRDF.x + envBRDF.y);
 
 
 	// Finalize
 	// Finalize
-	out_indirectColor = diffIndirect + specIndirect * gbuffer.metallic;
+	out_indirectColor = diffIndirect + specIndirect;
 }
 }

+ 2 - 1
src/renderer/Ms.cpp

@@ -47,7 +47,7 @@ Error Ms::createRt(U32 index, U32 samples)
 		RT_PIXEL_FORMATS[0],
 		RT_PIXEL_FORMATS[0],
 		samples,
 		samples,
 		SamplingFilter::NEAREST,
 		SamplingFilter::NEAREST,
-		1,
+		2,
 		plane.m_rt0);
 		plane.m_rt0);
 
 
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
@@ -181,6 +181,7 @@ void Ms::generateMipmaps(CommandBufferPtr& cmdb)
 {
 {
 	U planeId = (m_r->getSamples() == 1) ? 1 : 0;
 	U planeId = (m_r->getSamples() == 1) ? 1 : 0;
 	cmdb->generateMipmaps(m_planes[planeId].m_depthRt);
 	cmdb->generateMipmaps(m_planes[planeId].m_depthRt);
+	cmdb->generateMipmaps(m_planes[planeId].m_rt0);
 	cmdb->generateMipmaps(m_planes[planeId].m_rt1);
 	cmdb->generateMipmaps(m_planes[planeId].m_rt1);
 	cmdb->generateMipmaps(m_planes[planeId].m_rt2);
 	cmdb->generateMipmaps(m_planes[planeId].m_rt2);
 }
 }

+ 13 - 9
src/renderer/Refl.cpp

@@ -135,24 +135,28 @@ Error Refl::init1stPass(const ConfigSet& config)
 	rcInit.m_textures[0].m_texture = m_r->getMs().getDepthRt();
 	rcInit.m_textures[0].m_texture = m_r->getMs().getDepthRt();
 	rcInit.m_textures[0].m_sampler = gr.newInstance<Sampler>(sinit);
 	rcInit.m_textures[0].m_sampler = gr.newInstance<Sampler>(sinit);
 
 
-	rcInit.m_textures[1].m_texture = m_r->getMs().getRt1();
-	rcInit.m_textures[1].m_sampler = gr.newInstance<Sampler>(sinit);
+	rcInit.m_textures[1].m_texture = m_r->getMs().getRt0();
+	rcInit.m_textures[1].m_sampler = rcInit.m_textures[0].m_sampler;
 
 
-	rcInit.m_textures[2].m_texture = m_r->getMs().getRt2();
-	rcInit.m_textures[2].m_sampler = gr.newInstance<Sampler>(sinit);
+	rcInit.m_textures[2].m_texture = m_r->getMs().getRt1();
+	rcInit.m_textures[2].m_sampler = rcInit.m_textures[0].m_sampler;
+
+	rcInit.m_textures[3].m_texture = m_r->getMs().getRt2();
+	rcInit.m_textures[3].m_sampler = rcInit.m_textures[0].m_sampler;
 
 
 	if(m_sslrEnabled)
 	if(m_sslrEnabled)
 	{
 	{
-		rcInit.m_textures[3].m_texture = m_r->getIs().getRt();
+		rcInit.m_textures[4].m_texture = m_r->getIs().getRt();
 	}
 	}
 
 
 	if(m_irEnabled)
 	if(m_irEnabled)
 	{
 	{
-		rcInit.m_textures[4].m_texture = m_ir->getEnvironmentCubemapArray();
-		rcInit.m_textures[5].m_texture = m_ir->getIrradianceCubemapArray();
+		rcInit.m_textures[5].m_texture = m_ir->getEnvironmentCubemapArray();
+		
+		rcInit.m_textures[6].m_texture = m_ir->getIrradianceCubemapArray();
 
 
-		rcInit.m_textures[6].m_texture = m_ir->getIntegrationLut();
-		rcInit.m_textures[6].m_sampler = m_ir->getIntegrationLutSampler();
+		rcInit.m_textures[7].m_texture = m_ir->getIntegrationLut();
+		rcInit.m_textures[7].m_sampler = m_ir->getIntegrationLutSampler();
 	}
 	}
 
 
 	rcInit.m_uniformBuffers[0].m_buffer = m_uniforms;
 	rcInit.m_uniformBuffers[0].m_buffer = m_uniforms;

+ 4 - 4
testapp/Main.cpp

@@ -62,7 +62,7 @@ Error init()
 	MainRenderer& renderer = app->getMainRenderer();
 	MainRenderer& renderer = app->getMainRenderer();
 	ResourceManager& resources = app->getResourceManager();
 	ResourceManager& resources = app->getResourceManager();
 
 
-	scene.setAmbientColor(Vec4(1.0) * 0.05);
+	scene.setAmbientColor(Vec4(1.0) * 0.0);
 	renderer.getOffscreenRenderer().getPps().setFog(Vec3(1.0, 0.9, 0.9), 0.7);
 	renderer.getOffscreenRenderer().getPps().setFog(Vec3(1.0, 0.9, 0.9), 0.7);
 
 
 	if(getenv("PROFILE"))
 	if(getenv("PROFILE"))
@@ -85,8 +85,8 @@ Error init()
 #if !PLAYER
 #if !PLAYER
 	cam->getComponent<MoveComponent>().setLocalTransform(Transform(
 	cam->getComponent<MoveComponent>().setLocalTransform(Transform(
 		// Vec4(147.392776, -10.132728, 16.607138, 0.0),
 		// Vec4(147.392776, -10.132728, 16.607138, 0.0),
-		Vec4(102.984535, -11.532733, 16.394911, 0),
-		Mat3x4(Euler(toRad(0.0), toRad(-10.0), toRad(0.0))),
+		Vec4(98.994728, -10.601542, 16.376123, 0),
+		Mat3x4(Euler(toRad(0.0), toRad(-90.0), toRad(0.0))),
 		// Mat3x4::getIdentity(),
 		// Mat3x4::getIdentity(),
 		1.0));
 		1.0));
 #endif
 #endif
@@ -502,7 +502,7 @@ Error initSubsystems(int argc, char* argv[])
 	config.set("is.sm.poissonEnabled", true);
 	config.set("is.sm.poissonEnabled", true);
 	config.set("is.sm.resolution", 1024);
 	config.set("is.sm.resolution", 1024);
 	config.set("lf.maxFlares", 32);
 	config.set("lf.maxFlares", 32);
-	config.set("pps.enabled", false);
+	config.set("pps.enabled", true);
 	config.set("pps.bloom.enabled", true);
 	config.set("pps.bloom.enabled", true);
 	config.set("pps.bloom.renderingQuality", 0.5);
 	config.set("pps.bloom.renderingQuality", 0.5);
 	config.set("pps.bloom.blurringDist", 1.0);
 	config.set("pps.bloom.blurringDist", 1.0);