<spshader>
    <!--
        Notice: boolean Y or N here is case-sensitive

        name: The name of the shader (cannot be empty), you have to make sure
              no duplicated name will be introduced, and "_skinned" word is
              reserved for automatic skinned mesh shader adding.

        fallback-shader: The name of the shader to be used when advanced
                         lighting is off, make sure that shader is loaded first
                         (default is empty). STK will load list of sps*.xml
                         files in ascending order from a directory.

        transparent: If Y, than this shader will be used in transparent pass
                     (default N).

        drawing-priority: The larger this number, the later the meshes using
                          this shader will be drawn. Only useful in transparent
                          shader where drawing order matters because of alpha
                          blending (default 0 which means order doesn't
                          matter).

        use-alpha-channel: If Y, this shader is going to access alpha channel
                           from mesh texture layers. It's used to hint STK not
                           to encode colorization mask for this material using
                           this shader which it will overwrite the alpha
                           channel (default N).

        use-tangents: If Y, than meshes using this shader will have tangents
                      and bitangents defined and you can access them in shader
                      (default N).

        srgb: Sample mesh texture layers in srgb or not (in 6 Ys / Ns), when
              advanced lighting is off, srgb will always be false,
              default (Y Y N N N N), even if any texture layer is unused in
              shader, you cannot skip it from the above Y / N array.

        You can only specific 1st and shadow pass of shader in .xml
    -->
    <shader-info name="solid" fallback-shader="" transparent="N"
                 drawing-priority="0" use-alpha-channel="N" use-tangents="N"
                 srgb="Y Y N N N N"/>
    <!--
        use-function: Specify function to be run before drawing meshes with
                      this shader:

            alphaBlendUse will be suitable for drawing alpha blend material.

            additiveUse will be suitable for drawing additive material.

            ghostUse will be suitable for drawing object with translucent
            effect with face culling and depth buffer writing on.

        unuse-function: Specify function to be run after drawing meshes with
                        this shader (none at the moment).

        vertex-shader: Specify the vertex shader, it will search in the
                       directory of the location of this xml file first, if not
                       found it will search in the official shader directory.
                       Notice: if you use #stk_include in your shader file, STK
                       will only search the include header in official shader
                       directory.

        fragment-shader: Specify the fragment shader, searching rule is the
                         same as above.

        skinned-mesh-shader: Specify the skinned mesh version of the vertex
                             shader, searching rule is the same as above. You
                             have to make sure the uniforms and the textures
                             used in both skinned mesh / non-skinned mesh
                             shader are the same.
    -->
    <first-pass use-function="" unuse-function="" vertex-shader="sp_pass.vert"
        fragment-shader="sp_solid.frag" skinned-mesh-shader="sp_skinning.vert">
        <prefilled-textures>
            <!--
                prefilled-textures: Define the prefilled textures used in
                                    shaders, they will be the same for all
                                    meshes drawn using this shader.

                    name: Name of the texture used in shader (cannot be empty).

                    file: Filename of the texture, it will search using the order
                          in pushed texture searching directory
                          (cannot be empty).

                    srgb: Sample in srgb or not (specify in Y/N, default is N).
                          When advanced lighting is off, srgb will always be
                          false.

                    sampler: nearest, nearest_clamped, bilinear,
                             bilinear_clamped, trilinear, trilinear_clamped
                             and semi_trilinear are possible right now, default
                             is trilinear.
                Example:
            <prefilled-texture name="name_used_in_shader" file="texture.png"
                 srgb="Y" sampler="trilinear"/>-->
        </prefilled-textures>
    </first-pass>
    <shadow-pass use-function="" unuse-function=""
        vertex-shader="sp_shadow.vert" fragment-shader="white.frag"
        skinned-mesh-shader="sp_skinning_shadow.vert">
    </shadow-pass>
    <!--
        uniform-assigners: List of uniform assigners functions to be auto-run
                           when "use" the shader which set the uniform
                           variables in shader, currently there are:

            shadowCascadeUniformAssigner will set the current shadow
            cascade being drawn.

            windDirectionUniformAssigner will set the wind direction.

            zeroAlphaUniformAssigner should be used in transparent shader.

            fogUniformAssigner will set 0 / 1 if fog is enabled in track.

            ghostAlphaUniformAssigner will set ghost (kart) color based on sun
            color of track.

            You have to specify the uniform name in shader together with the
            bundled uniform-assigners.

            Currently you can automatically assign to uniform type int, float,
            mat4, vec4, vec3 and vec2 only.
    -->
    <uniform-assigners>
        <uniform-assigner name="layer"
        function="shadowCascadeUniformAssigner"/>
    </uniform-assigners>
</spshader>