Просмотр исходного кода

Bugfix: Spot light shadow maps filtering now works correctly, ensuring shadows are not pixelated

BearishSun 8 лет назад
Родитель
Сommit
72f30322ca
2 измененных файлов с 13 добавлено и 11 удалено
  1. BIN
      Data/Engine/Shaders/ShadowProject.bsl.asset
  2. 13 11
      Source/RenderBeast/BsShadowRendering.cpp

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


+ 13 - 11
Source/RenderBeast/BsShadowRendering.cpp

@@ -1044,10 +1044,22 @@ namespace bs { namespace ct
 					depthOffset = 0.0f;
 				}
 
+				SPtr<Texture> shadowMap;
+				UINT32 shadowMapFace = 0;
+				if(!isCSM)
+					shadowMap = mDynamicShadowMaps[shadowInfo->textureIdx].getTexture();
+				else
+				{
+					shadowMap = mCascadedShadowMaps[shadowInfo->textureIdx].getTexture();
+					shadowMapFace = shadowInfo->cascadeIdx;
+				}
+
 				Matrix4 mixedToShadowUV = createMixedToShadowUVMatrix(viewP, viewInvVP, shadowInfo->normArea, 
 					depthScale, depthOffset, shadowInfo->shadowVPTransform);
 
-				Vector2 shadowMapSize((float)shadowInfo->area.width, (float)shadowInfo->area.height);
+				auto shadowMapProps = shadowMap->getProperties();
+
+				Vector2 shadowMapSize((float)shadowMapProps.getWidth(), (float)shadowMapProps.getHeight());
 				float transitionScale = getFadeTransition(*light, shadowInfo->subjectBounds.getRadius(), 
 					shadowInfo->depthRange, shadowInfo->area.width);
 
@@ -1101,16 +1113,6 @@ namespace bs { namespace ct
 					drawNearFarPlanes(near.z, far.z, shadowInfo->cascadeIdx != 0);
 				}
 
-				SPtr<Texture> shadowMap;
-				UINT32 shadowMapFace = 0;
-				if(!isCSM)
-					shadowMap = mDynamicShadowMaps[shadowInfo->textureIdx].getTexture();
-				else
-				{
-					shadowMap = mCascadedShadowMaps[shadowInfo->textureIdx].getTexture();
-					shadowMapFace = shadowInfo->cascadeIdx;
-				}
-
 				gShadowProjectParamsDef.gFace.set(shadowParamBuffer, (float)shadowMapFace);
 				ShadowProjectParams shadowParams(*light, shadowMap, shadowParamBuffer, perViewBuffer, gbuffer);