Răsfoiți Sursa

Fixes and cleanup

Panagiotis Christopoulos Charitos 1 an în urmă
părinte
comite
2013987be3

+ 7 - 80
AnKi/Renderer/ProbeReflections.cpp

@@ -30,43 +30,10 @@ static StatCounter g_probeReflectionCountStatVar(StatCategory::kRenderer, "Refle
 
 Error ProbeReflections::init()
 {
-	const Error err = initInternal();
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize image reflections");
-	}
-
-	return err;
-}
-
-Error ProbeReflections::initInternal()
-{
-	// Init cache entries
-	ANKI_CHECK(initGBuffer());
-	ANKI_CHECK(initLightShading());
-	ANKI_CHECK(initIrradiance());
-	ANKI_CHECK(initIrradianceToRefl());
-	ANKI_CHECK(initShadowMapping());
-
-	// Load split sum integration LUT
 	ANKI_CHECK(ResourceManager::getSingleton().loadResource("EngineAssets/IblDfg.png", m_integrationLut));
 
-	SamplerInitInfo sinit;
-	sinit.m_minMagFilter = SamplingFilter::kLinear;
-	sinit.m_mipmapFilter = SamplingFilter::kNearest;
-	sinit.m_minLod = 0.0;
-	sinit.m_maxLod = 1.0;
-	sinit.m_addressing = SamplingAddressing::kClamp;
-	m_integrationLutSampler = GrManager::getSingleton().newSampler(sinit);
-
-	return Error::kNone;
-}
-
-Error ProbeReflections::initGBuffer()
-{
 	m_gbuffer.m_tileSize = g_reflectionProbeResolutionCVar;
 
-	// Create RT descriptions
 	{
 		RenderTargetDesc texinit = getRenderer().create2DRenderTargetDescription(m_gbuffer.m_tileSize, m_gbuffer.m_tileSize,
 																				 kGBufferColorRenderTargetFormats[0], "CubeRefl GBuffer");
@@ -89,59 +56,20 @@ Error ProbeReflections::initGBuffer()
 		m_gbuffer.m_depthRtDescr.bake();
 	}
 
-	return Error::kNone;
-}
-
-Error ProbeReflections::initLightShading()
-{
 	m_lightShading.m_tileSize = g_reflectionProbeResolutionCVar;
 	m_lightShading.m_mipCount = U8(computeMaxMipmapCount2d(m_lightShading.m_tileSize, m_lightShading.m_tileSize, 8));
 
-	// Init deferred
-	ANKI_CHECK(m_lightShading.m_deferred.init());
-
-	return Error::kNone;
-}
-
-Error ProbeReflections::initIrradiance()
-{
-	m_irradiance.m_workgroupSize = g_probeReflectionIrradianceResolutionCVar;
-
-	// Create prog
 	{
-		ANKI_CHECK(
-			loadShaderProgram("ShaderBinaries/IrradianceDice.ankiprogbin",
-							  {{"THREDGROUP_SIZE_SQRT", MutatorValue(m_irradiance.m_workgroupSize)}, {"STORE_LOCATION", 1}, {"SECOND_BOUNCE", 0}},
-							  m_irradiance.m_prog, m_irradiance.m_grProg));
-	}
+		const U32 resolution = g_probeReflectionShadowMapResolutionCVar;
+		ANKI_ASSERT(resolution > 8);
 
-	// Create buff
-	{
-		BufferInitInfo init;
-		init.m_usage = BufferUsageBit::kAllUav | BufferUsageBit::kAllSrv;
-		init.m_size = 6 * sizeof(Vec4);
-		m_irradiance.m_diceValuesBuff = GrManager::getSingleton().newBuffer(init);
+		// RT descr
+		m_shadowMapping.m_rtDescr =
+			getRenderer().create2DRenderTargetDescription(resolution, resolution, getRenderer().getDepthNoStencilFormat(), "CubeRefl SM");
+		m_shadowMapping.m_rtDescr.bake();
 	}
 
-	return Error::kNone;
-}
-
-Error ProbeReflections::initIrradianceToRefl()
-{
-	// Create program
-	ANKI_CHECK(loadShaderProgram("ShaderBinaries/ApplyIrradianceToReflection.ankiprogbin", m_irradianceToRefl.m_prog, m_irradianceToRefl.m_grProg));
-	return Error::kNone;
-}
-
-Error ProbeReflections::initShadowMapping()
-{
-	const U32 resolution = g_probeReflectionShadowMapResolutionCVar;
-	ANKI_ASSERT(resolution > 8);
-
-	// RT descr
-	m_shadowMapping.m_rtDescr =
-		getRenderer().create2DRenderTargetDescription(resolution, resolution, getRenderer().getDepthNoStencilFormat(), "CubeRefl SM");
-	m_shadowMapping.m_rtDescr.bake();
+	ANKI_CHECK(m_lightShading.m_deferred.init());
 
 	return Error::kNone;
 }
