Revert Depth Offset (wrong impl, can be done later)

This commit is contained in:
Wojtek Figat
2023-01-31 14:22:37 +01:00
parent c46ea56af2
commit 0709288eac
12 changed files with 9 additions and 67 deletions

View File

@@ -22,9 +22,6 @@ void PS_GBuffer(
#if USE_GBUFFER_CUSTOM_DATA #if USE_GBUFFER_CUSTOM_DATA
,out float4 RT3 : SV_Target4 ,out float4 RT3 : SV_Target4
#endif #endif
#endif
#if USE_DEPTH_OFFSET
,out float Depth : SV_Depth
#endif #endif
) )
{ {
@@ -39,11 +36,6 @@ void PS_GBuffer(
MaterialInput materialInput = GetMaterialInput(input); MaterialInput materialInput = GetMaterialInput(input);
Material material = GetMaterialPS(materialInput); Material material = GetMaterialPS(materialInput);
// Depth offset
#if USE_DEPTH_OFFSET
Depth = (materialInput.SvPosition.z * materialInput.SvPosition.w) / (materialInput.SvPosition.w + material.DepthOffset);
#endif
// Masking // Masking
#if MATERIAL_MASKED #if MATERIAL_MASKED
clip(material.Mask - MATERIAL_MASK_THRESHOLD); clip(material.Mask - MATERIAL_MASK_THRESHOLD);

View File

@@ -36,9 +36,6 @@ META_PS(USE_FORWARD, FEATURE_LEVEL_ES2)
void PS_Forward( void PS_Forward(
in PixelInput input in PixelInput input
,out float4 output : SV_Target0 ,out float4 output : SV_Target0
#if USE_DEPTH_OFFSET
,out float Depth : SV_Depth
#endif
) )
{ {
output = 0; output = 0;
@@ -51,11 +48,6 @@ void PS_Forward(
// Get material parameters // Get material parameters
MaterialInput materialInput = GetMaterialInput(input); MaterialInput materialInput = GetMaterialInput(input);
Material material = GetMaterialPS(materialInput); Material material = GetMaterialPS(materialInput);
// Depth offset
#if USE_DEPTH_OFFSET
Depth = (materialInput.SvPosition.z * materialInput.SvPosition.w) / (materialInput.SvPosition.w + material.DepthOffset);
#endif
// Masking // Masking
#if MATERIAL_MASKED #if MATERIAL_MASKED

View File

@@ -587,18 +587,14 @@ void ClipLODTransition(PixelInput input)
// Pixel Shader function for Depth Pass // Pixel Shader function for Depth Pass
META_PS(true, FEATURE_LEVEL_ES2) META_PS(true, FEATURE_LEVEL_ES2)
void PS_Depth(PixelInput input void PS_Depth(PixelInput input)
#if USE_DEPTH_OFFSET
,out float Depth : SV_Depth
#endif
)
{ {
#if USE_DITHERED_LOD_TRANSITION #if USE_DITHERED_LOD_TRANSITION
// LOD masking // LOD masking
ClipLODTransition(input); ClipLODTransition(input);
#endif #endif
#if MATERIAL_MASKED || MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE || USE_DEPTH_OFFSET #if MATERIAL_MASKED || MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE
// Get material parameters // Get material parameters
MaterialInput materialInput = GetMaterialInput(input); MaterialInput materialInput = GetMaterialInput(input);
Material material = GetMaterialPS(materialInput); Material material = GetMaterialPS(materialInput);
@@ -610,11 +606,6 @@ void PS_Depth(PixelInput input
#if MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE #if MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE
clip(material.Opacity - MATERIAL_OPACITY_THRESHOLD); clip(material.Opacity - MATERIAL_OPACITY_THRESHOLD);
#endif #endif
// Depth offset
#if USE_DEPTH_OFFSET
Depth = (materialInput.SvPosition.z * materialInput.SvPosition.w) / (materialInput.SvPosition.w + material.DepthOffset);
#endif
#endif #endif
} }

View File

@@ -40,7 +40,6 @@ namespace FlaxEditor.Surface.Archetypes
TessellationMultiplier = 12, TessellationMultiplier = 12,
WorldDisplacement = 13, WorldDisplacement = 13,
SubsurfaceColor = 14, SubsurfaceColor = 14,
DepthOffset = 15,
}; };
/// <inheritdoc /> /// <inheritdoc />
@@ -86,7 +85,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = false;
return; return;
} }
@@ -118,7 +116,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = withTess; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = withTess;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = withTess; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = withTess;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = info.ShadingModel == MaterialShadingModel.Subsurface || info.ShadingModel == MaterialShadingModel.Foliage; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = info.ShadingModel == MaterialShadingModel.Subsurface || info.ShadingModel == MaterialShadingModel.Foliage;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = true;
break; break;
} }
case MaterialDomain.PostProcess: case MaterialDomain.PostProcess:
@@ -137,7 +134,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = false;
break; break;
} }
case MaterialDomain.Decal: case MaterialDomain.Decal:
@@ -158,7 +154,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = false;
break; break;
} }
case MaterialDomain.GUI: case MaterialDomain.GUI:
@@ -177,7 +172,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = false;
break; break;
} }
case MaterialDomain.VolumeParticle: case MaterialDomain.VolumeParticle:
@@ -196,7 +190,6 @@ namespace FlaxEditor.Surface.Archetypes
GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false; GetBox(MaterialNodeBoxes.TessellationMultiplier).Enabled = false;
GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false; GetBox(MaterialNodeBoxes.WorldDisplacement).Enabled = false;
GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false; GetBox(MaterialNodeBoxes.SubsurfaceColor).Enabled = false;
GetBox(MaterialNodeBoxes.DepthOffset).Enabled = false;
break; break;
} }
default: throw new ArgumentOutOfRangeException(); default: throw new ArgumentOutOfRangeException();
@@ -288,7 +281,7 @@ namespace FlaxEditor.Surface.Archetypes
Title = "Material", Title = "Material",
Description = "Main material node", Description = "Main material node",
Flags = NodeFlags.MaterialGraph | NodeFlags.NoRemove | NodeFlags.NoSpawnViaGUI | NodeFlags.NoSpawnViaPaste | NodeFlags.NoCloseButton, Flags = NodeFlags.MaterialGraph | NodeFlags.NoRemove | NodeFlags.NoSpawnViaGUI | NodeFlags.NoSpawnViaPaste | NodeFlags.NoCloseButton,
Size = new Float2(150, 320), Size = new Float2(150, 300),
Elements = new[] Elements = new[]
{ {
NodeElementArchetype.Factory.Input(0, "", true, typeof(void), 0), NodeElementArchetype.Factory.Input(0, "", true, typeof(void), 0),
@@ -306,7 +299,6 @@ namespace FlaxEditor.Surface.Archetypes
NodeElementArchetype.Factory.Input(12, "Tessellation Multiplier", true, typeof(float), 12), NodeElementArchetype.Factory.Input(12, "Tessellation Multiplier", true, typeof(float), 12),
NodeElementArchetype.Factory.Input(13, "World Displacement", true, typeof(Float3), 13), NodeElementArchetype.Factory.Input(13, "World Displacement", true, typeof(Float3), 13),
NodeElementArchetype.Factory.Input(14, "Subsurface Color", true, typeof(Float3), 14), NodeElementArchetype.Factory.Input(14, "Subsurface Color", true, typeof(Float3), 14),
NodeElementArchetype.Factory.Input(15, "Depth Offset", true, typeof(float), 15),
} }
}, },
new NodeArchetype new NodeArchetype

