zhan-xu / RigNet

Code for SIGGRAPH 2020 paper "RigNet: Neural Rigging for Articulated Characters"
GNU General Public License v3.0
1.36k stars 189 forks source link

Doubt related to the calc_surface_geodesic function #55

Closed dhorka closed 3 years ago

dhorka commented 3 years ago

Hi, I would like to know why this function is used the sample_points_poisson_disk instead of sample_points_uniformly. Is there any specific reason for that? Another question is if this function is based on any previously described method that I can review.

Thanks!

zhan-xu commented 3 years ago

sample_points_uniformly samples points based on the triangle area. They might not be uniformly distributed in the space. A common method to sample uniformly without clustering points is poisson disk sampling. You can refer this blog https://www.jasondavies.com/poisson-disc/

dhorka commented 3 years ago

Thanks!! And for the formulation used on the surface_geodesic function, is there any paper related to that? I remember that in your paper you have mentioned that you are using a method to approximate this geodesic distance. Is it in this function where this approximation is used?

zhan-xu commented 3 years ago

There are two different geodesic distances. The first one is surface geodesic distance (calc_surface_geodesic). I approximated it by sampling points on the surface, connecting nearby points, and find all-pair shorted path. The second one is volumetric geodesic distance (geometric_proc.compute_volumetric_geodesic). I approximated it by checking visibly (ray-surface intersection) from interior points to surface points, and if not visible, I complemented the remining difference by surface geodesic distance. These two are both engineering tricks, so no reference papers.

dhorka commented 3 years ago

Could you tell me, in which cases are you using each one? As you said, you are using two different geodesic distances. I know that the volumetric geodesic distance is used to find the closest bones and to compute the inverse of the geodesic distance. But the surface geodesic distance when is used? About the paper I was asking in the previous comment, in your paper have stated that:

Screenshot_20210804_140047

As you see you say something about using an implementation proposed in other works. For this reason I was asking which one are the one based on this paper you mention.

zhan-xu commented 3 years ago

surface geodesic distance is used to get geodesic edges among vertices. Function "get_geo_edges" used that. Do you mean the paper [Dionne and de Lasa 2013]? As shown in the reference, it is "Geodesic Voxel Binding for Production Character Meshes". They don't have implementation. It is one feature integrated in Maya. We only adopted similar idea.