Credits: igl@ETH Zurich, Alec Jacobson (New York University), Ilya Baran (Disney Research, Zurich), Jovan Popovic (Adobe Systems, Inc.), Olga Sorkine (ETH Zurich), lichterloh. Also makes heavy use of Eigen, CGAL and boost.
Shape-aware blend weight computation for 2D/3D meshes
- Input can be either triangulated 2D meshes or 3D volumetric meshes
- Supported control handles: single points, connected bones and cages (of arbitrary topology)
- Control handles can be translated, scaled and rotated
- Output can be used in blend skinning shaders for realtime performance
- Includes forward kinematics solver for rotating bones
- supports Instancing (incl. Noodles)
- girlpower, check it out!
This pack comes with several nodes:
- BoundedBiharmonicWeights: this is where the magic happens
- ForwardKinematics: a simple forward kinematics solver for rotating bones
- MatrixMultiplication: mainly used for debugging blend weights (and for now the only DX9 solution)
- LinearBlendSkinning: a shader for rendering, atm DX11 only
Also included in this pack are previous plugins of mine: triangle, tetgen and mix-(transform) as they are useful helpers here and essential for some examples.
d.o.p.e. is based on research and code from the Interactive Geometry Lab @ ETH Zurich, ie "Bounded Biharmonic Weights for Real-Time Deformations": http://igl.ethz.ch/projects/bbw/
All my code is MIT where possible; always happy about credit to digitalWannabe/lichterloh
All code from libigl is MPL2
- Pseudo edges; from the original research: linear transform helpers for point handles, which infer point rotations from their translations
- DX9 version of linear blend skinning shader
- Solution for normals
- Dual quaternion skinning shaders for smoother rotation results
- custom datatype to avoid huge spreadcounts
- improve RemovRegions (Triangle + TetGen) performance, no good
- run BoundedBiharmonicWeights on a different process to avoid blocking of vvvv
- added support for instancing (incl. hack for noodles), see 3D girlpower folder
- updated triangle/tetgen
- now works in beta (50+)
- fixed x64 precision error in girlpower patch
- the linear blend skinning shader shows an error on startup, not sure why yet....only applies to alpha versions....
NOTE: All girlpower examples require DX11 (for now!), see the help patch of the BoundedBiharmonicWeights node for a DX9 (CPU-only) version. DX9 shaders coming soon!
Nothing works? Try installing this: https://www.microsoft.com/en-us/download/details.aspx?id=48145
I know I know, I can be annoying at this point but it would be nicer to manage the dependencies with vpm instead of manual copying (in this case the triangle, Tetgen, mix transform and an optional vpack file for girlpower dependencies)
I will try this out shortly
No mate, I know you intend to help me and I know I gotta look into vpm asap as it makes things easier for everybody; just didn't have time yet....next update will be via vpm :)
I can help you with any questions you might have! also note vpm can easily deal with copying the right architecture libraries so x86 vvvv won't get confused
This is big!
glad you like it :)
THX for this amazing Contribution and for the nice vveekend vvorkshop with microdee :-)
Triangle Pin(Segments, Unity) and BoundedBiharmonicWeights
I have some issues with Bones and my Octopus
I got that I need to "Unity" the "Triangle" that "BoundedBiharmonicWeights" can do it'S magic but my Mesh looks weird. When I have more than 4Bones my Mesh get's crazy with Segments and Unity - if I switch of Segments it's ok but bones connect everything.
I can fake it with Alpha but what I didn't get here?
first: thanks + your welcome ;)
using alpha textures in complex situations definitely is a way to go, also has been suggested to me by the author of the original research; however, what you are trying to achieve should be possible without any alpha tricks. What exactly goes wrong here is hard to tell, there's no real limit to bones other than usability issues, so the number of bones should not matter here. Can you upload your patch so I can have a look?
sure I'll send you the patch and assets - it's just a modification of your 2D: 03_
bones.v4p from DOPE/girlpower
hey, sorry for the delay....seems like you found a bug in triangle; I can't reproduce it yet, but also I can't fix your patch. Where did you produce the points for the outline of the octopus?
also please be aware that you need to
1) feed triangle the segment points in the order in which they are connected, ie use the bone edge indices spread to getslice your segment points before you feed them to triangle
2) when using multiple segments each of them- in your case there are 3: two with 5 connected points, one with 7-need to have their own slice for the vertices input and the isSegment input of triangle, so use a cons with (in your case) 4 inputs and a isSegment spread with 4 slices!
i'll see if i can find and fix that bug asap....
sry for delay too - but I was in wintersleep
I tried your instructions, still weird but I see some improvements - I'll play with it again when I find some time and i'll report if I find an interesting patch behavior
now I need some time to start the new year
I send you how I produced the points - it's the contourPatch from the ImagePack
cu thx greets
hey @ceeyaa, thanks for the patch, will have a look at it asap!
I couldn't test it yet, but I did found a bug in Triangle with segments sharing the same points...please see if the latest upload solves your problem!
Did you manage to isolate the problem with the reliability of linearskinblending?
I'm having problems with it at the moment where it can be gotten to work and then, restarting with the same working setup, linearblend doesn't compose the mesh no matter how many time I try to reset the plugin.
Admitedly my mesh is highly tesslated, so is this the important factor?
to be completely honest I've been super busy doing other stuff since I've released dope, so there wasn't time to test/debug it a lot. However, while doing all the help patches I have never experienced what you are describing.
Can you isolate the problem and share that patch?
Also: you can check if the matrix produced by BoundedBiharmonicWeights makes sense by summing up its components (+ spectral on output pin)....this should (almost) match the number of vertices you pass to the BoundedBiharmonicWeights node (+-5%), plus this should come to the same result every time!
I didn't do tesselation +dope yet, but also I don't see how this would affect results, should work fine I suppose, please share a patch if you can!
@guest: as we're doing our first proper work with d.o.p.e. now I also experienced what you are describing and the problem seems to be auto layout in combination with the constant shader- the geometry composed in the IndexedGeometryBufferTriangleList subpatch has normals in it, also vertices are float3 and texcoords float2, but the constant shader does not use normals (which doesn't matter i suppose) and expects float4 for vertices and texcoords- as I understood the auto layout pin on the geometry shader is there to fix this, but it doesn't seem to work all the time.
So to fix it permanently, either make your own copy of a constant shader and change the layout in there, or change the IndexedGeometryBufferTriangleList subpatch to match the layout of the shader you use!
I will include an alternative version of IndexedGeometryBufferTriangleList inthe next release!
@digitalwannabe, thanks. There's a chance it was something to do with 32bit/64bit version of the plugin too.
Is this project abandoned? I clicked into the github link but the page is 404 dead. I attended your NODE17 workshop, which was impressive, and I thought this project was promising.
the link to github lacks the last point (.):
Does this support animating a mesh with blendshapes = eg a rigged model of a character's head in an fbx?