123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- using System;
- using System.Collections.Generic;
- using UnityEditor.ShaderGraph;
- using UnityEditor.ShaderGraph.Legacy;
-
- using Unity.Rendering.Universal;
- using UnityEngine;
-
- namespace UnityEditor.Rendering.Universal.ShaderGraph
- {
- sealed class UniversalSpriteLitSubTarget : UniversalSubTarget, ILegacyTarget
- {
- static readonly GUID kSourceCodeGuid = new GUID("ea1514729d7120344b27dcd67fbf34de"); // UniversalSpriteLitSubTarget.cs
-
- public UniversalSpriteLitSubTarget()
- {
- displayName = "Sprite Lit";
- }
-
- public override bool IsActive() => true;
-
- protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_SpriteLit;
-
- public override void Setup(ref TargetSetupContext context)
- {
- base.Setup(ref context);
- context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
- #if HAS_VFX_GRAPH
- var universalRPType = typeof(UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset);
- if (TargetsVFX() && !context.HasCustomEditorForRenderPipeline(universalRPType))
- {
- context.AddCustomEditorForRenderPipeline(typeof(VFXGenericShaderGraphMaterialGUI).FullName, universalRPType);
- }
- #endif
- context.AddSubShader(PostProcessSubShader(SubShaders.SpriteLit(target)));
- }
-
- public override void GetFields(ref TargetFieldContext context)
- {
- base.GetFields(ref context);
-
- SpriteSubTargetUtility.AddDefaultFields(ref context, target);
- }
-
- public override void GetActiveBlocks(ref TargetActiveBlockContext context)
- {
- SpriteSubTargetUtility.GetDefaultActiveBlocks(ref context, target);
-
- context.AddBlock(UniversalBlockFields.SurfaceDescription.SpriteMask);
- context.AddBlock(BlockFields.SurfaceDescription.NormalTS);
- }
-
- public override void GetPropertiesGUI(ref TargetPropertyGUIContext context, Action onChange, Action<String> registerUndo)
- {
- SpriteSubTargetUtility.AddDefaultPropertiesGUI(ref context, onChange, registerUndo, target);
- }
-
- public bool TryUpgradeFromMasterNode(IMasterNode1 masterNode, out Dictionary<BlockFieldDescriptor, int> blockMap)
- {
- blockMap = null;
- if (!(masterNode is SpriteLitMasterNode1 spriteLitMasterNode))
- return false;
-
- // Set blockmap
- blockMap = new Dictionary<BlockFieldDescriptor, int>()
- {
- { BlockFields.VertexDescription.Position, 9 },
- { BlockFields.VertexDescription.Normal, 10 },
- { BlockFields.VertexDescription.Tangent, 11 },
- { BlockFields.SurfaceDescriptionLegacy.SpriteColor, 0 },
- { UniversalBlockFields.SurfaceDescription.SpriteMask, 1 },
- { BlockFields.SurfaceDescription.NormalTS, 2 },
- { BlockFields.SurfaceDescription.AlphaClipThreshold, 8 },
- };
-
- return true;
- }
-
- #region SubShader
- static class SubShaders
- {
- public static SubShaderDescriptor SpriteLit(UniversalTarget target)
- {
- SubShaderDescriptor result = new SubShaderDescriptor()
- {
- pipelineTag = UniversalTarget.kPipelineTag,
- customTags = UniversalTarget.kLitMaterialTypeTag,
- renderType = $"{RenderType.Transparent}",
- renderQueue = $"{UnityEditor.ShaderGraph.RenderQueue.Transparent}",
- generatesPreview = true,
- passes = new PassCollection
- {
- { SpriteLitPasses.Lit(target) },
- { SpriteLitPasses.Normal(target) },
- // Currently neither of these passes (selection/picking) can be last for the game view for
- // UI shaders to render correctly. Verify [1352225] before changing this order.
- { CorePasses._2DSceneSelection(target) },
- { CorePasses._2DScenePicking(target) },
- { SpriteLitPasses.Forward(target) },
- },
- };
- return result;
- }
- }
- #endregion
-
- #region Passes
- static class SpriteLitPasses
- {
- public static PassDescriptor Lit(UniversalTarget target)
- {
- var result = new PassDescriptor()
- {
- // Definition
- displayName = "Sprite Lit",
- referenceName = "SHADERPASS_SPRITELIT",
- lightMode = "Universal2D",
- useInPreview = true,
-
- // Template
- passTemplatePath = UniversalTarget.kUberTemplatePath,
- sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,
-
- // Port Mask
- validVertexBlocks = CoreBlockMasks.Vertex,
- validPixelBlocks = SpriteLitBlockMasks.FragmentLit,
-
- // Fields
- structs = CoreStructCollections.Default,
- requiredFields = SpriteLitRequiredFields.Lit,
- fieldDependencies = CoreFieldDependencies.Default,
-
- // Conditional State
- renderStates = CoreRenderStates.Default,
- pragmas = CorePragmas._2DDefault,
- defines = new DefineCollection(),
- keywords = SpriteLitKeywords.Lit,
- includes = SpriteLitIncludes.Lit,
-
- // Custom Interpolator Support
- customInterpolators = CoreCustomInterpDescriptors.Common
- };
-
- if (target.disableTint)
- result.defines.Add(Canvas.ShaderGraph.CanvasSubTarget<Target>.CanvasKeywords.DisableTint, 1);
-
- SpriteSubTargetUtility.AddAlphaClipControlToPass(ref result, target);
-
- return result;
- }
-
- public static PassDescriptor Normal(UniversalTarget target)
- {
- var result = new PassDescriptor()
- {
- // Definition
- displayName = "Sprite Normal",
- referenceName = "SHADERPASS_SPRITENORMAL",
- lightMode = "NormalsRendering",
- useInPreview = true,
-
- // Template
- passTemplatePath = UniversalTarget.kUberTemplatePath,
- sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,
-
- // Port Mask
- validVertexBlocks = CoreBlockMasks.Vertex,
- validPixelBlocks = SpriteLitBlockMasks.FragmentForwardNormal,
-
- // Fields
- structs = CoreStructCollections.Default,
- requiredFields = SpriteLitRequiredFields.Normal,
- fieldDependencies = CoreFieldDependencies.Default,
-
- // Conditional State
- renderStates = CoreRenderStates.Default,
- pragmas = CorePragmas._2DDefault,
- defines = new DefineCollection(),
- includes = SpriteLitIncludes.Normal,
-
- // Custom Interpolator Support
- customInterpolators = CoreCustomInterpDescriptors.Common
- };
-
- if (target.disableTint)
- result.defines.Add(Canvas.ShaderGraph.CanvasSubTarget<Target>.CanvasKeywords.DisableTint, 1);
-
- SpriteSubTargetUtility.AddAlphaClipControlToPass(ref result, target);
-
- return result;
- }
-
- public static PassDescriptor Forward(UniversalTarget target)
- {
- var result = new PassDescriptor
- {
- // Definition
- displayName = "Sprite Forward",
- referenceName = "SHADERPASS_SPRITEFORWARD",
- lightMode = "UniversalForward",
- useInPreview = true,
-
- // Template
- passTemplatePath = UniversalTarget.kUberTemplatePath,
- sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,
-
- // Port Mask
- validVertexBlocks = CoreBlockMasks.Vertex,
- validPixelBlocks = SpriteLitBlockMasks.FragmentForwardNormal,
-
- // Fields
- structs = CoreStructCollections.Default,
- requiredFields = SpriteLitRequiredFields.Forward,
- keywords = SpriteLitKeywords.Forward,
- fieldDependencies = CoreFieldDependencies.Default,
-
- // Conditional State
- renderStates = CoreRenderStates.Default,
- pragmas = CorePragmas._2DDefault,
- defines = new DefineCollection(),
- includes = SpriteLitIncludes.Forward,
-
- // Custom Interpolator Support
- customInterpolators = CoreCustomInterpDescriptors.Common
- };
-
- if (target.disableTint)
- result.defines.Add(Canvas.ShaderGraph.CanvasSubTarget<Target>.CanvasKeywords.DisableTint, 1);
-
- return result;
- }
- }
- #endregion
-
- #region PortMasks
- static class SpriteLitBlockMasks
- {
- public static BlockFieldDescriptor[] FragmentLit = new BlockFieldDescriptor[]
- {
- BlockFields.SurfaceDescription.BaseColor,
- BlockFields.SurfaceDescriptionLegacy.SpriteColor,
- BlockFields.SurfaceDescription.Alpha,
- UniversalBlockFields.SurfaceDescription.SpriteMask,
- BlockFields.SurfaceDescription.AlphaClipThreshold,
- };
-
- public static BlockFieldDescriptor[] FragmentForwardNormal = new BlockFieldDescriptor[]
- {
- BlockFields.SurfaceDescription.BaseColor,
- BlockFields.SurfaceDescriptionLegacy.SpriteColor,
- BlockFields.SurfaceDescription.Alpha,
- BlockFields.SurfaceDescription.NormalTS,
- BlockFields.SurfaceDescription.AlphaClipThreshold,
- };
- }
- #endregion
-
- #region RequiredFields
- static class SpriteLitRequiredFields
- {
- public static FieldCollection Lit = new FieldCollection()
- {
- StructFields.Varyings.color,
- StructFields.Varyings.positionWS,
- StructFields.Varyings.texCoord0,
- StructFields.Varyings.screenPosition,
- };
-
- public static FieldCollection Normal = new FieldCollection()
- {
- StructFields.Varyings.normalWS,
- StructFields.Varyings.tangentWS,
- };
-
- public static FieldCollection Forward = new FieldCollection()
- {
- StructFields.Varyings.color,
- StructFields.Varyings.positionWS,
- StructFields.Varyings.texCoord0,
- };
- }
- #endregion
-
- #region Keywords
- static class SpriteLitKeywords
- {
- public static KeywordCollection Lit = new KeywordCollection
- {
- { CoreKeywordDescriptors.ShapeLightType0 },
- { CoreKeywordDescriptors.ShapeLightType1 },
- { CoreKeywordDescriptors.ShapeLightType2 },
- { CoreKeywordDescriptors.ShapeLightType3 },
- { CoreKeywordDescriptors.DebugDisplay },
- };
-
- public static KeywordCollection Forward = new KeywordCollection
- {
- { CoreKeywordDescriptors.DebugDisplay },
- };
- }
- #endregion
-
- #region Includes
- static class SpriteLitIncludes
- {
- const string k2DLightingUtil = "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl";
- const string k2DNormal = "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl";
- const string kSpriteLitPass = "Packages/com.unity.render-pipelines.universal/Editor/2D/ShaderGraph/Includes/SpriteLitPass.hlsl";
- const string kSpriteNormalPass = "Packages/com.unity.render-pipelines.universal/Editor/2D/ShaderGraph/Includes/SpriteNormalPass.hlsl";
- const string kSpriteForwardPass = "Packages/com.unity.render-pipelines.universal/Editor/2D/ShaderGraph/Includes/SpriteForwardPass.hlsl";
-
- public static IncludeCollection Lit = new IncludeCollection
- {
- // Pre-graph
- { CoreIncludes.CorePregraph },
- { CoreIncludes.ShaderGraphPregraph },
- { k2DLightingUtil, IncludeLocation.Pregraph },
-
- // Post-graph
- { CoreIncludes.CorePostgraph },
- { kSpriteLitPass, IncludeLocation.Postgraph },
- };
-
- public static IncludeCollection Normal = new IncludeCollection
- {
- // Pre-graph
- { CoreIncludes.CorePregraph },
- { CoreIncludes.ShaderGraphPregraph },
- { k2DNormal, IncludeLocation.Pregraph },
-
- // Post-graph
- { CoreIncludes.CorePostgraph },
- { kSpriteNormalPass, IncludeLocation.Postgraph },
- };
-
- public static IncludeCollection Forward = new IncludeCollection
- {
- // Pre-graph
- { CoreIncludes.CorePregraph },
- { CoreIncludes.ShaderGraphPregraph },
-
- // Post-graph
- { CoreIncludes.CorePostgraph },
- { kSpriteForwardPass, IncludeLocation.Postgraph },
- };
- }
- #endregion
- }
- }
|