Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
include
resources
samples
src
test
.gitignore
README.md
cinderblock.png
cinderblock.xml

README.md

Cinder-Skinning Block

This block aims to facilitate asset loading, skeletal animations and cpu/gpu mesh skinning.

Installation

  1. Clone inside the Cinder block folder:

     cd [Cinder]/blocks/
     git clone https://github.com/num3ric/Cinder-Skinning.git
    
  2. Download the compiled assimp static libraries here: https://dl.dropbox.com/u/29102565/lib/lib.zip

  3. Extract the lib/ folder and place it insider the Cinder-Skinning block folder. You should have the following folder hierarchy: ../blocks/Cinder-Skinning/lib/macosx/libassimp.a, etc.


Alternatively, you can compile Assimp from source by using the latest version on available here: https://github.com/assimp/assimp.git We used the following command to compile it:

cmake -G "Unix Makefiles" -DBOOST_ROOT="../cinder_master/boost" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -fvisibility-inlines-hidden" -DCMAKE_BUILD_TYPE=Release -DASSIMP_BUILD_STATIC_LIB=true -DCMAKE_OSX_ARCHITECTURES="i386;x86_64"

To create a new project which uses Cinder-Skinning, use TinderBox to link your project against this block.

Samples Overview

SeymourDemo: This is the basic demo. It showcases the standard collada seymour.dae file. The animation is played by moving the mouse left and right. Furthermore, any other assets can be tested/loaded by drag-and-dropping them onto the app window.

01

CustomShaderDemo: illustrates how it is possible to use custom shaders instead of calling SkinningRenderer::draw. Note however that any custom shader must maintain some skinning code (especially the vertex shader).

02

ArmyDemo: shows how it is possible to instantiate multiple instances of an asset, where each skinned mesh can individually have different animation poses.

03

ProceduralAnim: demontrates that it is possible to animate skeletons procedurally by interacting directly with transformations at the bone/node level.

04

ProceduralAnim: illustrates the functionalities related to an asset with multiple animation cycles, and how these animations can be blended using blend weights.

05

KinectDemo: This demo needs to be rewritten.

Common Use

Storing and loading a SkinnedVboMeshRef called mCharacter can be done with the following assignment : mCharacter = SkinnedVboMesh::create( loadModel( getAssetPath( ... ) ) ); or equivalently via mCharacter = SkinnedVboMesh::create( loadModel( loadResource( ... ) ) );

Use the SkinnedMesh class instead of SkinnedVboMesh to use ci::TriMesh instead of a ci::VboMesh.

The animation is done at the skeleton level, for example: mCharacter->getSkeleton()->setPose( time );

However, animating the skeleton doesn't automatically animate a skinned mesh containing it (for the moment at least) so a mCharacter->update(); is necessary.

Rendering can be done via our default renderer implementation: SkinningRenderer::draw( mCharacter )

Architecture

06

TODOs

With the graphics cinder rewrite:

  • Reinforcing the loader, fail elegantly
  • Asynchronous loading (shared OpenGL context required)

In general:

  • Progress on animation API (timeline, animation blending)
  • Finish Kinect sample (skeleton remapping?)
  • Samples are great, but tests would help, especially for the anim curves code
  • Assimp independance so that models can be saved and loaded (via a standard format) without it
  • Integrate Obj-loader as a ModelSource
You can’t perform that action at this time.