Skip to content

Hdrp/clean shader stacks fields #906

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using UnityEditor.Rendering.HighDefinition.ShaderGraph.Legacy;
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
using static UnityEditor.Rendering.HighDefinition.HDShaderUtils;
using static UnityEditor.Rendering.HighDefinition.HDFields;

namespace UnityEditor.Rendering.HighDefinition.ShaderGraph
{
Expand Down Expand Up @@ -50,17 +51,26 @@ protected override IEnumerable<SubShaderDescriptor> EnumerateSubShaders()
yield return SubShaders.Decal;
}

public static FieldDescriptor AffectsAlbedo = new FieldDescriptor(kMaterial, "AffectsAlbedo", "_MATERIAL_AFFECTS_ALBEDO 1");
public static FieldDescriptor AffectsNormal = new FieldDescriptor(kMaterial, "AffectsNormal", "_MATERIAL_AFFECTS_NORMAL 1");
public static FieldDescriptor AffectsEmission = new FieldDescriptor(kMaterial, "AffectsEmission", "_MATERIAL_AFFECTS_EMISSION 1");
public static FieldDescriptor AffectsMetal = new FieldDescriptor(kMaterial, "AffectsMetal", "");
public static FieldDescriptor AffectsAO = new FieldDescriptor(kMaterial, "AffectsAO", "");
public static FieldDescriptor AffectsSmoothness = new FieldDescriptor(kMaterial, "AffectsSmoothness", "");
public static FieldDescriptor AffectsMaskMap = new FieldDescriptor(kMaterial, "AffectsMaskMap", "_MATERIAL_AFFECTS_MASKMAP 1");
public static FieldDescriptor DecalDefault = new FieldDescriptor(kMaterial, "DecalDefault", "");

public override void GetFields(ref TargetFieldContext context)
{
// Decal properties
context.AddField(HDFields.AffectsAlbedo, decalData.affectsAlbedo);
context.AddField(HDFields.AffectsNormal, decalData.affectsNormal);
context.AddField(HDFields.AffectsEmission, decalData.affectsEmission);
context.AddField(HDFields.AffectsMetal, decalData.affectsMetal);
context.AddField(HDFields.AffectsAO, decalData.affectsAO);
context.AddField(HDFields.AffectsSmoothness, decalData.affectsSmoothness);
context.AddField(HDFields.AffectsMaskMap, decalData.affectsSmoothness || decalData.affectsMetal || decalData.affectsAO);
context.AddField(HDFields.DecalDefault, decalData.affectsAlbedo || decalData.affectsNormal || decalData.affectsMetal ||
context.AddField(AffectsAlbedo, decalData.affectsAlbedo);
context.AddField(AffectsNormal, decalData.affectsNormal);
context.AddField(AffectsEmission, decalData.affectsEmission);
context.AddField(AffectsMetal, decalData.affectsMetal);
context.AddField(AffectsAO, decalData.affectsAO);
context.AddField(AffectsSmoothness, decalData.affectsSmoothness);
context.AddField(AffectsMaskMap, decalData.affectsSmoothness || decalData.affectsMetal || decalData.affectsAO);
context.AddField(DecalDefault, decalData.affectsAlbedo || decalData.affectsNormal || decalData.affectsMetal ||
decalData.affectsAO || decalData.affectsSmoothness );
}

Expand Down Expand Up @@ -116,12 +126,12 @@ static class SubShaders
generatesPreview = true,
passes = new PassCollection
{
{ DecalPasses.Projector3RT, new FieldCondition(HDFields.DecalDefault, true) },
{ DecalPasses.Projector4RT, new FieldCondition(HDFields.DecalDefault, true) },
{ DecalPasses.ProjectorEmissive, new FieldCondition(HDFields.AffectsEmission, true) },
{ DecalPasses.Mesh3RT, new FieldCondition(HDFields.DecalDefault, true) },
{ DecalPasses.Mesh4RT, new FieldCondition(HDFields.DecalDefault, true) },
{ DecalPasses.MeshEmissive, new FieldCondition(HDFields.AffectsEmission, true) },
{ DecalPasses.Projector3RT, new FieldCondition(DecalDefault, true) },
{ DecalPasses.Projector4RT, new FieldCondition(DecalDefault, true) },
{ DecalPasses.ProjectorEmissive, new FieldCondition(AffectsEmission, true) },
{ DecalPasses.Mesh3RT, new FieldCondition(DecalDefault, true) },
{ DecalPasses.Mesh4RT, new FieldCondition(DecalDefault, true) },
{ DecalPasses.MeshEmissive, new FieldCondition(AffectsEmission, true) },
{ DecalPasses.Preview, new FieldCondition(Fields.IsPreview, true) },
},
};
Expand Down Expand Up @@ -413,37 +423,37 @@ static class DecalRenderStates

// ColorMask per Affects Channel
{ RenderState.ColorMask(s_DecalColorMasks[0]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[1]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[2]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[3]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[4]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[5]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[6]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[7]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, true) } },
};

public static RenderStateCollection ProjectorEmissive = new RenderStateCollection
Expand Down Expand Up @@ -484,37 +494,37 @@ static class DecalRenderStates

// ColorMask per Affects Channel
{ RenderState.ColorMask(s_DecalColorMasks[0]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[1]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[2]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[3]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, false) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, false) } },
{ RenderState.ColorMask(s_DecalColorMasks[4]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[5]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, false),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, false),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[6]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, false),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, false),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, true) } },
{ RenderState.ColorMask(s_DecalColorMasks[7]), new FieldCondition[] {
new FieldCondition(HDFields.AffectsMetal, true),
new FieldCondition(HDFields.AffectsAO, true),
new FieldCondition(HDFields.AffectsSmoothness, true) } },
new FieldCondition(AffectsMetal, true),
new FieldCondition(AffectsAO, true),
new FieldCondition(AffectsSmoothness, true) } },
};

