{
    "Name": "BreakthroughTechniques",
    "OverrideMaterial": "engine:engineDefaults.rematerialdefinition",
    "Parameters": {
        "Constants": {
            "breakthroughCornerRadius" : "5",
            "breakthroughFeatherWidth" : "5",
            "breakthroughFeatherFalloff" : "1",
            "uvTransform"              : "[1,0,0,1]",
            "uvOffset"                 : "[0, 0]"
        },
        "Buffers": {
            "planarDataIndexFromPrepassInstanceID": "fallback.zeros1024bytes",
            "planarFeatherInstances": "fallback.zeros1024bytes",
            "planarDataIndexFromInstanceID": "fallback.zeros1024bytes",
            "planarRenderTargetIndexFromInstanceID": "fallback.zeros1024bytes",
            "planarOpacityInfluenceFromInstanceID": "fallback.zeros1024bytes",
            "planarDataIndexFromPrepassInstanceID": "fallback.zeros1024bytes",
            "circularDataIndexFromPrepassInstanceID": "fallback.zeros1024bytes",
            "circularFeatherInstances": "fallback.zeros1024bytes",
            "circularDataIndexFromInstanceID": "fallback.zeros1024bytes",
            "circularRenderTargetIndexFromInstanceID": "fallback.zeros1024bytes",
            "circularOpacityInfluenceFromInstanceID": "fallback.zeros1024bytes",
            "circularDataIndexFromPrepassInstanceID": "fallback.zeros1024bytes",
            "breakthroughClippingConstants": "scene.clipping"
        }
    },
    "Techniques": [
        {
            "Name": "PlanarBreakthroughPrepass",
            "VertexShader": {
                "Entry": "vsPlanarBreakthroughPrepass"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : false,
                "DepthCompareFunction" : "Always"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "false"
            }
        },
        {
            "Name": "ClippedPlanarBreakthroughPrepass",
            "InheritFromTechnique": "PlanarBreakthroughPrepass",
            "PixelShader": {
                "Entry": "fsBreakthroughPrepass"
            },
            "InheritState": true,
            "FunctionConstants" : {
                "EnableClipping" : "true"
            }
        },
        {
            "Name": "DebugPlanarBreakthroughPrepass",
            "InheritFromTechnique": "ClippedPlanarBreakthroughPrepass",
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction" : "Always"
            },
            "FunctionConstants" : {
                "EnableDebug" : "true"
            }
        },
        {
            "Name": "PlanarBreakthroughMask",
            "VertexShader": {
                "Entry": "vsPlanarBreakthroughMask"
            },
            "PixelShader": {
                "Entry": "fsPlanarBreakthroughMask"
            },
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction"      : "Always",
                "AlphaBlendOperation"       : "Min",
                "AlphaSourceFactor"         : "One",
                "AlphaDestinationFactor"    : "One",
                "RgbBlendOperation"         : "Min",
                "RgbSourceFactor"           : "One",
                "RgbDestinationFactor"      : "One"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "true"
            }
        },
        {
            "Name": "PlanarBreakthroughMaskProgrammableBlending",
            "VertexShader": {
                "Entry": "vsPlanarBreakthroughMask"
            },
            "PixelShader": {
                "Entry": "fsPlanarBreakthroughMaskProgrammableBlending"
            },
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction"      : "Always",
                "AlphaBlendOperation"       : "Add",
                "AlphaSourceFactor"         : "One",
                "AlphaDestinationFactor"    : "One",
                "RgbBlendOperation"         : "Add",
                "RgbSourceFactor"           : "One",
                "RgbDestinationFactor"      : "Zero"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "true"
            }
        },
        {
            "Name": "ClippedPlanarBreakthroughMask",
            "InheritFromTechnique": "PlanarBreakthroughMask",
            "InheritState": true,
            "FunctionConstants" : {
                "EnableClipping" : "true"
            }
        },
        {
            "Name": "ClippedPlanarBreakthroughMaskProgrammableBlending",
            "InheritFromTechnique": "PlanarBreakthroughMaskProgrammableBlending",
            "InheritState": true,
            "FunctionConstants" : {
                "EnableClipping" : "true"
            }
        },
        {
            "Name": "CircularBreakthroughPrepass",
            "VertexShader": {
                "Entry": "vsCircularBreakthroughPrepass"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : false,
                "DepthCompareFunction" : "Always"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "false"
            }
        },
        {
            "Name": "DebugCircularBreakthroughPrepass",
            "VertexShader": {
                "Entry": "vsCircularBreakthroughPrepass"
            },
            "PixelShader": {
                "Entry": "fsBreakthroughPrepass"
            },
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction" : "Always"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "false",
                "EnableDebug" : "true"
            }
        },
        {
            "Name": "CircularBreakthroughMask",
            "VertexShader": {
                "Entry": "vsCircularBreakthroughMask"
            },
            "PixelShader": {
                "Entry": "fsCircularBreakthroughMask"
            },
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction"      : "Always",
                "AlphaBlendOperation"       : "Min",
                "AlphaSourceFactor"         : "One",
                "AlphaDestinationFactor"    : "One",
                "RgbBlendOperation"         : "Min",
                "RgbSourceFactor"           : "One",
                "RgbDestinationFactor"      : "One"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "true"
            }
        },
        {
            "Name": "CircularBreakthroughMaskProgrammableBlending",
            "VertexShader": {
                "Entry": "vsCircularBreakthroughMask"
            },
            "PixelShader": {
                "Entry": "fsCircularBreakthroughMaskProgrammableBlending"
            },
            "State" : {
                "AlphaBlend" : true,
                "WriteDepth" : false,
                "DepthCompareFunction"      : "Always",
                "AlphaBlendOperation"       : "Add",
                "AlphaSourceFactor"         : "One",
                "AlphaDestinationFactor"    : "One",
                "RgbBlendOperation"         : "Add",
                "RgbSourceFactor"           : "One",
                "RgbDestinationFactor"      : "Zero"
            },
            "FunctionConstants" : {
                "EnableMultiRenderTargets" : "true"
            }
        }
    ],
    "TechniqueMapping": {
        "PlanarBreakthroughPrepass":                         "PlanarBreakthroughPrepass",
        "ClippedPlanarBreakthroughPrepass":                  "ClippedPlanarBreakthroughPrepass",
        "DebugPlanarBreakthroughPrepass":                    "DebugPlanarBreakthroughPrepass",
        "PlanarBreakthroughMask":                            "PlanarBreakthroughMask",
        "PlanarBreakthroughMaskProgrammableBlending":        "PlanarBreakthroughMaskProgrammableBlending",
        "ClippedPlanarBreakthroughMask":                     "ClippedPlanarBreakthroughMask",
        "ClippedPlanarBreakthroughMaskProgrammableBlending": "ClippedPlanarBreakthroughMaskProgrammableBlending",

        "CircularBreakthroughPrepass":                  "CircularBreakthroughPrepass",
        "DebugCircularBreakthroughPrepass":             "DebugCircularBreakthroughPrepass",
        "CircularBreakthroughMask":                     "CircularBreakthroughMask",
        "CircularBreakthroughMaskProgrammableBlending": "CircularBreakthroughMaskProgrammableBlending"
    }
}
