public static PassDescriptor GenerateTransparentDepthPrepass(bool supportLighting) { return(new PassDescriptor { // Definition displayName = "TransparentDepthPrepass", referenceName = "SHADERPASS_DEPTH_ONLY", lightMode = "TransparentDepthPrepass", useInPreview = true, validPixelBlocks = new BlockFieldDescriptor[] { BlockFields.SurfaceDescription.Alpha, HDBlockFields.SurfaceDescription.AlphaClipThresholdDepthPrepass, HDBlockFields.SurfaceDescription.DepthOffset, BlockFields.SurfaceDescription.NormalTS, BlockFields.SurfaceDescription.NormalWS, BlockFields.SurfaceDescription.NormalOS, BlockFields.SurfaceDescription.Smoothness, }, // Collections requiredFields = TransparentDepthPrepassFields, renderStates = GenerateRenderState(), pragmas = CorePragmas.DotsInstancedInV1AndV2, defines = GenerateDefines(), keywords = CoreKeywords.HDBase, includes = GenerateIncludes(), }); DefineCollection GenerateDefines() { var defines = new DefineCollection { { RayTracingNode.GetRayTracingKeyword(), 0 } }; if (supportLighting) { defines.Add(CoreKeywordDescriptors.WriteNormalBufferDefine, 1, new FieldCondition(HDFields.DisableSSRTransparent, false)); } return(defines); } RenderStateCollection GenerateRenderState() { var renderState = new RenderStateCollection { { RenderState.Blend(Blend.One, Blend.Zero) }, { RenderState.Cull(CoreRenderStates.Uniforms.cullMode) }, { RenderState.ZWrite(ZWrite.On) }, { RenderState.Stencil(new StencilDescriptor() { WriteMask = CoreRenderStates.Uniforms.stencilWriteMaskDepth, Ref = CoreRenderStates.Uniforms.stencilRefDepth, Comp = "Always", Pass = "******", }) }, }; if (!supportLighting) { renderState.Add(RenderState.ColorMask("ColorMask [_ColorMaskNormal]")); renderState.Add(RenderState.ColorMask("ColorMask 0 1")); } return(renderState); } IncludeCollection GenerateIncludes() { var includes = new IncludeCollection(); includes.Add(CoreIncludes.CorePregraph); if (supportLighting) { includes.Add(CoreIncludes.kNormalSurfaceGradient, IncludeLocation.Pregraph); } includes.Add(CoreIncludes.kPassPlaceholder, IncludeLocation.Pregraph); includes.Add(CoreIncludes.CoreUtility); if (supportLighting) { includes.Add(CoreIncludes.kDecalUtilities, IncludeLocation.Pregraph); includes.Add(CoreIncludes.kPostDecalsPlaceholder, IncludeLocation.Pregraph); } includes.Add(CoreIncludes.kShaderGraphFunctions, IncludeLocation.Pregraph); includes.Add(CoreIncludes.kPassDepthOnly, IncludeLocation.Postgraph); return(includes); } }
public static PassDescriptor GenerateMotionVectors(bool supportLighting, bool supportForward) { return(new PassDescriptor { // Definition displayName = "MotionVectors", referenceName = "SHADERPASS_MOTION_VECTORS", lightMode = "MotionVectors", useInPreview = false, // Collections requiredFields = CoreRequiredFields.LitFull, renderStates = GenerateRenderState(), defines = GenerateDefines(), pragmas = CorePragmas.DotsInstancedInV2Only, keywords = GenerateKeywords(), includes = GenerateIncludes(), }); DefineCollection GenerateDefines() { if (!supportLighting) { return(null); } var defines = new DefineCollection { { RayTracingNode.GetRayTracingKeyword(), 0 }, }; // #define WRITE_NORMAL_BUFFER for forward if (supportForward) { defines.Add(CoreKeywordDescriptors.WriteNormalBuffer, 1); } return(defines); } RenderStateCollection GenerateRenderState() { var renderState = new RenderStateCollection(); renderState.Add(CoreRenderStates.MotionVectors); if (!supportLighting) { renderState.Add(RenderState.ColorMask("ColorMask [_ColorMaskNormal] 1")); renderState.Add(RenderState.ColorMask("ColorMask 0 2")); } return(renderState); } KeywordCollection GenerateKeywords() { var keywords = new KeywordCollection { { CoreKeywords.HDBase }, { CoreKeywordDescriptors.WriteMsaaDepth }, { CoreKeywordDescriptors.AlphaToMask, new FieldCondition(Fields.AlphaToMask, true) }, }; // #pragma multi_compile _ WRITE_NORMAL_BUFFER for deferred if (supportLighting && !supportForward) { keywords.Add(CoreKeywordDescriptors.WriteNormalBuffer); } return(keywords); } IncludeCollection GenerateIncludes() { var includes = new IncludeCollection(); includes.Add(CoreIncludes.CorePregraph); if (supportLighting) { includes.Add(CoreIncludes.kNormalSurfaceGradient, IncludeLocation.Pregraph); } includes.Add(CoreIncludes.kPassPlaceholder, IncludeLocation.Pregraph); includes.Add(CoreIncludes.CoreUtility); if (supportLighting) { includes.Add(CoreIncludes.kDecalUtilities, IncludeLocation.Pregraph); includes.Add(CoreIncludes.kPostDecalsPlaceholder, IncludeLocation.Pregraph); } includes.Add(CoreIncludes.kShaderGraphFunctions, IncludeLocation.Pregraph); includes.Add(CoreIncludes.kPassMotionVectors, IncludeLocation.Postgraph); return(includes); } }