public static RenderStateCollection MeshEmissive = new RenderStateCollection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using UnityEditor.Rendering.HighDefinition.ShaderGraph.Legacy;
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
using static UnityEditor.Rendering.HighDefinition.HDShaderUtils;
using static UnityEditor.Rendering.HighDefinition.HDFields;

namespace UnityEditor.Rendering.HighDefinition.ShaderGraph
{
Expand All @@ -22,7 +23,7 @@ sealed partial class EyeSubTarget : LightingSubTarget, ILegacyTarget, IRequiresD
protected override string subTargetAssetGuid => "864e4e09d6293cf4d98457f740bb3301";
protected override ShaderID shaderID => HDShaderUtils.ShaderID.SG_Eye;
protected override string subShaderInclude => "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Eye/Eye.hlsl";
protected override FieldDescriptor subShaderField => HDFields.SubShader.Eye;
protected override FieldDescriptor subShaderField => new FieldDescriptor(kSubShader, "Eye SubShader", "");

protected override bool supportRaytracing => false;
protected override bool requireSplitLighting => eyeData.subsurfaceScattering;
Expand All @@ -41,14 +42,17 @@ public EyeData eyeData
set => m_EyeData = value;
}

public static FieldDescriptor Eye = new FieldDescriptor(kMaterial, "Eye", "_MATERIAL_FEATURE_EYE 1");
public static FieldDescriptor EyeCinematic = new FieldDescriptor(kMaterial, "EyeCinematic", "_MATERIAL_FEATURE_EYE_CINEMATIC 1");

public override void GetFields(ref TargetFieldContext context)
{
base.GetFields(ref context);

// Eye specific properties
context.AddField(HDFields.Eye, eyeData.materialType == EyeData.MaterialType.Eye);
context.AddField(HDFields.EyeCinematic, eyeData.materialType == EyeData.MaterialType.EyeCinematic);
context.AddField(HDFields.SubsurfaceScattering, eyeData.subsurfaceScattering && systemData.surfaceType != SurfaceType.Transparent);
context.AddField(Eye, eyeData.materialType == EyeData.MaterialType.Eye);
context.AddField(EyeCinematic, eyeData.materialType == EyeData.MaterialType.EyeCinematic);
context.AddField(SubsurfaceScattering, eyeData.subsurfaceScattering && systemData.surfaceType != SurfaceType.Transparent);
}

public override void GetActiveBlocks(ref TargetActiveBlockContext context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using UnityEditor.Rendering.HighDefinition.ShaderGraph.Legacy;
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
using static UnityEditor.Rendering.HighDefinition.HDShaderUtils;
using static UnityEditor.Rendering.HighDefinition.HDFields;

namespace UnityEditor.Rendering.HighDefinition.ShaderGraph
{
Expand All @@ -22,7 +23,8 @@ sealed partial class FabricSubTarget : LightingSubTarget, ILegacyTarget, IRequir
protected override string customInspector => "Rendering.HighDefinition.FabricGUI";
protected override ShaderID shaderID => HDShaderUtils.ShaderID.SG_Fabric;
protected override string subShaderInclude => "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Fabric/Fabric.hlsl";
protected override FieldDescriptor subShaderField => HDFields.SubShader.Fabric;
protected override string raytracingInclude => CoreIncludes.kFabricRaytracing;
protected override FieldDescriptor subShaderField => new FieldDescriptor(kSubShader, "Fabric SubShader", "");
protected override bool requireSplitLighting => fabricData.subsurfaceScattering;

FabricData m_FabricData;
Expand All @@ -39,6 +41,9 @@ public FabricData fabricData
set => m_FabricData = value;
}

public static FieldDescriptor CottonWool = new FieldDescriptor(kMaterial, "CottonWool", "_MATERIAL_FEATURE_COTTON_WOOL 1");
public static FieldDescriptor Silk = new FieldDescriptor(kMaterial, "Silk", "_MATERIAL_FEATURE_SILK 1");

protected override SubShaderDescriptor GetRaytracingSubShaderDescriptor()
{
var descriptor = base.GetRaytracingSubShaderDescriptor();
Expand All @@ -54,11 +59,11 @@ public override void GetFields(ref TargetFieldContext context)
base.GetFields(ref context);

// Fabric specific properties
context.AddField(HDFields.CottonWool, fabricData.materialType == FabricData.MaterialType.CottonWool);
context.AddField(HDFields.Silk, fabricData.materialType == FabricData.MaterialType.Silk);
context.AddField(HDFields.SubsurfaceScattering, fabricData.subsurfaceScattering && systemData.surfaceType != SurfaceType.Transparent);
context.AddField(HDFields.Transmission, fabricData.transmission);
context.AddField(HDFields.EnergyConservingSpecular, fabricData.energyConservingSpecular);
context.AddField(CottonWool, fabricData.materialType == FabricData.MaterialType.CottonWool);
context.AddField(Silk, fabricData.materialType == FabricData.MaterialType.Silk);
context.AddField(SubsurfaceScattering, fabricData.subsurfaceScattering && systemData.surfaceType != SurfaceType.Transparent);
context.AddField(Transmission, fabricData.transmission);
context.AddField(EnergyConservingSpecular, fabricData.energyConservingSpecular);
}

public override void GetActiveBlocks(ref TargetActiveBlockContext context)
Expand Down
Loading