UE4.25:Global switch and override switch: VertexNormal,LowQualitySHLight,DisableIBL

 

 

 

commit diff:
 

diff --git a/Engine/Shaders/Private/MobileBasePassPixelShader.usf b/Engine/Shaders/Private/MobileBasePassPixelShader.usf
index a21272538bf..6707d775620 100644
--- a/Engine/Shaders/Private/MobileBasePassPixelShader.usf
+++ b/Engine/Shaders/Private/MobileBasePassPixelShader.usf
@@ -64,10 +64,22 @@ float4 SpotLightDirectionAndSpecularScale[MAX_DYNAMIC_POINT_LIGHTS];
 #define MOBILE_CSM_QUALITY 2
 #endif
 
+#ifndef MOBILE_MATERIAL_FORCE_USE_VERTEX_NORMAL
+#define MOBILE_MATERIAL_FORCE_USE_VERTEX_NORMAL 0
+#endif
+
+#ifndef MOBILE_MATERIAL_USE_LQ_SH_LIGHT
+#define MOBILE_MATERIAL_USE_LQ_SH_LIGHT 0
+#endif
+
+#ifndef MOBILE_QL_DISABLE_IMAGE_BASE_LIGHTING
+#define MOBILE_QL_DISABLE_IMAGE_BASE_LIGHTING 0
+#endif
+
 #define FULLY_ROUGH (MATERIAL_FULLY_ROUGH || MOBILE_QL_FORCE_FULLY_ROUGH)
 #define NONMETAL (MATERIAL_NONMETAL || MOBILE_QL_FORCE_NONMETAL)
 #define HQ_REFLECTIONS (MATERIAL_HQ_FORWARD_REFLECTIONS && !MOBILE_QL_FORCE_LQ_REFLECTIONS)
-#define FORCE_VERTEX_NORMAL (MOBILE_QL_DISABLE_MATERIAL_NORMAL)
+#define FORCE_VERTEX_NORMAL (MOBILE_QL_DISABLE_MATERIAL_NORMAL || MOBILE_MATERIAL_FORCE_USE_VERTEX_NORMAL)
 
 #define ALLOW_CUBE_REFLECTIONS 0
 
