Hi,
Thanks for your awesome contribution 😄
I'm working on a variation of this rasterizer, could you provide additional details concerning the derivation of the gradient for <scales, quaternions, means>?
The portion I'm having trouble understanding is located at cuda_rasterizer/backward.cu:548-572
// Update gradients w.r.t. scaling, rotation, position of the Gaussian
glm::mat3x4 dL_dM = P * glm::transpose(dL_dT);
float3 dL_dtn = transformVec4x3Transpose(dL_dnormals[idx], viewmatrix);
#if DUAL_VISIABLE
float3 p_view = transformPoint4x3(p_orig, viewmatrix);
float cos = -sumf3(p_view * normal);
float multiplier = cos > 0 ? 1: -1;
dL_dtn = multiplier * dL_dtn;
#endif
glm::mat3 dL_dRS = glm::mat3(
glm::vec3(dL_dM[0]),
glm::vec3(dL_dM[1]),
glm::vec3(dL_dtn.x, dL_dtn.y, dL_dtn.z)
);
glm::mat3 dL_dR = glm::mat3(
dL_dRS[0] * glm::vec3(scale.x),
dL_dRS[1] * glm::vec3(scale.y),
dL_dRS[2]);
dL_drots[idx] = quat_to_rotmat_vjp(rot, dL_dR);
dL_dscales[idx] = glm::vec2(
(float)glm::dot(dL_dRS[0], R[0]),
(float)glm::dot(dL_dRS[1], R[1])
);
dL_dmeans[idx] = glm::vec3(dL_dM[2]);
Hi,
Thanks for your awesome contribution 😄
I'm working on a variation of this rasterizer, could you provide additional details concerning the derivation of the gradient for <scales, quaternions, means>?
The portion I'm having trouble understanding is located at
cuda_rasterizer/backward.cu:548-572