{
    "Name": "PbrOpenSubdiv",
    "OverrideMaterial": "engine:pbrCommon.rematerialdefinition",
    "Parameters": {
        "Buffers": {
            "tessellationHi"        : "geometry.tessellationHi",
            "tessellationLo"        : "geometry.tessellationLo",
            "P"                     : "geometry.P",
            "P1"                    : "geometry.P1",
            "P2"                    : "geometry.P2",
            "patchParam"            : "geometry.patchParams",
            "textureUVCoordinates"  : "geometry.vertexUV|values",
            "textureUVPatchIndices" : "geometry.vertexUV|indices",
            "textureUVPatchParams"  : "geometry.vertexUV|patchParams"
        }
    },
    "Techniques": [
        {
            "Name": "Transparent_SubDiv",
            "InheritFromTechnique": "Transparent",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsRealityPbr"
            },
            "InheritState": true,
            "FunctionConstants" : {
                "EnableScreenSpaceAdaptiveTessellation" : "false"
            }
        },
        {
            "Name": "TransparentLite_SubDiv",
            "InheritFromTechnique": "TransparentLite",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsRealityPbr"
            },
            "InheritState": true,
            "FunctionConstants" : {
                "EnableScreenSpaceAdaptiveTessellation" : "false"
            }
        },
        {
            "Name": "TransparentOverdraw_SubDiv",
            "InheritFromTechnique": "TransparentOverdraw",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsOverdrawDebug"
            },
            "InheritState": true,
            "FunctionConstants" : {
                "EnableScreenSpaceAdaptiveTessellation" : "false"
            }
        },
        {
            "Name": "Opaque",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsRealityPbr"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "GreaterEqual"
            },
            "FunctionConstants" : {
                "EnableBaseColorMap"    : "true",
                "EnableNormalMap"       : "true",
                "EnableEmissiveMap"     : "true",
                "EnableAreaLight"       : "true",
                "EnableSeparateRMAS"    : "true",
                "EnableRoughnessMap"    : "true",
                "EnableMetallicMap"     : "true",
                "EnableAOMap"           : "true",
                "EnableSpecularMap"     : "true",
                "EnableClearcoat"       : "false",
                "VertexColorOption"     : "0",
                "EnableIBL"             : "true",
                "EnableScreenSpaceAdaptiveTessellation" : "false",
                "EnableAREnvProbe"      : "false"
            },
            "DefaultVariations" : [ "OpaqueCommon" ],
            "DebugMapping": "PbrDebug",
            "SupportsRuntimeFunctionConstants" : true
        },
        {
            "Name": "OpaqueLite",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsRealityPbr"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "GreaterEqual"
            },
            "FunctionConstants" : {
                "VertexColorOption"     : "0",
                "EnableScreenSpaceAdaptiveTessellation" : "false"
            },
            "DefaultVariations" : [ "OpaqueCommon" ],
            "DebugMapping": "PbrDebug",
            "SupportsRuntimeFunctionConstants" : true
        },
        {
            "Name": "OpaqueOverdraw_SubDiv",
            "InheritFromTechnique": "OpaqueOverdraw",
            "VertexShader": {
                "Entry": "vsRealityPbrOpenSubdiv"
            },
            "PixelShader": {
                "Entry": "fsOverdrawDebug"
            },
            "InheritState": true,
            "FunctionConstants" : {
                "EnableScreenSpaceAdaptiveTessellation" : "false"
            }
        },
        {
            "Name": "FadeOpaque",
            "InheritFromTechnique": "Transparent_SubDiv",
            "InheritState": true,
            "FunctionConstants" : {
                "EnableTransparency" : "false"
            }
        },
        {
            "Name": "FadeOpaqueLite",
            "InheritFromTechnique": "TransparentLite_SubDiv",
            "InheritState": true,
            "FunctionConstants" : {
                "EnableTransparency" : "false"
            }
        },
        {
            "Name": "FadeOpaque_BackCompat",
            "InheritFromTechnique": "FadeOpaque",
            "InheritState": true,
            "Tags" : {
                "Transparent_BackCompat" : "True"
            }
        },
        {
            "Name": "FadeOpaqueLite_BackCompat",
            "InheritFromTechnique": "FadeOpaqueLite",
            "InheritState": true,
            "Tags" : {
                "Transparent_BackCompat" : "True"
            }
        },
        {
            "Name": "DepthOnly",
            "InheritFromTechnique": "Opaque",
            "InheritState": false,
            "State" : {
                "ColorWriteMask" : "None",
                "WriteDepth": true,
                "DepthCompareFunction": "Greater"
            }
        }
    ],
    "TechniqueQualityLevelSet": [
        {
            "Name" : "OpaquePBRSet",
            "TechniqueSetBaseline" : "Opaque",
            "Techniques": ["Opaque", "OpaqueLite"]
        },
        {
            "Name" : "FadeOpaquePBRSet",
            "TechniqueSetBaseline" : "FadeOpaque",
            "Techniques": ["FadeOpaque", "FadeOpaqueLite"]
        },
       {
            "Name" : "FadeOpaquePBRSet_BackCompat",
            "TechniqueSetBaseline" : "FadeOpaque_BackCompat",
            "Techniques": ["FadeOpaque_BackCompat", "FadeOpaqueLite_BackCompat"]
        }
    ],
    "TechniqueMapping": {
        "Opaque" : "OpaquePBRSet",
        "OpaqueOverdraw" : "OpaqueOverdraw_SubDiv",
        "Shadow" : "Shadow"
    },
    "TechniqueMappingOverrides": {
        "Fade": {
            "FadeDepthPrepass": "DepthOnly",
            "FadeOpaque": "FadeOpaquePBRSet",
            "Transparent": "FadeOpaquePBRSet_BackCompat",
            "Shadow": "Shadow",
            "TransparentOverdraw" : "TransparentOverdraw_SubDiv"
        }
    }
}
