No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UniversalSpriteUnlitSubTarget.cs 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using UnityEditor.ShaderGraph;
  5. using UnityEditor.ShaderGraph.Legacy;
  6. using Unity.Rendering.Universal;
  7. namespace UnityEditor.Rendering.Universal.ShaderGraph
  8. {
  9. sealed class UniversalSpriteUnlitSubTarget : UniversalSubTarget, ILegacyTarget
  10. {
  11. static readonly GUID kSourceCodeGuid = new GUID("ed7c0aacec26e9646b45c96fb318e5a3"); // UniversalSpriteUnlitSubTarget.cs
  12. public UniversalSpriteUnlitSubTarget()
  13. {
  14. displayName = "Sprite Unlit";
  15. }
  16. protected override ShaderUtils.ShaderID shaderID => ShaderUtils.ShaderID.SG_SpriteUnlit;
  17. public override bool IsActive() => true;
  18. public override void Setup(ref TargetSetupContext context)
  19. {
  20. base.Setup(ref context);
  21. context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
  22. #if HAS_VFX_GRAPH
  23. var universalRPType = typeof(UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset);
  24. if (TargetsVFX() && !context.HasCustomEditorForRenderPipeline(universalRPType))
  25. {
  26. context.AddCustomEditorForRenderPipeline(typeof(VFXGenericShaderGraphMaterialGUI).FullName, universalRPType);
  27. }
  28. #endif
  29. context.AddSubShader(PostProcessSubShader(SubShaders.SpriteUnlit(target)));
  30. }
  31. public override void GetFields(ref TargetFieldContext context)
  32. {
  33. base.GetFields(ref context);
  34. SpriteSubTargetUtility.AddDefaultFields(ref context, target);
  35. }
  36. public override void GetActiveBlocks(ref TargetActiveBlockContext context)
  37. {
  38. SpriteSubTargetUtility.GetDefaultActiveBlocks(ref context, target);
  39. }
  40. public override void GetPropertiesGUI(ref TargetPropertyGUIContext context, Action onChange, Action<String> registerUndo)
  41. {
  42. SpriteSubTargetUtility.AddDefaultPropertiesGUI(ref context, onChange, registerUndo, target);
  43. }
  44. public bool TryUpgradeFromMasterNode(IMasterNode1 masterNode, out Dictionary<BlockFieldDescriptor, int> blockMap)
  45. {
  46. blockMap = null;
  47. if (!(masterNode is SpriteUnlitMasterNode1 spriteUnlitMasterNode))
  48. return false;
  49. // Set blockmap
  50. blockMap = new Dictionary<BlockFieldDescriptor, int>()
  51. {
  52. { BlockFields.VertexDescription.Position, 9 },
  53. { BlockFields.VertexDescription.Normal, 10 },
  54. { BlockFields.VertexDescription.Tangent, 11 },
  55. { BlockFields.SurfaceDescriptionLegacy.SpriteColor, 0 },
  56. { BlockFields.SurfaceDescription.AlphaClipThreshold, 8 },
  57. };
  58. return true;
  59. }
  60. #region SubShader
  61. static class SubShaders
  62. {
  63. public static SubShaderDescriptor SpriteUnlit(UniversalTarget target)
  64. {
  65. SubShaderDescriptor result = new SubShaderDescriptor()
  66. {
  67. pipelineTag = UniversalTarget.kPipelineTag,
  68. customTags = UniversalTarget.kUnlitMaterialTypeTag,
  69. renderType = $"{RenderType.Transparent}",
  70. renderQueue = $"{UnityEditor.ShaderGraph.RenderQueue.Transparent}",
  71. generatesPreview = true,
  72. passes = new PassCollection
  73. {
  74. { SpriteUnlitPasses.Unlit(target) },
  75. // Currently neither of these passes (selection/picking) can be last for the game view for
  76. // UI shaders to render correctly. Verify [1352225] before changing this order.
  77. { CorePasses._2DSceneSelection(target) },
  78. { CorePasses._2DScenePicking(target) },
  79. { SpriteUnlitPasses.Forward(target) },
  80. },
  81. };
  82. return result;
  83. }
  84. }
  85. #endregion
  86. #region Passes
  87. static class SpriteUnlitPasses
  88. {
  89. public static PassDescriptor Unlit(UniversalTarget target)
  90. {
  91. var result = new PassDescriptor()
  92. {
  93. // Definition
  94. displayName = "Sprite Unlit",
  95. referenceName = "SHADERPASS_SPRITEUNLIT",
  96. lightMode = "Universal2D",
  97. useInPreview = true,
  98. // Template
  99. passTemplatePath = UniversalTarget.kUberTemplatePath,
  100. sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,
  101. // Port Mask
  102. validVertexBlocks = CoreBlockMasks.Vertex,
  103. validPixelBlocks = SpriteUnlitBlockMasks.Fragment,
  104. // Fields
  105. structs = CoreStructCollections.Default,
  106. requiredFields = SpriteUnlitRequiredFields.Unlit,
  107. fieldDependencies = CoreFieldDependencies.Default,
  108. // Conditional State
  109. renderStates = CoreRenderStates.Default,
  110. pragmas = CorePragmas._2DDefault,
  111. defines = new DefineCollection(),
  112. keywords = SpriteUnlitKeywords.Unlit,
  113. includes = SpriteUnlitIncludes.Unlit,
  114. // Custom Interpolator Support
  115. customInterpolators = CoreCustomInterpDescriptors.Common
  116. };
  117. if (target.disableTint)
  118. result.defines.Add(Canvas.ShaderGraph.CanvasSubTarget<Target>.CanvasKeywords.DisableTint, 1);
  119. SpriteSubTargetUtility.AddAlphaClipControlToPass(ref result, target);
  120. return result;
  121. }
  122. public static PassDescriptor Forward(UniversalTarget target)
  123. {
  124. var result = new PassDescriptor
  125. {
  126. // Definition
  127. displayName = "Sprite Unlit",
  128. referenceName = "SHADERPASS_SPRITEFORWARD",
  129. lightMode = "UniversalForward",
  130. useInPreview = true,
  131. // Template
  132. passTemplatePath = UniversalTarget.kUberTemplatePath,
  133. sharedTemplateDirectories = UniversalTarget.kSharedTemplateDirectories,
  134. // Port Mask
  135. validVertexBlocks = CoreBlockMasks.Vertex,
  136. validPixelBlocks = SpriteUnlitBlockMasks.Fragment,
  137. // Fields
  138. structs = CoreStructCollections.Default,
  139. requiredFields = SpriteUnlitRequiredFields.Unlit,
  140. fieldDependencies = CoreFieldDependencies.Default,
  141. // Conditional State
  142. renderStates = CoreRenderStates.Default,
  143. pragmas = CorePragmas._2DDefault,
  144. defines = new(),
  145. keywords = SpriteUnlitKeywords.Unlit,
  146. includes = SpriteUnlitIncludes.Unlit,
  147. // Custom Interpolator Support
  148. customInterpolators = CoreCustomInterpDescriptors.Common
  149. };
  150. if (target.disableTint)
  151. result.defines.Add(Canvas.ShaderGraph.CanvasSubTarget<Target>.CanvasKeywords.DisableTint, 1);
  152. return result;
  153. }
  154. }
  155. #endregion
  156. #region PortMasks
  157. static class SpriteUnlitBlockMasks
  158. {
  159. public static BlockFieldDescriptor[] Fragment = new BlockFieldDescriptor[]
  160. {
  161. BlockFields.SurfaceDescription.BaseColor,
  162. BlockFields.SurfaceDescriptionLegacy.SpriteColor,
  163. BlockFields.SurfaceDescription.Alpha,
  164. BlockFields.SurfaceDescription.AlphaClipThreshold,
  165. };
  166. }
  167. #endregion
  168. #region RequiredFields
  169. static class SpriteUnlitRequiredFields
  170. {
  171. public static FieldCollection Unlit = new FieldCollection()
  172. {
  173. StructFields.Attributes.color,
  174. StructFields.Attributes.uv0,
  175. StructFields.Varyings.positionWS,
  176. StructFields.Varyings.color,
  177. StructFields.Varyings.texCoord0,
  178. };
  179. }
  180. #endregion
  181. #region Keywords
  182. static class SpriteUnlitKeywords
  183. {
  184. public static KeywordCollection Unlit = new KeywordCollection
  185. {
  186. { CoreKeywordDescriptors.DebugDisplay },
  187. };
  188. }
  189. #endregion
  190. #region Includes
  191. static class SpriteUnlitIncludes
  192. {
  193. const string kSpriteUnlitPass = "Packages/com.unity.render-pipelines.universal/Editor/2D/ShaderGraph/Includes/SpriteUnlitPass.hlsl";
  194. public static IncludeCollection Unlit = new IncludeCollection
  195. {
  196. // Pre-graph
  197. { CoreIncludes.CorePregraph },
  198. { CoreIncludes.ShaderGraphPregraph },
  199. // Post-graph
  200. { CoreIncludes.CorePostgraph },
  201. { kSpriteUnlitPass, IncludeLocation.Postgraph },
  202. };
  203. }
  204. #endregion
  205. }
  206. }