facebookresearch / banmo

BANMo Building Animatable 3D Neural Models from Many Casual Videos
Other
521 stars 58 forks source link

Bone reinitialization #49

Open subin6 opened 1 year ago

subin6 commented 1 year ago

Hi, thank you for sharing your code.

I have a question on the following line, correct_bones in the process of bone reinitialization. https://github.com/facebookresearch/banmo/blob/c4498030aeca9b056e700892788025a80953cb5a/nnutils/geom_utils.py#L698

Why do you correct bones using the inverse of rest pose transformation? Then, are the bones in the rest pose or another state?

As far as I know, you transform bones again into the rest pose bones using the rest pose transformation afterwards. (https://github.com/facebookresearch/banmo/blob/c4498030aeca9b056e700892788025a80953cb5a/nnutils/banmo.py#L1212)

I’m wondering what is the purpose of rest pose? Also, why did not you use the default bones(before multiplying the inverse of rest pose transformation) as rest pose?

Thank you. Hope to hear from you soon!

gengshan-y commented 1 year ago

Hi, the first line you referred to

https://github.com/facebookresearch/banmo/blob/c4498030aeca9b056e700892788025a80953cb5a/nnutils/geom_utils.py#L698

transforms control points in the rest configuration (corresponding to \omega* in the paper, aligned with the rest shape) to a zero configuration.

First of all, this separate modeling of zero configuration is not an integral part of the method, the method worked without it.

The motivation of adding a zero configuration was to ensure all pose codes (rest code \omega^* and time code \omega^t) can be mapped to transforms J with the same definition:

J(\omega) = MLP_b(\omega) # J is the zero-to-any transformation

Instead defining J as the rest-to-any transformation and enforcing J(\omega^*)=Identity, we define J as zero-to-any transformation, where any can include both t and rest.

Hope this makes sense.