View File

@@ -426,9 +426,6 @@ void Material::InitCompilationOptions(ShaderCompilationOptions& options)
info.BlendMode != MaterialBlendMode::Opaque && info.BlendMode != MaterialBlendMode::Opaque &&
EnumHasAnyFlags(info.UsageFlags, MaterialUsageFlags::UseRefraction) && EnumHasAnyFlags(info.UsageFlags, MaterialUsageFlags::UseRefraction) &&
(info.FeaturesFlags & MaterialFeaturesFlags::DisableDistortion) == MaterialFeaturesFlags::None; (info.FeaturesFlags & MaterialFeaturesFlags::DisableDistortion) == MaterialFeaturesFlags::None;
const bool useDepthOffset =
(info.Domain == MaterialDomain::Surface) &&
EnumHasAnyFlags(info.UsageFlags, MaterialUsageFlags::UseDepthOffset);
// @formatter:off // @formatter:off
static const char* Numbers[] = static const char* Numbers[] =
@@ -499,7 +496,6 @@ void Material::InitCompilationOptions(ShaderCompilationOptions& options)
options.Macros.Add({ "USE_FORWARD", Numbers[useForward ? 1 : 0] }); options.Macros.Add({ "USE_FORWARD", Numbers[useForward ? 1 : 0] });
options.Macros.Add({ "USE_DEFERRED", Numbers[isSurfaceOrTerrainOrDeformable && info.BlendMode == MaterialBlendMode::Opaque ? 1 : 0] }); options.Macros.Add({ "USE_DEFERRED", Numbers[isSurfaceOrTerrainOrDeformable && info.BlendMode == MaterialBlendMode::Opaque ? 1 : 0] });
options.Macros.Add({ "USE_DISTORTION", Numbers[useDistortion ? 1 : 0] }); options.Macros.Add({ "USE_DISTORTION", Numbers[useDistortion ? 1 : 0] });
options.Macros.Add({ "USE_DEPTH_OFFSET", Numbers[useDepthOffset ? 1 : 0] });
#endif #endif
} }

