banmo
banmo copied to clipboard
Bone reinitialization
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!
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.