Răsfoiți Sursa

Feature: Added a separate rendering path for when tiled deferred is not available

BearishSun 8 ani în urmă
părinte
comite
43d2f892e1

BIN
Data/Engine/Shaders/DeferredIBLFinalize.bsl.asset


+ 1 - 1
Data/Raw/Engine/Shaders/DeferredIBLFinalize.bsl

@@ -94,7 +94,7 @@ technique DeferredIBLFinalize
 								
 				float2 envBRDF = gPreintegratedEnvBRDF.SampleLevel(gPreintegratedEnvBRDFSamp, float2(NoV, surfaceData.roughness), 0).rg;
 				
-				return float4(radiance * specularColor * envBRDF.x + envBRDF.y, 0.0f);
+				return float4(radiance * (specularColor * envBRDF.x + envBRDF.y), 0.0f);
 			}
 			else
 				return float4(0.0f, 0.0f, 0.0f, 0.0f);

+ 1 - 1
Source/RenderBeast/BsImageBasedLighting.cpp

@@ -257,7 +257,7 @@ namespace bs { namespace ct
 		gTiledImageBasedLightingParamDef.gFramebufferSize.set(mParamBuffer, framebufferSize);
 
 		mReflProbeParamBuffer.populate(sceneInfo.skybox, probeData.getNumProbes(), sceneInfo.reflProbeCubemapsTex, 
-			viewProps.renderingReflections);
+			viewProps.capturingReflections);
 
 		mParamBuffer->flushToGPU();
 		mReflProbeParamBuffer.buffer->flushToGPU();

+ 5 - 5
Source/RenderBeast/BsRenderBeast.cpp

@@ -67,10 +67,10 @@ namespace bs { namespace ct
 		const RenderAPI& rapi = RenderAPI::instance();
 		const RenderAPIInfo& rapiInfo = rapi.getAPIInfo();
 
-		if(
-			!rapiInfo.isFlagSet(RenderAPIFeatureFlag::Compute) ||
-			!rapiInfo.isFlagSet(RenderAPIFeatureFlag::LoadStore) ||
-			!rapiInfo.isFlagSet(RenderAPIFeatureFlag::TextureViews))
+		//if(
+		//	!rapiInfo.isFlagSet(RenderAPIFeatureFlag::Compute) ||
+		//	!rapiInfo.isFlagSet(RenderAPIFeatureFlag::LoadStore) ||
+		//	!rapiInfo.isFlagSet(RenderAPIFeatureFlag::TextureViews))
 		{
 			mFeatureSet = RenderBeastFeatureSet::DesktopMacOS;
 		}
@@ -589,7 +589,7 @@ namespace bs { namespace ct
 
 		viewDesc.triggerCallbacks = false;
 		viewDesc.runPostProcessing = false;
-		viewDesc.renderingReflections = true;
+		viewDesc.capturingReflections = true;
 		viewDesc.encodeDepth = settings.encodeDepth;
 		viewDesc.depthEncodeNear = settings.depthEncodeNear;
 		viewDesc.depthEncodeFar = settings.depthEncodeFar;

+ 8 - 6
Source/RenderBeast/BsRenderCompositor.cpp

@@ -618,7 +618,7 @@ namespace bs { namespace ct
 	{
 		SPtr<RenderTexture> outputRT;
 
-		bool tiledDeferredSupported = inputs.featureSet == RenderBeastFeatureSet::Desktop;
+		bool tiledDeferredSupported = inputs.featureSet != RenderBeastFeatureSet::DesktopMacOS;
 		if(tiledDeferredSupported)
 		{
 			RCNodeTiledDeferredLighting* tileDeferredNode = static_cast<RCNodeTiledDeferredLighting*>(inputs.inputNodes[2]);
@@ -662,7 +662,8 @@ namespace bs { namespace ct
 		// Render unshadowed lights
 		if(!tiledDeferredSupported)
 		{
-			rapi.setRenderTarget(outputRT, FBT_DEPTH | FBT_STENCIL, RT_COLOR0 | RT_DEPTH_STENCIL);
+			rapi.setRenderTarget(outputRT, FBT_DEPTH | FBT_STENCIL, RT_DEPTH_STENCIL);
+			rapi.clearRenderTarget(FBT_COLOR, Color::ZERO);
 
 			for (UINT32 i = 0; i < (UINT32)LightType::Count; i++)
 			{
@@ -757,7 +758,8 @@ namespace bs { namespace ct
 		deps.push_back(RCNodeGBuffer::getNodeId());
 		deps.push_back(RCNodeSceneDepth::getNodeId());
 
-		if(gRenderBeast()->getFeatureSet() == RenderBeastFeatureSet::DesktopMacOS)
+		bool tiledDeferredSupported = gRenderBeast()->getFeatureSet() != RenderBeastFeatureSet::DesktopMacOS;
+		if(!tiledDeferredSupported)
 		{
 			deps.push_back(RCNodeLightAccumulation::getNodeId());
 		}
@@ -814,7 +816,7 @@ namespace bs { namespace ct
 
 		ReflProbeParamBuffer reflProbeParams;
 		reflProbeParams.populate(inputs.scene.skybox, probeData.getNumProbes(), inputs.scene.reflProbeCubemapsTex,
-			viewProps.renderingReflections);
+			viewProps.capturingReflections);
 
 		// Prepare the texture for refl. probe and skybox rendering
 		{
@@ -852,7 +854,7 @@ namespace bs { namespace ct
 			}
 		}
 
-		if (viewProps.renderingReflections)
+		if (!viewProps.capturingReflections)
 		{
 			// Render refl. probes
 			UINT32 numProbes = probeData.getNumProbes();
@@ -1199,7 +1201,7 @@ namespace bs { namespace ct
 		// Prepare refl. probe param buffer
 		ReflProbeParamBuffer reflProbeParamBuffer;
 		reflProbeParamBuffer.populate(sceneInfo.skybox, visibleReflProbeData.getNumProbes(), sceneInfo.reflProbeCubemapsTex, 
-			viewProps.renderingReflections);
+			viewProps.capturingReflections);
 
 		SPtr<Texture> skyFilteredRadiance;
 		if(sceneInfo.skybox)

+ 1 - 1
Source/RenderBeast/BsRendererScene.cpp

@@ -554,7 +554,7 @@ namespace bs {	namespace ct
 
 		viewDesc.triggerCallbacks = true;
 		viewDesc.runPostProcessing = true;
-		viewDesc.renderingReflections = false;
+		viewDesc.capturingReflections = false;
 
 		viewDesc.cullFrustum = camera->getWorldFrustum();
 		viewDesc.visibleLayers = camera->getLayers();

+ 1 - 1
Source/RenderBeast/BsRendererView.cpp

@@ -581,7 +581,7 @@ namespace bs { namespace ct
 			const auto& viewProps = mViews[i]->getProperties();
 
 			// Don't recursively render reflection probes when generating reflection probe maps
-			if (viewProps.renderingReflections)
+			if (viewProps.capturingReflections)
 				continue;
 
 			mViews[i]->calculateVisibility(sceneInfo.reflProbeWorldBounds, mVisibility.reflProbes);

+ 1 - 1
Source/RenderBeast/BsRendererView.h

@@ -110,7 +110,7 @@ namespace bs { namespace ct
 		 * Determines if the view is currently rendering reflection probes. This ensures the systems can disable refl.
 		 * probe reads in order to prevent incorrect rendering (since probes won't yet have any data).
 		 */
-		bool renderingReflections : 1;
+		bool capturingReflections : 1;
 
 		/** 
 		 * When enabled the alpha channel of the final render target will be populated with an encoded depth value.