View File

@@ -330,11 +330,6 @@ API_ENUM(Attributes="Flags") enum class MaterialUsageFlags : uint32
/// The flag used to indicate that material uses refraction feature. /// The flag used to indicate that material uses refraction feature.
/// </summary> /// </summary>
UseRefraction = 1 << 6, UseRefraction = 1 << 6,
/// <summary>
/// The flag used to indicate that material uses per-pixel depth offset feature.
/// </summary>
UseDepthOffset = 1 << 7,
}; };
DECLARE_ENUM_OPERATORS(MaterialUsageFlags); DECLARE_ENUM_OPERATORS(MaterialUsageFlags);

View File

@@ -27,12 +27,11 @@ MaterialGenerator::MaterialGraphBoxesMapping MaterialGenerator::MaterialGraphBox
{ 12, TEXT("TessellationMultiplier"), MaterialTreeType::VertexShader, MaterialValue(VariantType::Float, TEXT("4.0f")) }, { 12, TEXT("TessellationMultiplier"), MaterialTreeType::VertexShader, MaterialValue(VariantType::Float, TEXT("4.0f")) },
{ 13, TEXT("WorldDisplacement"), MaterialTreeType::DomainShader, MaterialValue::InitForZero(VariantType::Float3) }, { 13, TEXT("WorldDisplacement"), MaterialTreeType::DomainShader, MaterialValue::InitForZero(VariantType::Float3) },
{ 14, TEXT("SubsurfaceColor"), MaterialTreeType::PixelShader, MaterialValue::InitForZero(VariantType::Float3) }, { 14, TEXT("SubsurfaceColor"), MaterialTreeType::PixelShader, MaterialValue::InitForZero(VariantType::Float3) },
{ 15, TEXT("DepthOffset"), MaterialTreeType::PixelShader, MaterialValue::InitForZero(VariantType::Float) },
}; };
const MaterialGenerator::MaterialGraphBoxesMapping& MaterialGenerator::GetMaterialRootNodeBox(MaterialGraphBoxes box) const MaterialGenerator::MaterialGraphBoxesMapping& MaterialGenerator::GetMaterialRootNodeBox(MaterialGraphBoxes box)
{ {
static_assert(ARRAY_COUNT(MaterialGenerator::MaterialGraphBoxesMappings) == 16, "Invalid amount of boxes added for root node. Please update the code above"); static_assert(ARRAY_COUNT(MaterialGenerator::MaterialGraphBoxesMappings) == 15, "Invalid amount of boxes added for root node. Please update the code above");
return MaterialGraphBoxesMappings[static_cast<int32>(box)]; return MaterialGraphBoxesMappings[static_cast<int32>(box)];
} }

View File

