{
    "Name": "Projective Mesh Shadow Patch Receiver",
    "OverrideMaterial": "engine:engineDefaults.rematerialdefinition",

    "Parameters": {
        "Constants": {
            "crwsReferencePosition": "global.crwsReferencePosition",
            "renderTargetSize": "view.renderTargetSize",
            "zFar": "0",
            "lightDirection": "[0, -1, 0]",
            "normalDotThreshold": "0",
            "receiverSurfaceErrorScaleFactor": "0",
            "tileRowCount" : "0",
            "invTileRowCount" : "0",
            "offsetMeshShadow": "0.02",
            "intensityScale": "1"
        },
        "Buffers": {
            "rateMapData" : "fallback.zeros",
            "position": "geometry.vertexPosition",
            "vertexToAdjacentFacesTable"         : "geometry.vertexAdjacencies",
            "accumulatedVertexIncidentFaceCount" : "geometry.accumulatedVertexValence",
            "triangleVertexIndices"              : "geometry.indexTriangles",
            "vertexPositions"                    : "geometry.vertexPosition",
            "objectToWorldArray"                 : "fallback.zeros1024bytes",
            "receiverParameterArray"             : "fallback.zeros1024bytes",
            "meshShadowMipDescriptionBuffer"     : "fallback.zeros1024bytes",
            "receiverPerFrameParameterArray"     : "fallback.zeros1024bytes",
            "breakthroughData"                   : "fallback.zeros1024bytes"
        },
        "Textures": {
            "textureProjectiveMeshShadow"              : "fallback.transparentBlank",
            "textureProjectiveMeshShadowPatchDepth"    : "fallback.white",
            "textureLinearizedSUDepth"                 : "fallback.infinityArray",
            "lowResPortalMask"                         : "fallback.blackArray",
            "compositedSceneUnderstandingShadowsColor" : "fallback.transparentBlank",
            "compositedSceneUnderstandingShadowsDepth" : "fallback.transparentBlank",
            "textureVisualDepth"                       : "fallback.vdSentinel",
            "textureBtMask"                            : "rendergraph.BreakeeLayerTexture"
        }
    },
    "Techniques" : [
        {
            "Name": "DrawMeshShadowPatchReceiver",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "PixelShader": {
                "Entry": "fsMeshShadowPatchReceiver"
            },
            "State" : {
                "AlphaBlend"                : true,
                "WriteDepth"                : false,
                "DepthCompareFunction"      : "GreaterEqual"
            },
            "FunctionConstants" : {
                "MeshShadowRenderAsRGB" : "false",
                "ImmersionOption": "0",
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowVisualizeOverlap" : "false",
                "MeshShadowEnableClipping": "true",
                "MeshShadowVisualizeDepthPrepass" : "false"
            },
            "Variations" : {
                "MeshShadowRenderAsRGB" : ["true", "false"],
                "ImmersionOption": ["0", "1", "2"],
                "MeshShadowUseFlatShadows" : ["true", "false"],
                "MeshShadowVisualizeOverlap" : ["true", "false"],
                "MeshShadowEnableClipping" : ["true", "false"],
                "MeshShadowVisualizeDepthPrepass" : ["true", "false"]
            },
            "RuntimeFunctionConstantDefaults" : {
                "MeshShadowRenderAsRGB" : "true",
                "ImmersionOption": "0",
                "MeshShadowUseFlatShadows": "true",
                "MeshShadowVisualizeOverlap" : "true",
                "MeshShadowEnableClipping" : "true",
                "MeshShadowVisualizeDepthPrepass" : "true"
            },
            "SupportsRuntimeFunctionConstants" : true,
            "PreloadOptions" : {
                "PixelFormat" : [115, 81],
                "SampleCount" : [4, 1]
            }
        },
        {
            "Name": "DrawMeshShadowPatchReceiverMaxBlend",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "PixelShader": {
                "Entry": "fsMeshShadowPatchReceiver"
            },
            "State" : {
                "AlphaBlend"                : true,
                "WriteDepth"                : false,
                "DepthCompareFunction"      : "GreaterEqual",
                "AlphaBlendOperation"       : "Max",
                "AlphaSourceFactor"         : "One",
                "AlphaDestinationFactor"    : "One",
                "RgbBlendOperation"         : "Max",
                "RgbSourceFactor"           : "One",
                "RgbDestinationFactor"      : "One"
            },
            "FunctionConstants" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowRenderAsRGB" : "false",
                "ImmersionOption": "0",
                "MeshShadowVisualizeOverlap" : "false",
                "MeshShadowEnableClipping": "true"
            },
            "Variations" : {
                "MeshShadowUseFlatShadows" : ["true", "false"],
                "MeshShadowRenderAsRGB" : ["true", "false"],
                "ImmersionOption": ["0", "1", "2"],
                "MeshShadowVisualizeOverlap" : ["true", "false"]
            },
            "RuntimeFunctionConstantDefaults" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowRenderAsRGB" : "false",
                "ImmersionOption": "0",
                "MeshShadowVisualizeOverlap" : "false"
            },
            "SupportsRuntimeFunctionConstants" : true,
            "UseDynamicAttributeStride" : true,
            "PreloadOptions" : {
                "PixelFormat" : [115, 81],
                "SampleCount" : [4, 1]
            }
        },
        {
            "Name": "DrawMeshShadowPatchReceiverDepthOnly",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "State" : {
                "WriteDepth"                : true,
                "DepthCompareFunction"      : "Greater"
            },
            "FunctionConstants" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowVisualizeOverlap" : "false",
                "MeshShadowEnableClipping": "true"
            },
            "Variations" : {
                "MeshShadowUseFlatShadows" : ["true", "false"]
            },
            "RuntimeFunctionConstantDefaults" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowVisualizeOverlap" : "false"
            },
            "SupportsRuntimeFunctionConstants" : true,
            "UseDynamicAttributeStride" : true,
            "PreloadOptions" : {
                "PixelFormat" : [115, 81],
                "SampleCount" : [4, 1]
            }
        },
        {
            "Name": "MeshShadowPatchReceiverDepthPrepass",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "State" : {
                "WriteDepth"                : true,
                "DepthCompareFunction"      : "Greater"
            },
            "FunctionConstants" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowEnableClipping": "false"
            },
            "SupportsRuntimeFunctionConstants" : true
        },
        {
            "Name": "MeshShadowPatchReceiverVisualizeDepthPrepass",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "PixelShader": {
                "Entry": "fsVisualizeDepthPrepass"
            },
            "State" : {
                "AlphaBlend"                : true,
                "WriteDepth"                : true,
                "DepthCompareFunction"      : "Greater"
            },
            "FunctionConstants" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowVisualizeDepthPrepass": "true"
            }
        },
        {
            "Name": "MeshShadowPatchReceiverVisualizeDepthPrepassWithWireframe",
            "VertexShader": {
                "Entry": "vsMeshShadowPatchReceiver"
            },
            "PixelShader": {
                "Entry": "fsVisualizeDepthPrepassWithWireframe"
            },
            "State" : {
                "AlphaBlend"                : true,
                "WriteDepth"                : true,
                "DepthCompareFunction"      : "Greater"
            },
            "FunctionConstants" : {
                "MeshShadowUseFlatShadows": "false",
                "MeshShadowVisualizeDepthPrepass": "true"
            }
        },
        {
            "Name": "SetStencilForBackgroundPixels",
            "VertexShader": {
                "Entry": "fullScreen2Vert"
            },
            "State" : {
                "AlphaBlend"             : false,
                "WriteDepth"             : false,
                "WriteStencil"           : true,
                "DepthCompareFunction"   : "Equal",
                "ColorWriteMask"         : "None"
            },
            "SupportsRuntimeFunctionConstants" : true
        },
        {
            "Name": "MeshShadowDepthClear",
            "VertexShader": {
                "Entry": "fullScreen2Vert"
            },
            "State" : {
                "AlphaBlend"             : false,
                "WriteDepth"             : true,
                "WriteStencil"           : false,
                "DepthCompareFunction"   : "Always",
                "ColorWriteMask"         : "None"
            }
        }
    ],
    "TechniqueMapping": {
        "DrawMeshShadowPatchReceiver": "DrawMeshShadowPatchReceiver",
        "PatchShadowReceiverDepthOnly": "DrawMeshShadowPatchReceiverDepthOnly",
        "SetStencilForBackgroundPixels": "SetStencilForBackgroundPixels",
        "MeshShadowDepthClear": "MeshShadowDepthClear",
        "DrawMeshShadowPatchReceiverMaxBlend": "DrawMeshShadowPatchReceiverMaxBlend",
        "MeshShadowPatchReceiverDepthPrepass": "MeshShadowPatchReceiverDepthPrepass",
        "MeshShadowPatchReceiverVisualizeDepthPrepass": "MeshShadowPatchReceiverVisualizeDepthPrepass",
        "MeshShadowPatchReceiverVisualizeDepthPrepassWithWireframe": "MeshShadowPatchReceiverVisualizeDepthPrepassWithWireframe"
    }
}
