ShenhanQian / GaussianAvatars

[CVPR 2024 Highlight] The official repo for "GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians"
https://shenhanqian.github.io/gaussian-avatars
Other
617 stars 93 forks source link

Question regarding local to global 3D Gaussian rotation #23

Closed Youwang-Kim closed 8 months ago

Youwang-Kim commented 8 months ago

Thanks for the great project and open-source code!

I have a question regarding your implementation about local to global 3D Gaussian rotation.

From the paper, I understood that you optimize the rotations of 3D Gaussians in their local coordinate (mesh face coordinate). To do so, you convert the local 3D Gaussian parameters to the global coordinate using a mesh face rotation matrix.

Specifically for the 3D Gaussian rotation, global rotation r' is computed as the multiplication of the "triangle (mesh face) rotation matrix R" and the "local 3D gaussian rotation matrix r". Thus, r'=Rr (from your paper and figure explanation).

However, I found the product order of rotations R and r (in quaternions) are reversed as below: https://github.com/ShenhanQian/GaussianAvatars/blob/76038ba8908d5bb3719bfec4d5ef68bf71a5a6a0/scene/gaussian_model.py#L137

I think it should be the opposite order, if rot is 3D Gaussian rotation (r) and face_orien_quat is the mesh face rotation (R). Could you clarify the reason why the quaternion product is conducted in r'=rR order?

Thanks in advance :)

ShenhanQian commented 8 months ago

Thank you very much for raising this issue!

The correct version should be r'=Rr, as we wrote in the paper.

We have pushed a new commit to fix the bug.

Youwang-Kim commented 8 months ago

Thanks for clarifying and fixing the bug :)