@@ -303,6 +315,10 @@ half MobileComputeMixingWeight(half IndirectIrradiance, half AverageBrightness,
 
 half3 GetImageBasedReflectionLighting(FMaterialPixelParameters MaterialParameters, half Roughness, half IndirectIrradiance)
 {
+#if MOBILE_QL_DISABLE_IMAGE_BASE_LIGHTING
+	return 0;
+#endif
+	
 #if HQ_REFLECTIONS
 	half3 SpecularIBL = BlendReflectionCaptures(MaterialParameters, Roughness, IndirectIrradiance);
 #else
@@ -504,7 +520,7 @@ void Main(
 	Color += LightmapColor.rgb * ShadingModelContext.DiffuseColor * View.IndirectLightingColorScale;
 	IndirectIrradiance = LightmapColor.a;
 #elif CACHED_POINT_INDIRECT_LIGHTING
-	#if MATERIALBLENDING_MASKED || MATERIALBLENDING_SOLID
+	#if (MATERIALBLENDING_MASKED || MATERIALBLENDING_SOLID) && !MOBILE_MATERIAL_USE_LQ_SH_LIGHT
 		// Take the normal into account for opaque
 		FThreeBandSHVectorRGB PointIndirectLighting;
 		PointIndirectLighting.R.V0 = IndirectLightingCache.IndirectLightingSHCoefficients0[0];
diff --git a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.cpp b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.cpp
index 816e40c2027..b4c23796f95 100644
--- a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.cpp
+++ b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.cpp
@@ -728,6 +728,7 @@ TSharedRef<class IDetailCustomization> FMaterialDetailCustomization::MakeInstanc
 	return MakeShareable( new FMaterialDetailCustomization );
 }
 
+
 void FMaterialDetailCustomization::CustomizeDetails( IDetailLayoutBuilder& DetailLayout )
 {
 	TArray<TWeakObjectPtr<UObject> > Objects;
@@ -784,6 +785,8 @@ void FMaterialDetailCustomization::CustomizeDetails( IDetailLayoutBuilder& Detai
 #endif
 		}
 	}
+	DetailLayout.HideProperty("MobileExtraQualityFeaturesSettings");
+	//CreateExtraQualityFeaturesSettingsWidgets(DetailLayout);
 
 	if( bUIMaterial )
 	{
@@ -818,6 +821,32 @@ void FMaterialDetailCustomization::CustomizeDetails( IDetailLayoutBuilder& Detai
 	}
 }
 
+/*
+void FMaterialDetailCustomization::CreateExtraQualityFeaturesSettingsWidgets(IDetailLayoutBuilder& DetailLayout)
+{
+	IDetailCategoryBuilder& DetailCategory = DetailLayout.EditCategory(TEXT("Mobile"));
+
+	static FName GroupName(TEXT("ExtraQualityFeaturesSettings"));
+	IDetailGroup& MobileExtraQualityFeaturesSettings = DetailCategory.AddGroup(GroupName, LOCTEXT("ExtraQualityFeaturesSettings", "Extra Mobile Quality Settings"), false, false);
+
+	TSharedRef<IPropertyHandle> MobileQualitySettingLow = DetailLayout.GetProperty("ExtraQualityFeaturesSettings[0]");
+	IDetailPropertyRow& MobileQualitySettingLowPropertyRow = MobileExtraQualityFeaturesSettings.AddPropertyRow(MobileQualitySettingLow);
+	static const FName Low("Low");
+	MobileQualitySettingLowPropertyRow.DisplayName(FText::FromName(Low));
+
+	TSharedRef<IPropertyHandle> MobileQualitySettingMedium = DetailLayout.GetProperty("ExtraQualityFeaturesSettings[2]");
+	IDetailPropertyRow& MobileQualitySettingMediumPropertyRow = MobileExtraQualityFeaturesSettings.AddPropertyRow(MobileQualitySettingMedium);
+	static const FName Medium("Medium");
+	MobileQualitySettingMediumPropertyRow.DisplayName(FText::FromName(Medium));
+
+	TSharedRef<IPropertyHandle> MobileQualitySettingHigh = DetailLayout.GetProperty("ExtraQualityFeaturesSettings[1]");
+	IDetailPropertyRow& MobileQualitySettingHighPropertyRow = MobileExtraQualityFeaturesSettings.AddPropertyRow(MobileQualitySettingHigh);
+	static const FName High("High");
+	MobileQualitySettingHighPropertyRow.DisplayName(FText::FromName(High));
+
+}
+*/
+
 TSharedRef<class IDetailCustomization> FMaterialExpressionLayersParameterDetails::MakeInstance(FOnCollectParameterGroups InCollectGroupsDelegate)
 {
 	return MakeShareable(new FMaterialExpressionLayersParameterDetails(InCollectGroupsDelegate));
diff --git a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.h b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.h
index 22835d5d7a3..583486feae3 100644
--- a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.h
+++ b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorDetailCustomization.h
@@ -130,4 +130,6 @@ public:
 
 	/** IDetailCustomization interface */
 	virtual void CustomizeDetails( IDetailLayoutBuilder& DetailLayout ) override;
+	//void CreateExtraQualityFeaturesSettingsWidgets(IDetailLayoutBuilder& DetailLayout);
+	
 };
diff --git a/Engine/Source/Runtime/Engine/Classes/Materials/Material.h b/Engine/Source/Runtime/Engine/Classes/Materials/Material.h
index 1ddd0652e04..b9c04d2749b 100644
--- a/Engine/Source/Runtime/Engine/Classes/Materials/Material.h
+++ b/Engine/Source/Runtime/Engine/Classes/Materials/Material.h
@@ -287,6 +287,29 @@ struct FParameterGroupData
 	}
 };
 
+USTRUCT()
+struct FExtraQualityFeatureSetting
+{
+	GENERATED_USTRUCT_BODY()
+
+    // vertex normal
+    UPROPERTY(EditAnywhere, Category = Material)
+	uint8 bForceVertexNormal : 1;
+	
+	// Spherical harmonic
+	UPROPERTY(EditAnywhere, Category = Material)
+	uint8 bUseLowQualitySHLight : 1;
+
+	UPROPERTY(EditAnywhere, Category = Material)
+	uint8 bDisableImageBaseLighting : 1;
+
+	FExtraQualityFeatureSetting()
+    : bForceVertexNormal(false)
+    , bUseLowQualitySHLight(false)
+    , bDisableImageBaseLighting(false)
+	{}
+};
+
 /**
  * A Material is an asset which can be applied to a mesh to control the visual look of the scene. 
  * When light from the scene hits the surface, the shading model of the material is used to calculate how that light interacts with the surface. 
@@ -811,6 +834,9 @@ public:
 	/** Controls where this parameter group is displayed in a material instance parameter list.  The lower the number the higher up in the parameter list. */
 	UPROPERTY(EditAnywhere, EditFixedSize, Category = "Group Sorting")
 	TArray<FParameterGroupData> ParameterGroupData;
