Part of the Khronos Group

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 1 of 1

Thread: GPU Matrix Palette Skinning Tutorial for OgreXML files

  1. #1
    Newbie Newbie
    Join Date
    Mar 2014

    Lightbulb Skinned Skeletal Animation Tutorial with GLSL Matrix Palette Skinning

    Today I completed a skinned skeletal animation tutorial, which is very helpful if you are just about to start with game development.

    Different from the other tutorials I found in the web, this one is very light weight ( < 800 lines for the main mesh & animation code ) and works well with most modeling environments.


    It has the following properties / features:
    • GPU Skinning / Matrix Palette Skinning
    • Bump Mapping (automatic normal map generation)
    • Spheric environment mapping
    • Ogre XML Based
    • Shaders in GLSL
    • Visual Studio 2010
    • Select LOD level with F1..F5

    The workflow is as follows:
    • Design the Model in Maya/MAX/Blender/etc.
    • Export the model using the OgreExporter
    • Convert the model from Ogre binary to Ogre XML (batch file is included)
    • Load the model in the tutorial code

    Main Skinning in GLSL:

    The main skinning is done in the vertex shader and only requires a few lines.
    For the shader, the skinning weights are stored in the color information as 3 floats.
    The bone IDs are unpacked from the w coordinate of the position information.
    The bone matrixes are stored as simple matrix array.

    Code :
    uniform mat4 bones[100];
    uniform int  use_skinning;
    void main(void)
        mat4 mfinal = gl_ModelViewMatrix ;
        // skinning
            vec3 weights=;
            vec3 boneid = gl_Vertex.w * vec3( 1.0/128.0 , 1.0 , 128.0 );
            boneid = (boneid - floor(boneid))*128.0;
            mat4 mskin  =    bones[int(boneid.x)]*weights.x+
            mfinal = mfinal * mskin;
        gl_Position    = gl_ProjectionMatrix * mfinal * vec4(,1.0);

    Animating Notes for Maya
    For Maya, put all animations in one time-line and export them as separate animations.
    Ogre Export
    Tangents need to be exported as 4D, to include the handedness. The tutorial version does not generate the tangents in the shader as it is faster to read them from the memory.
    Bump Mapping
    For the Ogre Material file, the bump map needs to be added manually by hand using the texture_bump parameter as follows:
    texture Texture\masterchief_base.tif
    texture_bump Texture\masterchief_bump_DISPLACEMENT.bmp
    Environment Mapping
    Environment mapping can be switched on in the material file using the following parameter:
    env_map spherical

    Get it here :
    (I am new here so cant post a clickable URL yet)
    Last edited by Dark Photon; 03-03-2014 at 04:47 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts