CoRCalculator - Library to Compute Centres of Rotation for Optimised Centres of Rotation Skinning
This is a small C++ library and re-implementation to compute optimized centres of rotation for skinning 3D graphical models with the skinning method proposed by Le and Hodgins in 2016 in their paper Real-time Skeletal Skinning with Optimized Centers of Rotation. Moreover, the library contains GLSL shaders for optimized centres of rotation skinning as well as for the classical linear blend skinning and dual-quaternion skinning. Le and Hodgins present their method in this video.
An example on how to use the library is given in example.cpp
.
The CMake file is tested on Linux and Windows.
When compiled with the flag COR_ENABLE_PROFILING
, the CoRCalculator
will print the times it has needed for each step.
The library has to be linked with the option -pthread
, as it uses multithreading (std::async).
This library solely depends on the header-only library glm
.
On Linux, installing libglm-dev
with apt
suffices.
On Windows, finding glm
may require some changes, as we do it manually.
We provide GLSL vertex shader logic for these three skeletal skinning techniques:
- Linear Blend Skinning (LBS)
- Dual Quaternion Skinning (DQS)
- Optimised Centres of Rotation Skinning (CRS).
The file skeletons.glsl
contains the perform_skinning
function, that computes one of these three methods, depending on a uniform variable.
The files quaternion.glsl
and dualquaternion.glsl
each contain utility functions for their respective mathematics and have to be compiled
together with the vertex shader because they are required by skeletons.glsl
.
We split these files so that you may pick what you need, since the skeletons.glsl
file has to be customized anyway (especially the layout locations of the attributes).
This repository contains code corresponding to:
Please cite as:
@misc{bittner2019evaluation,
title = {Evaluation of Optimised Centres of Rotation Skinning},
author = {Bittner, Paul Maximilian and Tauscher, Jan-Philipp and Grogorick, Steve and Magnor, Marcus},
howpublished = {Poster @ International Conference on Computational Visual Media 2019},
month = {Apr},
year = {2019}
}