Platform | Master |
---|---|
Linux |
This is my Advanced Graphics Software Development Techniques assignment for Bournemouth University. This project is my implementation of implicit skinning based on "Implicit Skinning: Real-Time Skin Deformation with Contact Modeling". The project is written in C++ and uses CUDA to speed up evaluation of field functions as well as perform skinning computations
- A model is segmented into mesh parts, each mesh part is determined by the underlying bone structure and the bone weights for each vertex.
- Then sample points on the surface of each mesh part are generated.
- From these sample points a compactly supported [0-1] field function is generated, the 0.5 iso-surface of this field function closely approximates the original mesh part.
- During animation each mesh part is rigidly transformed by the corresponding bone. The field function is also transformed.
- The transformed field functions are combined using composition operators that combines two field functions into one.
- Once all the fields are composed together we are left with the global field, whose 0.5 iso-surface approximates the whole mesh.
- During the skinning process we initially apply Linear Blend Weight (LBW) skinning, then we march the deformed vertices along the gradient of the global field.
- We apply some smoothing and eventually are left with an implicit skinned mesh.
- ✅ Linear Blend Weight skinning implemented on the GPU
- ✅ Marching Cube ported to GPU
- ✅ Generate fields for each mesh part.
- ✅ Pre-compute fields into 3D textures.
- ✅ Generate global field on the GPU.
- ✅ Evaluate global field on the GPU.
- ✅ Visualise Iso-Surface.
- ✅ Implemented Max composition operator.
- ✅ Implemented Vertex Projection, Tangential Relaxation according to paper.
- ✅ Implemented Onering neighbourhood
- ✅ Implemented Mean Value Coordinates to generate onering weights for Tangential Relaxation.
- ❌ Still need to implement gradient based composition operator.
⚠️ Vertex projection, marching vertex in global field producing strange results, think this is an issue with the evaluation of the global fields gradient.⚠️ Tangential Relaxation, not producing smooth results.
To build the documentation using Doxygen, run:
doxygen Doxyfile
This project has been tested on the following Platforms
OS | Version |
---|---|
Ubuntu | 16.04 |
RedHat | 7.2 |
Requires an NVIDIA CUDA enabled GPU to utilize parallel optimizations.
Name | Version |
---|---|
CUDA | >= 7 |
GLM | >= 0.9.2 (tested 0.9.8) |
Eigen | >= 3.2.9 |
ASSIMP | >= 3.3.1 |
git clone https://github.com/IdrisMiles/ImplicitSkinning.git
cd ImplicitSkinning
qmake
make clean
make
cd ImplicitSkinning/bin
./ImplicitSkinning
Load in an animation file.
- In theory any formats ASSIMP can load
- .dae (COLLADA) - tested
Key | Operation |
---|---|
W | Toggle skinned mesh wireframe |
E | Toggle rendering skinned mesh |
R | Toggle rendering Iso-Surface of global field |
T | Toggle between Implicit Skinning and Linear Blend Weight Skinning |
This is version 0.1.0
Idris Miles