27-04-2021, 07:25 AM
(This post was last modified: 29-04-2021, 11:50 AM by josemendez.)
(27-04-2021, 01:59 AM)Hakazaba Wrote: I just want to reiterate, that the boarder particals had a static pin to the chest this entire time. And the verts of the slave were exactly on them. There may be a bug in how barometric coords are decided
Hi,
We have a batch of unit tests for barycentric coordinate generation, and seems to be working correctly as it passes all tests.
This can be due to 1) incorrect weighting, or 2) numerical precision issues:
1) Proxy skinning uses weights for barycentric, normal and elevation. These are exposed in the skinmap editor. The weights you choose have a lot of impact on the results, so vertices might not be bound to the triangle you expect. Each vertex will be bound to the triangle that results in the lowest score for
bary_weight * barycentric_delta + normal_weight * normal_delta + elevation_weight * elevation.
This favors vertices that are closer to the triangles's barycenter, better aligned with the interpolated triangle normal, and closer to the surface of the triangle.
You can use skin channels to manually determine which triangle to bound each vertex to.
2) when determining barycentric coordinates of a vertex, the vertex is not directly projected onto the triangle's surface. An iterative method is used to determine the point in the triangle's surface that results in an interpolated normal closest to the vertex, for smooth skinning results. The precision of this process depends on the number of iterations used. So the barycentric coordinate of a vertex that's exactly on top of a triangle vertex might not be (1,0,0), or (0,1,0) or (0,0,1), but (0.999, 0,0.001), etc.