ShaderNodesDefinitions {            
    ShaderNodeDefinition BasicGPUSkinning{
        Type: Vertex
        Shader GLSL100: Common/MatDefs/ShaderNodes/HardwareSkinning/basicGpuSkinning.vert
        Documentation {            
            This Node is responsible for computing vertex positions transformation 
            of the vertex due to skinning in model space
            Note that the input position and the output are both in model Space so the output 
            of this node will need to be translated to projection space.
            This shader node doesn't take Normals and Tangent into account for full support use FullGPUSkinning
            IMPORTANT NOTE : for this node to work properly, you must declare a Int NumberOfBones material parameter to which the number of bones will be passed.
            @input modelPosition the vertex position in model space (usually assigned with Attr.inPosition or Global.position)
            @input boneMatrices an array of matrice holding the transforms of the bones assigned to this vertex. Its size is defined by the NumberOfBones material parameter
            @input boneWeight a vec4 holding the bone weights applied to this vertex (4 weights max).
            @input boneIndex a vec4 holding the bone indices assignes to this vertex (4 bones max).            
            @output modModelPosition transformed position of the vertex in model space.            
        }
        Input{
            vec4 modelPosition
            mat4 boneMatrices[NumberOfBones]
            vec4 boneWeight
            vec4 boneIndex                    
        }
        Output{
            vec4 modModelPosition                    
        }
    } 
    ShaderNodeDefinition FullGPUSkinning{
        Type: Vertex
        Shader GLSL100: Common/MatDefs/ShaderNodes/HardwareSkinning/fullGpuSkinning.vert
        Documentation {            
            This Node is responsible for computing vertex positions, normals and tangents transformation 
            of the vertex due to skinning in model space
            Note that the input position and the output are both in model Space so the output 
            of this node will need to be translated to projection space.         
            IMPORTANT NOTE : for this node to work properly, you must declare a Int NumberOfBones material parameter to which the number of bones will be passed.
            @input modelPosition the vertex position in model space (usually assigned with Attr.inPosition or Global.position)
            @input modelNormal the vertex normal in model space (usually assigned with Attr.inNormal)
            @input modelTangent the vertex tangent in model space (usually assigned with Attr.inTangent)
            @input boneMatrices an array of matrice holding the transforms of the bones assigned to this vertex. Its size is defined by the NumberOfBones material parameter
            @input boneWeight a vec4 holding the bone weights applied to this vertex (4 weights max).
            @input boneIndex a vec4 holding the bone indices assignes to this vertex (4 bones max).            
            @output modModelPosition transformed position of the vertex in model space. 
            @output modModelNormal transformed normal of the vertex in model space. 
            @output modModelTangent transformed tangent of the vertex in model space.            
        }
        Input{
            vec4 modelPosition
            vec3 modelNormal
            vec3 modelTangent
            mat4 boneMatrices[NumberOfBones]
            vec4 boneWeight
            vec4 boneIndex                    
        }
        Output{
            vec4 modModelPosition 
            vec3 modModelNormal
            vec3 modModelTangent                   
        }
    }   
}