Giter Site home page Giter Site logo

implicit_skinning's Introduction

Platform Master
Linux Build Status

Implicit Skinning

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

How it Works

  • 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.

Status

Completed

  • ✅ 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.

Issues

  • ❌ 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.

Docs

To build the documentation using Doxygen, run:

doxygen Doxyfile

Supported Platforms

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.

Dependencies

Name Version
CUDA >= 7
GLM >= 0.9.2 (tested 0.9.8)
Eigen >= 3.2.9
ASSIMP >= 3.3.1

Build

Linux

git clone https://github.com/IdrisMiles/ImplicitSkinning.git
cd ImplicitSkinning
qmake
make clean
make

Run

Linux

cd ImplicitSkinning/bin
./ImplicitSkinning

Usage

Load in an animation file.

Accepted Animation Files Format

  • In theory any formats ASSIMP can load
  • .dae (COLLADA) - tested

Key Operations

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

Issues

Version

This is version 0.1.0

Author

Idris Miles

License

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.