@@ -188,7 +116,6 @@ void ProbeReflections::populateRenderGraph(RenderingContext& rctx)
 	// Create render targets now to save memory
 	const RenderTargetHandle probeTexture = rgraph.importRenderTarget(&probeToRefresh->getReflectionTexture(), TextureUsageBit::kNone);
 	m_runCtx.m_probeTex = probeTexture;
-	const BufferHandle irradianceDiceValuesBuffHandle = rgraph.importBuffer(BufferView(m_irradiance.m_diceValuesBuff.get()), BufferUsageBit::kNone);
 	const RenderTargetHandle gbufferDepthRt = rgraph.newRenderTarget(m_gbuffer.m_depthRtDescr);
 	const RenderTargetHandle shadowMapRt = (doShadows) ? rgraph.newRenderTarget(m_shadowMapping.m_rtDescr) : RenderTargetHandle();
 

+ 0 - 29
AnKi/Renderer/ProbeReflections.h

@@ -40,11 +40,6 @@ public:
 		return m_integrationLut->getTexture();
 	}
 
-	SamplerPtr getIntegrationLutSampler() const
-	{
-		return m_integrationLutSampler;
-	}
-
 	RenderTargetHandle getCurrentlyRefreshedReflectionRt() const
 	{
 		ANKI_ASSERT(m_runCtx.m_probeTex.isValid());
@@ -73,22 +68,6 @@ private:
 		TraditionalDeferredLightShading m_deferred;
 	} m_lightShading; ///< Light shading.
 
-	class
-	{
-	public:
-		ShaderProgramResourcePtr m_prog;
-		ShaderProgramPtr m_grProg;
-		BufferPtr m_diceValuesBuff;
-		U32 m_workgroupSize = 16;
-	} m_irradiance; ///< Irradiance.
-
-	class
-	{
-	public:
-		ShaderProgramResourcePtr m_prog;
-		ShaderProgramPtr m_grProg;
-	} m_irradianceToRefl; ///< Apply irradiance back to the reflection.
-
 	class
 	{
 	public:
@@ -103,14 +82,6 @@ private:
 
 	// Other
 	ImageResourcePtr m_integrationLut;
-	SamplerPtr m_integrationLutSampler;
-
-	Error initInternal();
-	Error initGBuffer();
-	Error initLightShading();
-	Error initIrradiance();
-	Error initIrradianceToRefl();
-	Error initShadowMapping();
 };
 /// @}
 

+ 1 - 1
AnKi/Shaders/LightFunctions.hlsl

@@ -703,7 +703,7 @@ F32 pdfVndfIsotropic(Vec3 reflectedDir, Vec3 viewDir, F32 alpha, Vec3 normal)
 	const F32 sigmaStd = (zi * nrm) * 0.5f + 0.5f;
 	const F32 sigmaI = sigmaStd / nrm;
 	const F32 nrmN = (zm * zm) * (alphaSquare - 1.0f) + 1.0f;
-	return alphaSquare / (kPi * 4.0f * nrmN * nrmN * sigmaI);
+	return alphaSquare / (kPi * 4.0f * nrmN * nrmN * sigmaI + kEpsilonF32);
 }
 
 /// Calculate the reflection vector based on roughness. Sometimes the refl vector is bellow the normal so this func will try again to get a new one.