• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
高斯渲染公式(3)
 
 
 
 
 
 

https://blog.csdn.net/weixin_50973728/article/details/136940955

 

 

 

https://blog.csdn.net/weixin_50973728/article/details/136940955

108、3D Gaussian Splatting for Real-Time Radiance Field Rendering

 

 

 

 

 

 

 

 

 图像为

 


在这里插入图片描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【转载】3D Gaussian Splatting中的数学推导

http://www.yindaheng98.top/%E5%9B%BE%E5%BD%A2%E5%AD%A6/3D%E9%AB%98%E6%96%AF%E6%95%B0%E5%AD%A6%E6%8E%A8%E5%AF%BC.html#derivation-of-splatting

 

 

 

 

 

 

if (denom2inv != 0)
 {
 // Gradients of loss w.r.t. entries of 2D covariance matrix,
 // given gradients of loss w.r.t. conic matrix (inverse covariance matrix).
 // e.g., dL / da = dL / d_conic_a * d_conic_a / d_a
 dL_da = denom2inv * (-c * c * dL_dconic.x + 2 * b * c * dL_dconic.y + (denom - a * c) * dL_dconic.z);
 dL_dc = denom2inv * (-a * a * dL_dconic.z + 2 * a * b * dL_dconic.y + (denom - a * c) * dL_dconic.x);
 dL_db = denom2inv * 2 * (b * c * dL_dconic.x - (denom + 2 * b * b) * dL_dconic.y + a * b * dL_dconic.z);
 // Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, 
 // given gradients w.r.t. 2D covariance matrix (diagonal).
 // cov2D = transpose(T) * transpose(Vrk) * T;
 dL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc);
 dL_dcov[6 * idx + 3] = (T[0][1] * T[0][1] * dL_da + T[0][1] * T[1][1] * dL_db + T[1][1] * T[1][1] * dL_dc);
 dL_dcov[6 * idx + 5] = (T[0][2] * T[0][2] * dL_da + T[0][2] * T[1][2] * dL_db + T[1][2] * T[1][2] * dL_dc);
 // Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, 
 // given gradients w.r.t. 2D covariance matrix (off-diagonal).
 // Off-diagonal elements appear twice --> double the gradient.
 // cov2D = transpose(T) * transpose(Vrk) * T;
 dL_dcov[6 * idx + 1] = 2 * T[0][0] * T[0][1] * dL_da + (T[0][0] * T[1][1] + T[0][1] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][1] * dL_dc;
 dL_dcov[6 * idx + 2] = 2 * T[0][0] * T[0][2] * dL_da + (T[0][0] * T[1][2] + T[0][2] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][2] * dL_dc;
 dL_dcov[6 * idx + 4] = 2 * T[0][2] * T[0][1] * dL_da + (T[0][1] * T[1][2] + T[0][2] * T[1][1]) * dL_db + 2 * T[1][1] * T[1][2] * dL_dc;
 }

  

 

dL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc);

  

 

 

 

// Compute loss gradient w.r.t. matrix M
// dSigma_dM = 2 * M
glm::mat3 dL_dM = 2.0f * M * dL_dSigma;

  

 

 

 

https://www.bilibili.com/video/BV1cz421872F/?spm_id_from=333.788&vd_source=f88ed35500cb30c7be9bbe418a5998ca

posted on 2024-07-02 16:36  MKT-porter  阅读(188)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3