560 lines
33 KiB
Diff
560 lines
33 KiB
Diff
|
From acf2dcb4e8b794fd484a76814b644fd6b2f47155 Mon Sep 17 00:00:00 2001
|
||
|
From: Tom Hansson <tomha@TOM-TRX.amd.com>
|
||
|
Date: Wed, 11 Dec 2024 11:01:15 +0100
|
||
|
Subject: [PATCH] Port LitReactive shading model patch
|
||
|
|
||
|
---
|
||
|
.../SpriteEditor/SpriteDetailsCustomization.cpp | 2 +-
|
||
|
Engine/Shaders/Private/BasePassCommon.ush | 2 +-
|
||
|
Engine/Shaders/Private/BasePassPixelShader.usf | 2 +-
|
||
|
.../Private/ClusteredDeferredShadingPixelShader.usf | 1 +
|
||
|
Engine/Shaders/Private/DeferredShadingCommon.ush | 3 ++-
|
||
|
Engine/Shaders/Private/Definitions.usf | 4 +++-
|
||
|
.../Material/PathTracingMaterialSampling.ush | 4 ++++
|
||
|
.../PathTracing/PathTracingMaterialHitShader.usf | 8 ++++----
|
||
|
.../RayTracing/RayTracingMaterialHitShaders.usf | 7 +++++++
|
||
|
Engine/Shaders/Private/ShadingCommon.ush | 5 ++++-
|
||
|
Engine/Shaders/Private/ShadingModels.ush | 1 +
|
||
|
Engine/Shaders/Private/ShadingModelsMaterial.ush | 6 ++++++
|
||
|
Engine/Shaders/Private/ShadingModelsSampling.ush | 2 ++
|
||
|
.../Private/PixelInspectorDetailsCustomization.cpp | 1 +
|
||
|
.../PixelInspector/Private/PixelInspectorResult.cpp | 8 ++++++++
|
||
|
.../PixelInspector/Private/PixelInspectorResult.h | 1 +
|
||
|
.../UnrealEd/Private/Lightmass/LightmassRender.cpp | 3 ++-
|
||
|
.../Runtime/Engine/Classes/Engine/EngineTypes.h | 1 +
|
||
|
.../Private/Materials/HLSLMaterialTranslator.cpp | 5 +++++
|
||
|
.../Runtime/Engine/Private/Materials/Material.cpp | 9 +++++----
|
||
|
.../Materials/MaterialAttributeDefinitionMap.cpp | 1 +
|
||
|
.../Engine/Private/Materials/MaterialHLSLEmitter.cpp | 6 ++++++
|
||
|
.../Engine/Private/Materials/MaterialInterface.cpp | 2 +-
|
||
|
.../Engine/Private/Materials/MaterialShader.cpp | 3 ++-
|
||
|
.../Private/ShaderCompiler/ShaderGenerationUtil.cpp | 11 +++++++++++
|
||
|
.../Source/Runtime/RenderCore/Public/ShaderMaterial.h | 1 +
|
||
|
.../Runtime/Renderer/Private/AnisotropyRendering.cpp | 4 ++--
|
||
|
.../Runtime/Renderer/Private/PrimitiveSceneInfo.cpp | 2 +-
|
||
|
28 files changed, 85 insertions(+), 20 deletions(-)
|
||
|
|
||
|
diff --git a/Engine/Plugins/2D/Paper2D/Source/Paper2DEditor/Private/SpriteEditor/SpriteDetailsCustomization.cpp b/Engine/Plugins/2D/Paper2D/Source/Paper2DEditor/Private/SpriteEditor/SpriteDetailsCustomization.cpp
|
||
|
index fa91bb3a5..1a89c8bcc 100644
|
||
|
--- a/Engine/Plugins/2D/Paper2D/Source/Paper2DEditor/Private/SpriteEditor/SpriteDetailsCustomization.cpp
|
||
|
+++ b/Engine/Plugins/2D/Paper2D/Source/Paper2DEditor/Private/SpriteEditor/SpriteDetailsCustomization.cpp
|
||
|
@@ -503,7 +503,7 @@ FText FSpriteDetailsCustomization::GetRenderingHeaderContentText(TWeakObjectPtr<
|
||
|
{
|
||
|
MaterialType = LOCTEXT("Unlit", "Unlit");
|
||
|
}
|
||
|
- else if (ShadingModels.HasOnlyShadingModel(MSM_DefaultLit))
|
||
|
+ else if (ShadingModels.HasOnlyShadingModel(MSM_DefaultLit) || ShadingModels.HasOnlyShadingModel(MSM_LitReactive))
|
||
|
{
|
||
|
MaterialType = LOCTEXT("Lit", "Lit");
|
||
|
}
|
||
|
diff --git a/Engine/Shaders/Private/BasePassCommon.ush b/Engine/Shaders/Private/BasePassCommon.ush
|
||
|
index b18e2ee8e..89530e68e 100644
|
||
|
--- a/Engine/Shaders/Private/BasePassCommon.ush
|
||
|
+++ b/Engine/Shaders/Private/BasePassCommon.ush
|
||
|
@@ -41,7 +41,7 @@
|
||
|
#define USES_GBUFFER (FEATURE_LEVEL >= FEATURE_LEVEL_SM4 && (MATERIALBLENDING_SOLID || MATERIALBLENDING_MASKED) && !FORWARD_SHADING)
|
||
|
|
||
|
// Only some shader models actually need custom data.
|
||
|
-#define WRITES_CUSTOMDATA_TO_GBUFFER (USES_GBUFFER && (MATERIAL_SHADINGMODEL_SUBSURFACE || MATERIAL_SHADINGMODEL_PREINTEGRATED_SKIN || MATERIAL_SHADINGMODEL_SUBSURFACE_PROFILE || MATERIAL_SHADINGMODEL_CLEAR_COAT || MATERIAL_SHADINGMODEL_TWOSIDED_FOLIAGE || MATERIAL_SHADINGMODEL_HAIR || MATERIAL_SHADINGMODEL_CLOTH || MATERIAL_SHADINGMODEL_EYE))
|
||
|
+#define WRITES_CUSTOMDATA_TO_GBUFFER (USES_GBUFFER && (MATERIAL_SHADINGMODEL_SUBSURFACE || MATERIAL_SHADINGMODEL_PREINTEGRATED_SKIN || MATERIAL_SHADINGMODEL_SUBSURFACE_PROFILE || MATERIAL_SHADINGMODEL_CLEAR_COAT || MATERIAL_SHADINGMODEL_TWOSIDED_FOLIAGE || MATERIAL_SHADINGMODEL_HAIR || MATERIAL_SHADINGMODEL_CLOTH || MATERIAL_SHADINGMODEL_EYE || MATERIAL_SHADINGMODEL_LIT_REACTIVE))
|
||
|
|
||
|
// Based on GetPrecomputedShadowMasks()
|
||
|
// Note: WRITES_PRECSHADOWFACTOR_TO_GBUFFER is currently disabled because we use the precomputed shadow factor GBuffer outside of STATICLIGHTING_TEXTUREMASK to store UseSingleSampleShadowFromStationaryLights
|
||
|
diff --git a/Engine/Shaders/Private/BasePassPixelShader.usf b/Engine/Shaders/Private/BasePassPixelShader.usf
|
||
|
index f9fa4da66..9fca50028 100644
|
||
|
--- a/Engine/Shaders/Private/BasePassPixelShader.usf
|
||
|
+++ b/Engine/Shaders/Private/BasePassPixelShader.usf
|
||
|
@@ -1440,7 +1440,7 @@ void FPixelShaderInOut_MainPS(
|
||
|
|
||
|
// Volume lighting for lit translucency
|
||
|
#if (MATERIAL_SHADINGMODEL_DEFAULT_LIT || MATERIAL_SHADINGMODEL_SUBSURFACE) && (MATERIALBLENDING_TRANSLUCENT || MATERIALBLENDING_ADDITIVE) && !FORWARD_SHADING
|
||
|
- if (GBuffer.ShadingModelID == SHADINGMODELID_DEFAULT_LIT || GBuffer.ShadingModelID == SHADINGMODELID_SUBSURFACE)
|
||
|
+ if (GBuffer.ShadingModelID == SHADINGMODELID_DEFAULT_LIT || GBuffer.ShadingModelID == SHADINGMODELID_SUBSURFACE || GBuffer.ShadingModelID == SHADINGMODELID_LIT_REACTIVE)
|
||
|
{
|
||
|
Color += GetTranslucencyVolumeLighting(MaterialParameters, PixelMaterialInputs, BasePassInterpolants, GBuffer, IndirectIrradiance);
|
||
|
}
|
||
|
diff --git a/Engine/Shaders/Private/ClusteredDeferredShadingPixelShader.usf b/Engine/Shaders/Private/ClusteredDeferredShadingPixelShader.usf
|
||
|
index 560fa3ce4..05df262d3 100644
|
||
|
--- a/Engine/Shaders/Private/ClusteredDeferredShadingPixelShader.usf
|
||
|
+++ b/Engine/Shaders/Private/ClusteredDeferredShadingPixelShader.usf
|
||
|
@@ -533,6 +533,7 @@ void ClusteredShadingPixelShader(
|
||
|
GET_LIGHT_GRID_LOCAL_LIGHTING_SINGLE_SM(SHADINGMODELID_CLOTH, PixelShadingModelID, CompositedLighting, ScreenUV, CulledLightGridHeader, Dither, FirstNonSimpleLightIndex);
|
||
|
GET_LIGHT_GRID_LOCAL_LIGHTING_SINGLE_SM(SHADINGMODELID_EYE, PixelShadingModelID, CompositedLighting, ScreenUV, CulledLightGridHeader, Dither, FirstNonSimpleLightIndex);
|
||
|
GET_LIGHT_GRID_LOCAL_LIGHTING_SINGLE_SM(SHADINGMODELID_SINGLELAYERWATER, PixelShadingModelID, CompositedLighting, ScreenUV, CulledLightGridHeader, Dither, FirstNonSimpleLightIndex);
|
||
|
+ GET_LIGHT_GRID_LOCAL_LIGHTING_SINGLE_SM(SHADINGMODELID_LIT_REACTIVE, PixelShadingModelID, CompositedLighting, ScreenUV, CulledLightGridHeader, Dither, FirstNonSimpleLightIndex);
|
||
|
// SHADINGMODELID_THIN_TRANSLUCENT - skipping because it can not be opaque
|
||
|
#else // !USE_PASS_PER_SHADING_MODEL
|
||
|
CompositedLighting += GetLightGridLocalLighting(GetScreenSpaceData(ScreenUV), CulledLightGridHeader, TranslatedWorldPosition, CameraVector, ScreenUV, SceneDepth, 0, Dither, FirstNonSimpleLightIndex);
|
||
|
diff --git a/Engine/Shaders/Private/DeferredShadingCommon.ush b/Engine/Shaders/Private/DeferredShadingCommon.ush
|
||
|
index 2b4d31778..a9aa190d1 100644
|
||
|
--- a/Engine/Shaders/Private/DeferredShadingCommon.ush
|
||
|
+++ b/Engine/Shaders/Private/DeferredShadingCommon.ush
|
||
|
@@ -321,7 +321,8 @@ bool HasCustomGBufferData(int ShadingModelID)
|
||
|
|| ShadingModelID == SHADINGMODELID_TWOSIDED_FOLIAGE
|
||
|
|| ShadingModelID == SHADINGMODELID_HAIR
|
||
|
|| ShadingModelID == SHADINGMODELID_CLOTH
|
||
|
- || ShadingModelID == SHADINGMODELID_EYE;
|
||
|
+ || ShadingModelID == SHADINGMODELID_EYE
|
||
|
+ || ShadingModelID == SHADINGMODELID_LIT_REACTIVE;
|
||
|
}
|
||
|
|
||
|
bool HasAnisotropy(int SelectiveOutputMask)
|
||
|
diff --git a/Engine/Shaders/Private/Definitions.usf b/Engine/Shaders/Private/Definitions.usf
|
||
|
index 4d8f7a7c7..8a784a22d 100644
|
||
|
--- a/Engine/Shaders/Private/Definitions.usf
|
||
|
+++ b/Engine/Shaders/Private/Definitions.usf
|
||
|
@@ -291,4 +291,6 @@
|
||
|
#define SUBSTRATE_MATERIAL_EXPORT_FROM_OPAQUE (SUBSTRATE_MATERIAL_EXPORT_EXECUTED && (SUBSTRATE_MATERIAL_EXPORT_CONTEXT == SUBSTRATE_MATERIAL_EXPORT_CONTEXT_OPAQUE))
|
||
|
#define SUBSTRATE_MATERIAL_EXPORT_FROM_TRANSLUCENT (SUBSTRATE_MATERIAL_EXPORT_EXECUTED && (SUBSTRATE_MATERIAL_EXPORT_CONTEXT == SUBSTRATE_MATERIAL_EXPORT_CONTEXT_TRANSLUCENT))
|
||
|
|
||
|
-
|
||
|
+#ifndef MATERIAL_SHADINGMODEL_LIT_REACTIVE
|
||
|
+#define MATERIAL_SHADINGMODEL_LIT_REACTIVE 0
|
||
|
+#endif
|
||
|
diff --git a/Engine/Shaders/Private/PathTracing/Material/PathTracingMaterialSampling.ush b/Engine/Shaders/Private/PathTracing/Material/PathTracingMaterialSampling.ush
|
||
|
index 1c984b9b1..7446ce37b 100644
|
||
|
--- a/Engine/Shaders/Private/PathTracing/Material/PathTracingMaterialSampling.ush
|
||
|
+++ b/Engine/Shaders/Private/PathTracing/Material/PathTracingMaterialSampling.ush
|
||
|
@@ -90,6 +90,7 @@ float3 EstimateMaterialAlbedo(FPathTracingPayload Payload)
|
||
|
Albedo = Payload.DiffuseColor + Payload.SpecularColor + Payload.SubsurfaceColor;
|
||
|
break;
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
Albedo = Payload.DiffuseColor + Payload.SpecularColor;
|
||
|
break;
|
||
|
case SHADINGMODELID_CLEAR_COAT:
|
||
|
@@ -232,6 +233,7 @@ void AccumulateAlbedoNormal(inout FPathTracingPayload Payload, float3 PathThroug
|
||
|
Normal += BrdfWeight * NormThroughput * Payload.WorldNormal;
|
||
|
break;
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_CLEAR_COAT: // TODO: can we be more precise with clearcoat?
|
||
|
Albedo += BrdfWeight * PathThroughput * (Payload.DiffuseColor + RoughnessWeight * Payload.SpecularColor);
|
||
|
Normal += BrdfWeight * NormThroughput * Payload.WorldNormal;
|
||
|
@@ -598,6 +600,7 @@ FMaterialSample SampleMaterial(
|
||
|
return SubstrateClearCoat_SampleMaterial(V_World, Payload, RandSample);
|
||
|
#else
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_SUBSURFACE:
|
||
|
case SHADINGMODELID_PREINTEGRATED_SKIN:
|
||
|
return DefaultLit_SampleMaterial(V_World, Payload, RandSample);
|
||
|
@@ -656,6 +659,7 @@ FMaterialEval EvalMaterial(
|
||
|
return SubstrateClearCoat_EvalMaterial(V_World, L_World, Payload, DiffuseSpecularScale);
|
||
|
#else
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_SUBSURFACE:
|
||
|
case SHADINGMODELID_PREINTEGRATED_SKIN:
|
||
|
return DefaultLit_EvalMaterial(V_World, L_World, Payload, DiffuseSpecularScale);
|
||
|
diff --git a/Engine/Shaders/Private/PathTracing/PathTracingMaterialHitShader.usf b/Engine/Shaders/Private/PathTracing/PathTracingMaterialHitShader.usf
|
||
|
index d8359b9f4..3c4d4bdb5 100644
|
||
|
--- a/Engine/Shaders/Private/PathTracing/PathTracingMaterialHitShader.usf
|
||
|
+++ b/Engine/Shaders/Private/PathTracing/PathTracingMaterialHitShader.usf
|
||
|
@@ -1089,8 +1089,8 @@ RAY_TRACING_ENTRY_CLOSEST_HIT(PathTracingMaterialCHS,
|
||
|
else
|
||
|
#endif
|
||
|
|
||
|
-#if MATERIAL_SHADINGMODEL_DEFAULT_LIT
|
||
|
- if (Payload.ShadingModelID == SHADINGMODELID_DEFAULT_LIT)
|
||
|
+#if MATERIAL_SHADINGMODEL_DEFAULT_LIT || MATERIAL_SHADINGMODEL_LIT_REACTIVE
|
||
|
+ if (Payload.ShadingModelID == SHADINGMODELID_DEFAULT_LIT || Payload.ShadingModelID == SHADINGMODELID_LIT_REACTIVE)
|
||
|
{
|
||
|
// only allow refraction for default lit materials since we need space for the absorption amount
|
||
|
#if HAVE_GetAbsorptionMediumMaterialOutput0
|
||
|
@@ -1428,8 +1428,8 @@ RAY_TRACING_ENTRY_ANY_HIT(PathTracingMaterialAHS,
|
||
|
}
|
||
|
else
|
||
|
#endif // MATERIAL_SHADINGMODEL_THIN_TRANSLUCENT
|
||
|
-#if MATERIAL_SHADINGMODEL_DEFAULT_LIT && REFRACTION_USE_INDEX_OF_REFRACTION
|
||
|
- if (ShadingModelID == SHADINGMODELID_DEFAULT_LIT)
|
||
|
+#if (MATERIAL_SHADINGMODEL_DEFAULT_LIT || MATERIAL_SHADINGMODEL_LIT_REACTIVE) && REFRACTION_USE_INDEX_OF_REFRACTION
|
||
|
+ if (ShadingModelID == SHADINGMODELID_DEFAULT_LIT || ShadingModelID == MATERIAL_SHADINGMODEL_LIT_REACTIVE)
|
||
|
{
|
||
|
// Is refraction enabled?
|
||
|
float Ior = GetRefractionIor(PixelMaterialInputs);
|
||
|
diff --git a/Engine/Shaders/Private/RayTracing/RayTracingMaterialHitShaders.usf b/Engine/Shaders/Private/RayTracing/RayTracingMaterialHitShaders.usf
|
||
|
index f3a0d423d..6736d27e5 100644
|
||
|
--- a/Engine/Shaders/Private/RayTracing/RayTracingMaterialHitShaders.usf
|
||
|
+++ b/Engine/Shaders/Private/RayTracing/RayTracingMaterialHitShaders.usf
|
||
|
@@ -442,6 +442,13 @@ void GetMaterialPayload(
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
+#if MATERIAL_SHADINGMODEL_LIT_REACTIVE
|
||
|
+ if (Payload.ShadingModelID == SHADINGMODELID_LIT_REACTIVE)
|
||
|
+ {
|
||
|
+ Payload.CustomData.x = GetMaterialCustomData0(MaterialParameters);
|
||
|
+ }
|
||
|
+#endif
|
||
|
+
|
||
|
#if MATERIAL_USES_ANISOTROPY
|
||
|
Payload.WorldTangent = CalculateAnisotropyTangent(MaterialParameters, PixelMaterialInputs);
|
||
|
Payload.Anisotropy = GetMaterialAnisotropy(PixelMaterialInputs);
|
||
|
diff --git a/Engine/Shaders/Private/ShadingCommon.ush b/Engine/Shaders/Private/ShadingCommon.ush
|
||
|
index 6d886f3ad..218f17b19 100644
|
||
|
--- a/Engine/Shaders/Private/ShadingCommon.ush
|
||
|
+++ b/Engine/Shaders/Private/ShadingCommon.ush
|
||
|
@@ -30,7 +30,8 @@
|
||
|
#define SHADINGMODELID_SINGLELAYERWATER 10
|
||
|
#define SHADINGMODELID_THIN_TRANSLUCENT 11
|
||
|
#define SHADINGMODELID_SUBSTRATE 12 // Temporary while we convert everything to Substrate
|
||
|
-#define SHADINGMODELID_NUM 13
|
||
|
+#define SHADINGMODELID_LIT_REACTIVE 13
|
||
|
+#define SHADINGMODELID_NUM 14
|
||
|
#define SHADINGMODELID_MASK 0xF // 4 bits reserved for ShadingModelID
|
||
|
|
||
|
// The flags are defined so that 0 value has no effect!
|
||
|
@@ -62,6 +63,7 @@ float3 GetShadingModelColor(uint ShadingModelID)
|
||
|
else if (ShadingModelID == SHADINGMODELID_SINGLELAYERWATER) return float3(0.5f, 0.5f, 1.0f);
|
||
|
else if (ShadingModelID == SHADINGMODELID_THIN_TRANSLUCENT) return float3(1.0f, 0.8f, 0.3f);
|
||
|
else if (ShadingModelID == SHADINGMODELID_SUBSTRATE) return float3(1.0f, 1.0f, 0.0f);
|
||
|
+ else if (ShadingModelID == SHADINGMODELID_LIT_REACTIVE) return float3(1.0f, 0.8f, 0.5f);
|
||
|
else return float3(1.0f, 1.0f, 1.0f); // White
|
||
|
#else
|
||
|
switch(ShadingModelID)
|
||
|
@@ -79,6 +81,7 @@ float3 GetShadingModelColor(uint ShadingModelID)
|
||
|
case SHADINGMODELID_SINGLELAYERWATER: return float3(0.5f, 0.5f, 1.0f);
|
||
|
case SHADINGMODELID_THIN_TRANSLUCENT: return float3(1.0f, 0.8f, 0.3f);
|
||
|
case SHADINGMODELID_SUBSTRATE: return float3(1.0f, 1.0f, 0.0f);
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE: return float3(1.0f, 0.8f, 0.5f);
|
||
|
default: return float3(1.0f, 1.0f, 1.0f); // White
|
||
|
}
|
||
|
#endif
|
||
|
diff --git a/Engine/Shaders/Private/ShadingModels.ush b/Engine/Shaders/Private/ShadingModels.ush
|
||
|
index 97522f643..b83d7643b 100644
|
||
|
--- a/Engine/Shaders/Private/ShadingModels.ush
|
||
|
+++ b/Engine/Shaders/Private/ShadingModels.ush
|
||
|
@@ -975,6 +975,7 @@ FDirectLighting IntegrateBxDF( FGBufferData GBuffer, half3 N, half3 V, half3 L,
|
||
|
switch( GBuffer.ShadingModelID )
|
||
|
{
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_SINGLELAYERWATER:
|
||
|
case SHADINGMODELID_THIN_TRANSLUCENT:
|
||
|
return DefaultLitBxDF( GBuffer, N, V, L, Falloff, NoL, AreaLight, Shadow );
|
||
|
diff --git a/Engine/Shaders/Private/ShadingModelsMaterial.ush b/Engine/Shaders/Private/ShadingModelsMaterial.ush
|
||
|
index 61033ec51..0b21d60f3 100644
|
||
|
--- a/Engine/Shaders/Private/ShadingModelsMaterial.ush
|
||
|
+++ b/Engine/Shaders/Private/ShadingModelsMaterial.ush
|
||
|
@@ -38,6 +38,12 @@ void SetGBufferForShadingModel(
|
||
|
if (false)
|
||
|
{
|
||
|
}
|
||
|
+#if MATERIAL_SHADINGMODEL_LIT_REACTIVE
|
||
|
+ else if (ShadingModel == SHADINGMODELID_LIT_REACTIVE)
|
||
|
+ {
|
||
|
+ GBuffer.CustomData.x = GetMaterialCustomData0(MaterialParameters);
|
||
|
+ }
|
||
|
+#endif
|
||
|
#if MATERIAL_SHADINGMODEL_SUBSURFACE
|
||
|
else if (ShadingModel == SHADINGMODELID_SUBSURFACE)
|
||
|
{
|
||
|
diff --git a/Engine/Shaders/Private/ShadingModelsSampling.ush b/Engine/Shaders/Private/ShadingModelsSampling.ush
|
||
|
index f87383c14..89b2bb927 100644
|
||
|
--- a/Engine/Shaders/Private/ShadingModelsSampling.ush
|
||
|
+++ b/Engine/Shaders/Private/ShadingModelsSampling.ush
|
||
|
@@ -207,6 +207,7 @@ FBxDFSample SampleBxDF(const uint TermMask, FGBufferData GBuffer, float3 V, floa
|
||
|
switch( GBuffer.ShadingModelID )
|
||
|
{
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_SINGLELAYERWATER:
|
||
|
case SHADINGMODELID_SUBSURFACE:
|
||
|
case SHADINGMODELID_SUBSURFACE_PROFILE:
|
||
|
@@ -227,6 +228,7 @@ bool SupportsSampleBxDF(uint ShadingModelID)
|
||
|
switch (ShadingModelID)
|
||
|
{
|
||
|
case SHADINGMODELID_DEFAULT_LIT:
|
||
|
+ case SHADINGMODELID_LIT_REACTIVE:
|
||
|
case SHADINGMODELID_SINGLELAYERWATER:
|
||
|
case SHADINGMODELID_SUBSURFACE:
|
||
|
case SHADINGMODELID_SUBSURFACE_PROFILE:
|
||
|
diff --git a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorDetailsCustomization.cpp b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorDetailsCustomization.cpp
|
||
|
index 54da16305..d9cfc54de 100644
|
||
|
--- a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorDetailsCustomization.cpp
|
||
|
+++ b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorDetailsCustomization.cpp
|
||
|
@@ -164,6 +164,7 @@ void FPixelInspectorDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder&
|
||
|
case MSM_SingleLayerWater:
|
||
|
case MSM_ThinTranslucent:
|
||
|
case MSM_Unlit:
|
||
|
+ case MSM_LitReactive:
|
||
|
{
|
||
|
DetailBuilder.HideProperty(SubSurfaceColorProp);
|
||
|
DetailBuilder.HideProperty(SubSurfaceProfileProp);
|
||
|
diff --git a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.cpp b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.cpp
|
||
|
index aa59d9e0e..3774e82ca 100644
|
||
|
--- a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.cpp
|
||
|
+++ b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.cpp
|
||
|
@@ -267,6 +267,8 @@ namespace PixelInspector
|
||
|
return EMaterialShadingModel::MSM_ThinTranslucent;
|
||
|
case PIXEL_INSPECTOR_SHADINGMODELID_SUBSTRATE:
|
||
|
return EMaterialShadingModel::MSM_Strata;
|
||
|
+ case PIXEL_INSPECTOR_SHADINGMODELID_LIT_REACTIVE:
|
||
|
+ return EMaterialShadingModel::MSM_LitReactive;
|
||
|
};
|
||
|
return EMaterialShadingModel::MSM_DefaultLit;
|
||
|
}
|
||
|
@@ -361,6 +363,12 @@ namespace PixelInspector
|
||
|
IrisDistance = InCustomData.W;
|
||
|
}
|
||
|
break;
|
||
|
+ case EMaterialShadingModel::MSM_LitReactive:
|
||
|
+ {
|
||
|
+ SubSurfaceColor = FVector3f(0.0f);
|
||
|
+ Opacity = InCustomData.X;
|
||
|
+ }
|
||
|
+ break;
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
diff --git a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.h b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.h
|
||
|
index 1ab7f6bf2..b1bc058d1 100644
|
||
|
--- a/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.h
|
||
|
+++ b/Engine/Source/Editor/PixelInspector/Private/PixelInspectorResult.h
|
||
|
@@ -25,6 +25,7 @@ class FFloat16Color;
|
||
|
#define PIXEL_INSPECTOR_SHADINGMODELID_SINGLELAYERWATER 10
|
||
|
#define PIXEL_INSPECTOR_SHADINGMODELID_THIN_TRANSLUCENT 11
|
||
|
#define PIXEL_INSPECTOR_SHADINGMODELID_SUBSTRATE 12
|
||
|
+#define PIXEL_INSPECTOR_SHADINGMODELID_LIT_REACTIVE 13
|
||
|
#define PIXEL_INSPECTOR_SHADINGMODELID_MASK 0xF
|
||
|
|
||
|
namespace PixelInspector
|
||
|
diff --git a/Engine/Source/Editor/UnrealEd/Private/Lightmass/LightmassRender.cpp b/Engine/Source/Editor/UnrealEd/Private/Lightmass/LightmassRender.cpp
|
||
|
index 5b9ef8100..469923d24 100644
|
||
|
--- a/Engine/Source/Editor/UnrealEd/Private/Lightmass/LightmassRender.cpp
|
||
|
+++ b/Engine/Source/Editor/UnrealEd/Private/Lightmass/LightmassRender.cpp
|
||
|
@@ -1149,7 +1149,8 @@ bool FLightmassMaterialRenderer::GenerateMaterialData(
|
||
|
!ShadingModels.HasShadingModel(MSM_Unlit) &&
|
||
|
!ShadingModels.HasShadingModel(MSM_Subsurface) &&
|
||
|
!ShadingModels.HasShadingModel(MSM_PreintegratedSkin) &&
|
||
|
- !ShadingModels.HasShadingModel(MSM_SubsurfaceProfile))
|
||
|
+ !ShadingModels.HasShadingModel(MSM_SubsurfaceProfile) &&
|
||
|
+ !ShadingModels.HasShadingModel(MSM_LitReactive))
|
||
|
{
|
||
|
UE_LOG(LogLightmassRender, Warning, TEXT("LIGHTMASS: Material has an unsupported shading model: %d on %s"),
|
||
|
(int32)ShadingModels.GetShadingModelField(),
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Classes/Engine/EngineTypes.h b/Engine/Source/Runtime/Engine/Classes/Engine/EngineTypes.h
|
||
|
index 900587d06..db37d77a0 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Classes/Engine/EngineTypes.h
|
||
|
+++ b/Engine/Source/Runtime/Engine/Classes/Engine/EngineTypes.h
|
||
|
@@ -664,6 +664,7 @@ enum EMaterialShadingModel : int
|
||
|
MSM_SingleLayerWater UMETA(DisplayName="SingleLayerWater"),
|
||
|
MSM_ThinTranslucent UMETA(DisplayName="Thin Translucent"),
|
||
|
MSM_Strata UMETA(DisplayName="Substrate", Hidden),
|
||
|
+ MSM_LitReactive UMETA(DisplayName = "Lit Reactive"),
|
||
|
/** Number of unique shading models. */
|
||
|
MSM_NUM UMETA(Hidden),
|
||
|
/** Shading model will be determined by the Material Expression Graph,
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp b/Engine/Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp
|
||
|
index d1aa3ee53..c3a6a7b60 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp
|
||
|
@@ -2761,6 +2761,11 @@ void FHLSLMaterialTranslator::GetMaterialEnvironment(EShaderPlatform InPlatform,
|
||
|
OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_DEFAULT_LIT"), TEXT("1"));
|
||
|
}
|
||
|
|
||
|
+ if (EnvironmentDefines->HasShadingModel(MSM_LitReactive))
|
||
|
+ {
|
||
|
+ OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_LIT_REACTIVE"), TEXT("1"));
|
||
|
+ }
|
||
|
+
|
||
|
if (EnvironmentDefines->HasShadingModel(MSM_Subsurface))
|
||
|
{
|
||
|
OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_SUBSURFACE"), TEXT("1"));
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/Material.cpp b/Engine/Source/Runtime/Engine/Private/Materials/Material.cpp
|
||
|
index 99a1d7020..caff3a391 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/Material.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/Material.cpp
|
||
|
@@ -246,7 +246,7 @@ int32 FMaterialResource::CompilePropertyAndSetMaterialProperty(EMaterialProperty
|
||
|
case MP_OpacityMask:
|
||
|
// Force basic opaque surfaces to skip masked/translucent-only attributes.
|
||
|
// Some features can force the material to create a masked variant which unintentionally runs this dormant code
|
||
|
- if (GetMaterialDomain() != MD_Surface || !IsOpaqueBlendMode(GetBlendMode()) || (GetShadingModels().IsLit() && !GetShadingModels().HasOnlyShadingModel(MSM_DefaultLit)))
|
||
|
+ if (GetMaterialDomain() != MD_Surface || !IsOpaqueBlendMode(GetBlendMode()) || (GetShadingModels().IsLit() && !GetShadingModels().HasOnlyShadingModel(MSM_DefaultLit) && !GetShadingModels().HasOnlyShadingModel(MSM_LitReactive)))
|
||
|
{
|
||
|
Ret = MaterialInterface->CompileProperty(Compiler, Property);
|
||
|
}
|
||
|
@@ -3275,6 +3275,7 @@ static void AddSurfaceSubstrateShadingModelFromMaterialShadingModels(FSubstrateM
|
||
|
if (InShadingModels.HasShadingModel(MSM_Eye)) { OutInfo.AddShadingModel(ESubstrateShadingModel::SSM_Eye); }
|
||
|
if (InShadingModels.HasShadingModel(MSM_SingleLayerWater)) { OutInfo.AddShadingModel(ESubstrateShadingModel::SSM_SingleLayerWater); }
|
||
|
if (InShadingModels.HasShadingModel(MSM_ThinTranslucent)) { OutInfo.AddShadingModel(ESubstrateShadingModel::SSM_ThinTranslucent); }
|
||
|
+ if (InShadingModels.HasShadingModel(MSM_LitReactive)) { OutInfo.AddShadingModel(ESubstrateShadingModel::SSM_DefaultLit); }
|
||
|
}
|
||
|
|
||
|
static void AddSurfaceSubstrateShadingModelFromMaterialShadingModel(FSubstrateMaterialInfo& OutInfo, const EMaterialShadingModel& InShadingModel)
|
||
|
@@ -7469,7 +7470,7 @@ static bool IsPropertyActive_Internal(EMaterialProperty InProperty,
|
||
|
Active = ShadingModels.IsLit() && (!bIsTranslucentBlendMode || !bIsVolumetricTranslucencyLightingMode);
|
||
|
break;
|
||
|
case MP_Anisotropy:
|
||
|
- Active = ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat }) && (!bIsTranslucentBlendMode || !bIsVolumetricTranslucencyLightingMode);
|
||
|
+ Active = ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive }) && (!bIsTranslucentBlendMode || !bIsVolumetricTranslucencyLightingMode);
|
||
|
break;
|
||
|
case MP_Metallic:
|
||
|
// Subsurface models store opacity in place of Metallic in the GBuffer
|
||
|
@@ -7479,13 +7480,13 @@ static bool IsPropertyActive_Internal(EMaterialProperty InProperty,
|
||
|
Active = (ShadingModels.IsLit() && (!bIsTranslucentBlendMode || !bIsNonDirectionalTranslucencyLightingMode)) || bUsesDistortion;
|
||
|
break;
|
||
|
case MP_Tangent:
|
||
|
- Active = ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat }) && (!bIsTranslucentBlendMode || !bIsVolumetricTranslucencyLightingMode);
|
||
|
+ Active = ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive }) && (!bIsTranslucentBlendMode || !bIsVolumetricTranslucencyLightingMode);
|
||
|
break;
|
||
|
case MP_SubsurfaceColor:
|
||
|
Active = ShadingModels.HasAnyShadingModel({ MSM_Subsurface, MSM_PreintegratedSkin, MSM_TwoSidedFoliage, MSM_Cloth });
|
||
|
break;
|
||
|
case MP_CustomData0:
|
||
|
- Active = ShadingModels.HasAnyShadingModel({ MSM_ClearCoat, MSM_Hair, MSM_Cloth, MSM_Eye, MSM_SubsurfaceProfile });
|
||
|
+ Active = ShadingModels.HasAnyShadingModel({ MSM_ClearCoat, MSM_Hair, MSM_Cloth, MSM_Eye, MSM_SubsurfaceProfile, MSM_LitReactive });
|
||
|
break;
|
||
|
case MP_CustomData1:
|
||
|
Active = ShadingModels.HasAnyShadingModel({ MSM_ClearCoat, MSM_Eye });
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialAttributeDefinitionMap.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialAttributeDefinitionMap.cpp
|
||
|
index f79500ad1..08b049d00 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialAttributeDefinitionMap.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialAttributeDefinitionMap.cpp
|
||
|
@@ -414,6 +414,7 @@ FText FMaterialAttributeDefinitionMap::GetAttributeOverrideForMaterial(const FGu
|
||
|
CustomPinNames.Add({ MSM_Cloth, LOCTEXT("Cloth", "Cloth").ToString() });
|
||
|
CustomPinNames.Add({ MSM_Eye, LOCTEXT("IrisMask", "Iris Mask").ToString() });
|
||
|
CustomPinNames.Add({ MSM_SubsurfaceProfile, LOCTEXT("Curvature", "Curvature").ToString() });
|
||
|
+ CustomPinNames.Add({ MSM_LitReactive, LOCTEXT("Reactivity", "Reactivity").ToString() });
|
||
|
return FText::FromString(GetPinNameFromShadingModelField(Material->GetShadingModels(), CustomPinNames, LOCTEXT("CustomData0", "Custom Data 0").ToString()));
|
||
|
case MP_CustomData1:
|
||
|
CustomPinNames.Add({ MSM_ClearCoat, LOCTEXT("ClearCoatRoughness", "Clear Coat Roughness").ToString() });
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialHLSLEmitter.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialHLSLEmitter.cpp
|
||
|
index a423860d1..75406aff1 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialHLSLEmitter.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialHLSLEmitter.cpp
|
||
|
@@ -609,6 +609,12 @@ static void GetMaterialEnvironment(EShaderPlatform InPlatform,
|
||
|
bMaterialRequestsDualSourceBlending = true;
|
||
|
}
|
||
|
|
||
|
+ if (ShadingModels.HasShadingModel(MSM_LitReactive))
|
||
|
+ {
|
||
|
+ OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_LIT_REACTIVE"), TEXT("1"));
|
||
|
+ NumSetMaterials++;
|
||
|
+ }
|
||
|
+
|
||
|
if (ShadingModels.HasShadingModel(MSM_SingleLayerWater) && FDataDrivenShaderPlatformInfo::GetRequiresDisableForwardLocalLights(InPlatform))
|
||
|
{
|
||
|
OutEnvironment.SetDefine(TEXT("DISABLE_FORWARD_LOCAL_LIGHTS"), TEXT("1"));
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialInterface.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialInterface.cpp
|
||
|
index 7b436279f..6b0fddaff 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialInterface.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialInterface.cpp
|
||
|
@@ -458,7 +458,7 @@ FMaterialRelevance UMaterialInterface::GetRelevance_Internal(const UMaterial* Ma
|
||
|
|
||
|
// Note that even though XX_GameThread() api is called, this function can be called on non game thread via
|
||
|
// GetRelevance_Concurrent()
|
||
|
- bool bUsesAnisotropy = MaterialResource->GetShadingModels().HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat }) &&
|
||
|
+ bool bUsesAnisotropy = MaterialResource->GetShadingModels().HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive }) &&
|
||
|
MaterialResource->MaterialUsesAnisotropy_GameThread();
|
||
|
|
||
|
const EBlendMode BlendMode = (EBlendMode)GetBlendMode();
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialShader.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialShader.cpp
|
||
|
index 4752050fd..e979fdb09 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialShader.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialShader.cpp
|
||
|
@@ -135,6 +135,7 @@ FString GetShadingModelString(EMaterialShadingModel ShadingModel)
|
||
|
case MSM_Eye: ShadingModelName = TEXT("MSM_Eye"); break;
|
||
|
case MSM_SingleLayerWater: ShadingModelName = TEXT("MSM_SingleLayerWater"); break;
|
||
|
case MSM_ThinTranslucent: ShadingModelName = TEXT("MSM_ThinTranslucent"); break;
|
||
|
+ case MSM_LitReactive: ShadingModelName = TEXT("MSM_LitReactive"); break;
|
||
|
default: ShadingModelName = TEXT("Unknown"); break;
|
||
|
}
|
||
|
return ShadingModelName;
|
||
|
@@ -553,7 +554,7 @@ void UpdateMaterialShaderCompilingStats(const FMaterial* Material)
|
||
|
{
|
||
|
INC_DWORD_STAT_BY(STAT_ShaderCompiling_NumUnlitMaterialShaders, 1);
|
||
|
}
|
||
|
- else if (ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_Subsurface, MSM_PreintegratedSkin, MSM_ClearCoat, MSM_Cloth, MSM_SubsurfaceProfile, MSM_TwoSidedFoliage, MSM_SingleLayerWater, MSM_ThinTranslucent }))
|
||
|
+ else if (ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_Subsurface, MSM_PreintegratedSkin, MSM_ClearCoat, MSM_Cloth, MSM_SubsurfaceProfile, MSM_TwoSidedFoliage, MSM_SingleLayerWater, MSM_ThinTranslucent, MSM_LitReactive }))
|
||
|
{
|
||
|
INC_DWORD_STAT_BY(STAT_ShaderCompiling_NumLitMaterialShaders, 1);
|
||
|
}
|
||
|
diff --git a/Engine/Source/Runtime/Engine/Private/ShaderCompiler/ShaderGenerationUtil.cpp b/Engine/Source/Runtime/Engine/Private/ShaderCompiler/ShaderGenerationUtil.cpp
|
||
|
index d39d3c304..f97839629 100644
|
||
|
--- a/Engine/Source/Runtime/Engine/Private/ShaderCompiler/ShaderGenerationUtil.cpp
|
||
|
+++ b/Engine/Source/Runtime/Engine/Private/ShaderCompiler/ShaderGenerationUtil.cpp
|
||
|
@@ -132,6 +132,7 @@ void ApplyFetchEnvironmentInternal(FShaderMaterialPropertyDefines& SrcDefines, c
|
||
|
FETCH_COMPILE_BOOL(MATERIAL_SHADINGMODEL_EYE);
|
||
|
FETCH_COMPILE_BOOL(MATERIAL_SHADINGMODEL_SINGLELAYERWATER);
|
||
|
FETCH_COMPILE_BOOL(MATERIAL_SHADINGMODEL_THIN_TRANSLUCENT);
|
||
|
+ FETCH_COMPILE_BOOL(MATERIAL_SHADINGMODEL_LIT_REACTIVE);
|
||
|
|
||
|
FETCH_COMPILE_BOOL(SINGLE_LAYER_WATER_SEPARATED_MAIN_LIGHT);
|
||
|
|
||
|
@@ -1641,6 +1642,10 @@ static void SetSlotsForShadingModelType(bool Slots[], EMaterialShadingModel Shad
|
||
|
case MSM_DefaultLit:
|
||
|
SetSharedGBufferSlots(Slots);
|
||
|
break;
|
||
|
+ case MSM_LitReactive:
|
||
|
+ SetSharedGBufferSlots(Slots);
|
||
|
+ Slots[GBS_CustomData] = true;
|
||
|
+ break;
|
||
|
case MSM_Subsurface:
|
||
|
SetSharedGBufferSlots(Slots);
|
||
|
if (bMergeCustom)
|
||
|
@@ -1832,6 +1837,12 @@ static void DetermineUsedMaterialSlots(
|
||
|
SetStandardGBufferSlots(Slots, bWriteEmissive, bHasTangent, bHasVelocity, bWritesVelocity, bHasStaticLighting, bIsSubstrateMaterial);
|
||
|
}
|
||
|
|
||
|
+ if (Mat.MATERIAL_SHADINGMODEL_LIT_REACTIVE)
|
||
|
+ {
|
||
|
+ SetStandardGBufferSlots(Slots, bWriteEmissive, bHasTangent, bHasVelocity, bWritesVelocity, bHasStaticLighting, bIsSubstrateMaterial);
|
||
|
+ Slots[GBS_CustomData] = GetGBufferSlotUsage(bUseCustomData);
|
||
|
+ }
|
||
|
+
|
||
|
if (Mat.MATERIAL_SHADINGMODEL_SUBSURFACE)
|
||
|
{
|
||
|
SetStandardGBufferSlots(Slots, bWriteEmissive, bHasTangent, bHasVelocity, bWritesVelocity, bHasStaticLighting, bIsSubstrateMaterial);
|
||
|
diff --git a/Engine/Source/Runtime/RenderCore/Public/ShaderMaterial.h b/Engine/Source/Runtime/RenderCore/Public/ShaderMaterial.h
|
||
|
index a0fff3da8..4e272aab8 100644
|
||
|
--- a/Engine/Source/Runtime/RenderCore/Public/ShaderMaterial.h
|
||
|
+++ b/Engine/Source/Runtime/RenderCore/Public/ShaderMaterial.h
|
||
|
@@ -107,6 +107,7 @@ struct FShaderMaterialPropertyDefines
|
||
|
uint8 MATERIAL_SHADINGMODEL_SINGLELAYERWATER : 1;
|
||
|
uint8 SINGLE_LAYER_WATER_SEPARATED_MAIN_LIGHT : 1;
|
||
|
uint8 MATERIAL_SHADINGMODEL_THIN_TRANSLUCENT : 1;
|
||
|
+ uint8 MATERIAL_SHADINGMODEL_LIT_REACTIVE : 1;
|
||
|
|
||
|
uint8 TRANSLUCENCY_LIGHTING_VOLUMETRIC_NONDIRECTIONAL : 1;
|
||
|
uint8 TRANSLUCENCY_LIGHTING_VOLUMETRIC_DIRECTIONAL : 1;
|
||
|
diff --git a/Engine/Source/Runtime/Renderer/Private/AnisotropyRendering.cpp b/Engine/Source/Runtime/Renderer/Private/AnisotropyRendering.cpp
|
||
|
index 0e5a41861..1cd7c0356 100644
|
||
|
--- a/Engine/Source/Runtime/Renderer/Private/AnisotropyRendering.cpp
|
||
|
+++ b/Engine/Source/Runtime/Renderer/Private/AnisotropyRendering.cpp
|
||
|
@@ -33,7 +33,7 @@ static bool IsAnisotropyPassCompatible(const EShaderPlatform Platform, FMaterial
|
||
|
!Substrate::IsSubstrateEnabled() && // Substrate renders anisotropy surface natively, without extra pass.
|
||
|
MaterialParameters.bHasAnisotropyConnected &&
|
||
|
!IsTranslucentBlendMode(MaterialParameters) &&
|
||
|
- MaterialParameters.ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat });
|
||
|
+ MaterialParameters.ShadingModels.HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive });
|
||
|
}
|
||
|
|
||
|
class FAnisotropyVS : public FMeshMaterialShader
|
||
|
@@ -138,7 +138,7 @@ bool GetAnisotropyPassShaders(
|
||
|
static bool ShouldDraw(const FMaterial& Material, bool bMaterialUsesAnisotropy)
|
||
|
{
|
||
|
const bool bIsNotTranslucent = IsOpaqueOrMaskedBlendMode(Material);
|
||
|
- return (bMaterialUsesAnisotropy && bIsNotTranslucent && Material.GetShadingModels().HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat }));
|
||
|
+ return (bMaterialUsesAnisotropy && bIsNotTranslucent && Material.GetShadingModels().HasAnyShadingModel({ MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive }));
|
||
|
}
|
||
|
|
||
|
void FAnisotropyMeshProcessor::AddMeshBatch(
|
||
|
diff --git a/Engine/Source/Runtime/Renderer/Private/PrimitiveSceneInfo.cpp b/Engine/Source/Runtime/Renderer/Private/PrimitiveSceneInfo.cpp
|
||
|
index b4401c309..f1b965253 100644
|
||
|
--- a/Engine/Source/Runtime/Renderer/Private/PrimitiveSceneInfo.cpp
|
||
|
+++ b/Engine/Source/Runtime/Renderer/Private/PrimitiveSceneInfo.cpp
|
||
|
@@ -131,7 +131,7 @@ public:
|
||
|
const FMaterial& Material = Mesh.MaterialRenderProxy->GetIncompleteMaterialWithFallback(FeatureLevel);
|
||
|
bool bUseSkyMaterial = Material.IsSky();
|
||
|
bool bUseSingleLayerWaterMaterial = Material.GetShadingModels().HasShadingModel(MSM_SingleLayerWater);
|
||
|
- bool bUseAnisotropy = Material.GetShadingModels().HasAnyShadingModel({MSM_DefaultLit, MSM_ClearCoat}) && Material.MaterialUsesAnisotropy_RenderThread();
|
||
|
+ bool bUseAnisotropy = Material.GetShadingModels().HasAnyShadingModel({MSM_DefaultLit, MSM_ClearCoat, MSM_LitReactive }) && Material.MaterialUsesAnisotropy_RenderThread();
|
||
|
bool bSupportsNaniteRendering = SupportsNaniteRendering(StaticMesh->VertexFactory, PrimitiveSceneProxy, Mesh.MaterialRenderProxy, FeatureLevel);
|
||
|
bool bSupportsGPUScene = StaticMesh->VertexFactory->SupportsGPUScene(FeatureLevel);
|
||
|
bool bUseForWaterInfoTextureDepth = Mesh.bUseForWaterInfoTextureDepth;
|
||
|
--
|
||
|
2.42.0.windows.1
|
||
|
|