@@ -103,7 +103,6 @@ void MaterialGenerator::ProcessGroupLayers(Box* box, Node* node, Value& value)
EAT_BOX(AmbientOcclusion); EAT_BOX(AmbientOcclusion);
EAT_BOX(Opacity); EAT_BOX(Opacity);
EAT_BOX(Refraction); EAT_BOX(Refraction);
EAT_BOX(DepthOffset);
EAT_BOX(Mask); EAT_BOX(Mask);
EAT_BOX(Emissive); EAT_BOX(Emissive);
EAT_BOX(SubsurfaceColor); EAT_BOX(SubsurfaceColor);
@@ -205,7 +204,6 @@ void MaterialGenerator::ProcessGroupLayers(Box* box, Node* node, Value& value)
EAT_BOX(AmbientOcclusion); EAT_BOX(AmbientOcclusion);
EAT_BOX(Opacity); EAT_BOX(Opacity);
EAT_BOX(Refraction); EAT_BOX(Refraction);
EAT_BOX(DepthOffset);
EAT_BOX(Mask); EAT_BOX(Mask);
EAT_BOX(Emissive); EAT_BOX(Emissive);
EAT_BOX(SubsurfaceColor); EAT_BOX(SubsurfaceColor);
@@ -248,7 +246,6 @@ void MaterialGenerator::ProcessGroupLayers(Box* box, Node* node, Value& value)
EAT_BOX(AmbientOcclusion); EAT_BOX(AmbientOcclusion);
EAT_BOX(Opacity); EAT_BOX(Opacity);
EAT_BOX(Refraction); EAT_BOX(Refraction);
EAT_BOX(DepthOffset);
EAT_BOX(Mask); EAT_BOX(Mask);
EAT_BOX(Emissive); EAT_BOX(Emissive);
@@ -256,7 +253,6 @@ void MaterialGenerator::ProcessGroupLayers(Box* box, Node* node, Value& value)
CHECK_MATERIAL_FEATURE(Normal, UseNormal); CHECK_MATERIAL_FEATURE(Normal, UseNormal);
CHECK_MATERIAL_FEATURE(Mask, UseMask); CHECK_MATERIAL_FEATURE(Mask, UseMask);
CHECK_MATERIAL_FEATURE(Refraction, UseRefraction); CHECK_MATERIAL_FEATURE(Refraction, UseRefraction);
CHECK_MATERIAL_FEATURE(DepthOffset, UseDepthOffset);
break; break;
} }
@@ -336,7 +332,6 @@ void MaterialGenerator::ProcessGroupLayers(Box* box, Node* node, Value& value)
CHECK_MATERIAL_FEATURE(Normal, UseNormal); CHECK_MATERIAL_FEATURE(Normal, UseNormal);
CHECK_MATERIAL_FEATURE(Mask, UseMask); CHECK_MATERIAL_FEATURE(Mask, UseMask);
CHECK_MATERIAL_FEATURE(Refraction, UseRefraction); CHECK_MATERIAL_FEATURE(Refraction, UseRefraction);
CHECK_MATERIAL_FEATURE(DepthOffset, UseDepthOffset);
break; break;
} }

View File

@@ -256,7 +256,6 @@ bool MaterialGenerator::Generate(WriteStream& source, MaterialInfo& materialInfo
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Roughness); eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Roughness);
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Opacity); eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Opacity);
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Refraction); eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Refraction);
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::DepthOffset);
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::SubsurfaceColor); eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::SubsurfaceColor);
eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Mask); eatMaterialGraphBox(baseLayer, MaterialGraphBoxes::Mask);
} }

View File

@@ -89,11 +89,6 @@ enum class MaterialGraphBoxes
/// </summary> /// </summary>
SubsurfaceColor = 14, SubsurfaceColor = 14,
/// <summary>
/// The custom depth offset applied per-pixel.
/// </summary>
DepthOffset = 15,
/// <summary> /// <summary>
/// The amount of input boxes. /// The amount of input boxes.
/// </summary> /// </summary>

View File