+
+	UPROPERTY(EditAnywhere, Category = Mobile)
+	struct FExtraQualityFeatureSetting ExtraQualityFeaturesSettings[EMaterialQualityLevel::Num];
 #endif // WITH_EDITORONLY_DATA
 
 	/** true if this Material can be assumed Opaque when set to masked. */
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialShared.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialShared.cpp
index 146df740630..d5d1dc5c9c2 100644
--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialShared.cpp
+++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialShared.cpp
@@ -1226,6 +1226,24 @@ bool FMaterialResource::IsNonmetal() const
 			!(Material->MaterialAttributes.IsConnected(MP_Specular) || Material->MaterialAttributes.IsConnected(MP_Metallic));
 }
 
+
+bool FMaterialResource::GetForceVertexNormal() const
+{
+	return Material->ExtraQualityFeaturesSettings[GetQualityLevel()].bForceVertexNormal;
+}
+
+
+bool FMaterialResource::GetUseLowQualitySHLight() const
+{
+	return Material->ExtraQualityFeaturesSettings[GetQualityLevel()].bUseLowQualitySHLight;
+}
+
+bool FMaterialResource::GetDisableImageBaseLighting() const
+{
+	return Material->ExtraQualityFeaturesSettings[GetQualityLevel()].bDisableImageBaseLighting;
+}
+
+
 bool FMaterialResource::UseLmDirectionality() const
 {
 	return Material->bUseLightmapDirectionality;
@@ -1621,6 +1639,9 @@ void FMaterial::SetupMaterialEnvironment(
 	OutEnvironment.SetDefine(TEXT("MATERIAL_ALLOW_NEGATIVE_EMISSIVECOLOR"), AllowNegativeEmissiveColor());
 	OutEnvironment.SetDefine(TEXT("MATERIAL_OUTPUT_OPACITY_AS_ALPHA"), GetBlendableOutputAlpha());
 	OutEnvironment.SetDefine(TEXT("TRANSLUCENT_SHADOW_WITH_MASKED_OPACITY"), GetCastDynamicShadowAsMasked());
+	OutEnvironment.SetDefine(TEXT("MOBILE_MATERIAL_FORCE_USE_VERTEX_NORMAL"), GetForceVertexNormal());
+	OutEnvironment.SetDefine(TEXT("MOBILE_MATERIAL_USE_LQ_SH_LIGHT"), GetUseLowQualitySHLight());
+	OutEnvironment.SetDefine(TEXT("MOBILE_QL_DISABLE_IMAGE_BASE_LIGHTING"), GetDisableImageBaseLighting());
 
 	if (IsUsingFullPrecision())
 	{
diff --git a/Engine/Source/Runtime/Engine/Public/MaterialShared.h b/Engine/Source/Runtime/Engine/Public/MaterialShared.h
index 9e47fd9464d..b770dce2970 100644
--- a/Engine/Source/Runtime/Engine/Public/MaterialShared.h
+++ b/Engine/Source/Runtime/Engine/Public/MaterialShared.h
@@ -1616,6 +1616,10 @@ public:
 	virtual uint32 GetStencilCompare() const { return 0; }
 	virtual bool HasRuntimeVirtualTextureOutput() const { return false; }
 	virtual bool CastsRayTracedShadows() const { return true; }
+	ENGINE_API virtual bool GetForceVertexNormal() const { return false; }
+	ENGINE_API virtual bool GetUseLowQualitySHLight() const { return false; }
+	ENGINE_API virtual bool GetDisableImageBaseLighting() const { return false; }
+
 
 	/**
 	 * Should shaders compiled for this material be saved to disk?
@@ -2402,6 +2406,10 @@ public:
 	ENGINE_API virtual bool HasRuntimeVirtualTextureOutput() const override;
 	ENGINE_API virtual bool CastsRayTracedShadows() const override;
 	ENGINE_API  virtual UMaterialInterface* GetMaterialInterface() const override;
+
+	ENGINE_API virtual bool GetForceVertexNormal() const override;
+	ENGINE_API virtual bool GetUseLowQualitySHLight() const override;
+	ENGINE_API virtual bool GetDisableImageBaseLighting() const override;
 	/**
 	 * Should shaders compiled for this material be saved to disk?
 	 */
diff --git a/Engine/Source/Runtime/MaterialShaderQualitySettings/Classes/ShaderPlatformQualitySettings.h b/Engine/Source/Runtime/MaterialShaderQualitySettings/Classes/ShaderPlatformQualitySettings.h
index 08ff14de707..5cceb70bcc3 100644
--- a/Engine/Source/Runtime/MaterialShaderQualitySettings/Classes/ShaderPlatformQualitySettings.h
+++ b/Engine/Source/Runtime/MaterialShaderQualitySettings/Classes/ShaderPlatformQualitySettings.h
@@ -42,6 +42,9 @@ public:
 		, bForceDisablePreintegratedGF(false)
 		, bDisableMaterialNormalCalculation(false)
 		, MobileCSMQuality(EMobileCSMQuality::PCF_2x2)
+		, bForceLowQualitySHLight(false)
+		, bForceVertexNormal(false)
+		, bDisableImageBaseLighting(false)
 	{
 	}
 
@@ -72,6 +75,15 @@ public:
 	UPROPERTY(EditAnywhere, Config, Meta = (DisplayName = "Cascade shadow mapping quality"), Category = "Quality")
 	EMobileCSMQuality MobileCSMQuality;
 
+	UPROPERTY(EditAnywhere, Config, Meta = (DisplayName = "Force low quality sh light"), Category = "Quality")
+	bool bForceLowQualitySHLight;
+
+	UPROPERTY(EditAnywhere, Config, Meta = (DisplayName = "Force vertex normal "), Category = "Quality")
+	bool bForceVertexNormal;
+
+	UPROPERTY(EditAnywhere, Config, Meta = (DisplayName = "Force disable image base lighting"), Category = "Quality")
+	bool bDisableImageBaseLighting;
+
 	MATERIALSHADERQUALITYSETTINGS_API bool CanOverride(EShaderPlatform ShaderPlatform) const;
 	bool HasAnyOverridesSet() const;
 };
diff --git a/Engine/Source/Runtime/MaterialShaderQualitySettings/Private/MaterialShaderQualitySettings.cpp b/Engine/Source/Runtime/MaterialShaderQualitySettings/Private/MaterialShaderQualitySettings.cpp
index f2809840c4a..902ae6d7aeb 100644
--- a/Engine/Source/Runtime/MaterialShaderQualitySettings/Private/MaterialShaderQualitySettings.cpp
+++ b/Engine/Source/Runtime/MaterialShaderQualitySettings/Private/MaterialShaderQualitySettings.cpp
@@ -156,5 +156,8 @@ bool FMaterialQualityOverrides::HasAnyOverridesSet() const
 		|| bForceLQReflections != DefaultOverrides.bForceLQReflections
 		|| bForceDisablePreintegratedGF != DefaultOverrides.bForceDisablePreintegratedGF
 		|| bDisableMaterialNormalCalculation != DefaultOverrides.bDisableMaterialNormalCalculation
-		|| bDiscardQualityDuringCook != DefaultOverrides.bDiscardQualityDuringCook;
+		|| bDiscardQualityDuringCook != DefaultOverrides.bDiscardQualityDuringCook
+		|| bForceLowQualitySHLight != DefaultOverrides.bForceLowQualitySHLight
+		|| bForceVertexNormal != DefaultOverrides.bForceVertexNormal
+		|| bDisableImageBaseLighting != DefaultOverrides.bDisableImageBaseLighting;
 }
diff --git a/Engine/Source/Runtime/Renderer/Private/MobileBasePassRendering.cpp b/Engine/Source/Runtime/Renderer/Private/MobileBasePassRendering.cpp
index a99cfde344c..c9a88caee59 100644
--- a/Engine/Source/Runtime/Renderer/Private/MobileBasePassRendering.cpp
+++ b/Engine/Source/Runtime/Renderer/Private/MobileBasePassRendering.cpp
@@ -104,6 +104,9 @@ bool TMobileBasePassPSPolicyParamType<LightMapPolicyType>::ModifyCompilationEnvi
 	OutEnvironment.SetDefine(TEXT("MOBILE_QL_FORCE_DISABLE_PREINTEGRATEDGF"), QualityOverrides.bEnableOverride && QualityOverrides.bForceDisablePreintegratedGF != 0 ? 1u : 0u);
 	OutEnvironment.SetDefine(TEXT("MOBILE_CSM_QUALITY"), (uint32)QualityOverrides.MobileCSMQuality);
 	OutEnvironment.SetDefine(TEXT("MOBILE_QL_DISABLE_MATERIAL_NORMAL"), QualityOverrides.bEnableOverride && QualityOverrides.bDisableMaterialNormalCalculation);
+	OutEnvironment.SetDefine(TEXT("MOBILE_QL_FORCE_LQ_SH_LIGHT"), QualityOverrides.bEnableOverride && QualityOverrides.bForceLowQualitySHLight != 0 ? 1u : 0u);
+	OutEnvironment.SetDefine(TEXT("MOBILE_MATERIAL_FORCE_USE_VERTEX_NORMAL"), QualityOverrides.bEnableOverride && QualityOverrides.bForceVertexNormal != 0 ? 1u : 0u);
+	OutEnvironment.SetDefine(TEXT("MOBILE_QL_DISABLE_IMAGE_BASE_LIGHTING"), QualityOverrides.bEnableOverride && QualityOverrides.bDisableImageBaseLighting != 0 ? 1u : 0u);
 	return true;
 }
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值