@@ -129,7 +129,6 @@ void MaterialLayer::UpdateFeaturesFlags()
CHECK_BOX_AS_FEATURE(PositionOffset, UsePositionOffset); CHECK_BOX_AS_FEATURE(PositionOffset, UsePositionOffset);
CHECK_BOX_AS_FEATURE(WorldDisplacement, UseDisplacement); CHECK_BOX_AS_FEATURE(WorldDisplacement, UseDisplacement);
CHECK_BOX_AS_FEATURE(Refraction, UseRefraction); CHECK_BOX_AS_FEATURE(Refraction, UseRefraction);
CHECK_BOX_AS_FEATURE(DepthOffset, UseDepthOffset);
#undef CHECK_BOX_AS_FEATURE #undef CHECK_BOX_AS_FEATURE
} }
@@ -171,17 +170,16 @@ MaterialLayer* MaterialLayer::Load(const Guid& id, ReadStream* graphData, const
LOG(Warning, "Missing root node in '{0}'.", caller); LOG(Warning, "Missing root node in '{0}'.", caller);
layer->createRootNode(); layer->createRootNode();
} }
// Ensure to have valid root node // Ensure to have valid root node
else if (layer->Root->Boxes.Count() != static_cast<int32>(MaterialGraphBoxes::MAX)) else if (layer->Root->Boxes.Count() < static_cast<int32>(MaterialGraphBoxes::MAX))
{ {
#define ADD_BOX(type, valueType) \ #define ADD_BOX(type, valueType) \
if(layer->Root->Boxes.Count() <= static_cast<int32>(MaterialGraphBoxes::type)) \ if (layer->Root->Boxes.Count() <= static_cast<int32>(MaterialGraphBoxes::type)) \
layer->Root->Boxes.Add(MaterialGraphBox(layer->Root, static_cast<int32>(MaterialGraphBoxes::type), VariantType::valueType)) layer->Root->Boxes.Add(MaterialGraphBox(layer->Root, static_cast<int32>(MaterialGraphBoxes::type), VariantType::valueType))
ADD_BOX(TessellationMultiplier, Float); ADD_BOX(TessellationMultiplier, Float);
ADD_BOX(WorldDisplacement, Float3); ADD_BOX(WorldDisplacement, Float3);
ADD_BOX(SubsurfaceColor, Float3); ADD_BOX(SubsurfaceColor, Float3);
ADD_BOX(DepthOffset, Float); static_assert(static_cast<int32>(MaterialGraphBoxes::MAX) == 15, "Invalid amount of boxes added for root node. Please update the code above");
static_assert(static_cast<int32>(MaterialGraphBoxes::MAX) == 16, "Invalid amount of boxes added for root node. Please update the code above");
ASSERT(layer->Root->Boxes.Count() == static_cast<int32>(MaterialGraphBoxes::MAX)); ASSERT(layer->Root->Boxes.Count() == static_cast<int32>(MaterialGraphBoxes::MAX));
#if BUILD_DEBUG #if BUILD_DEBUG
// Test for valid pointers after node upgrade // Test for valid pointers after node upgrade
@@ -227,12 +225,11 @@ void MaterialLayer::createRootNode()
INIT_BOX(Normal, Float3); INIT_BOX(Normal, Float3);
INIT_BOX(Opacity, Float); INIT_BOX(Opacity, Float);
INIT_BOX(Refraction, Float); INIT_BOX(Refraction, Float);
INIT_BOX(DepthOffset, Float);
INIT_BOX(PositionOffset, Float3); INIT_BOX(PositionOffset, Float3);
INIT_BOX(TessellationMultiplier, Float); INIT_BOX(TessellationMultiplier, Float);
INIT_BOX(WorldDisplacement, Float3); INIT_BOX(WorldDisplacement, Float3);
INIT_BOX(SubsurfaceColor, Float3); INIT_BOX(SubsurfaceColor, Float3);
static_assert(static_cast<int32>(MaterialGraphBoxes::MAX) == 16, "Invalid amount of boxes created for root node. Please update the code above"); static_assert(static_cast<int32>(MaterialGraphBoxes::MAX) == 15, "Invalid amount of boxes created for root node. Please update the code above");
#undef INIT_BOX #undef INIT_BOX
// Mark as root // Mark as root

View File

@@ -86,7 +86,6 @@ struct Material
float3 WorldDisplacement; float3 WorldDisplacement;
float Mask; float Mask;
float TessellationMultiplier; float TessellationMultiplier;
float DepthOffset;
#if USE_CUSTOM_VERTEX_INTERPOLATORS #if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT];
#endif #endif