首页 > 其他分享 >3D Gaussion Splatting

3D Gaussion Splatting

时间:2024-10-21 22:52:03浏览次数:3  
标签:Gaussion Splatting 矩阵 协方差 mp4 np 3D 高斯

Splatting

  • 一种体渲染方法,从3D物体渲染到2D平面

  • 也叫抛雪球方法

  • 核心

    • 选择雪球

    • 抛掷,3D投影到2D

    • 合成形成最后图像

捏雪球

(搞定一个核形状)

选择3D高斯椭圆

仿射后高斯仍闭合

3D降2D依然为高斯(沿一个轴积分)

3D gaussian为什么是椭球?

v的概率密度函数

x的概率密度函数

把变换矩阵A转换为协方差矩阵

一维:均值和方差相关

高维:均值和协方差矩阵

协方差矩阵:

都是常数,二维时是椭圆

  • 三维

推导公式发现 ------ 为常数时,有一个椭球面

高斯取值范围0~1,两边同时乘根号下,可知3D高斯本质是椭球面一层一层相嵌套(俄罗斯套娃)实心的椭球

各向同性

  • 在所有方向具有相同扩散程度(球)

  • 3d高斯分布:协方差矩阵是对角矩阵

各向异性

  • 在不同方向具有不同扩散程度(梯度)

  • 椭球

  • 3d高斯分布:协方差矩阵是对角矩阵

协方差矩阵如何控制椭球形状

x是三位xyz

Σ是协方差

  • 对于标准的高斯分布:

  • 对角线是1,其他为0

任意高斯可以看作是标准高斯通过仿射变换得到

协方差矩阵可以通过旋转和缩放矩阵表达

R:旋转

S:缩放

b:平移

知道了Σ可以通过特征值得到R、S

计算协方差矩阵的代码

computeCov3D函数

 def computeCov3D(scale, mod, rot):
 S = np.array([[scale[0]*mod,0,0],
             [0,scale[1]*mod,0],
             [0,0,scale[2]*mod]])
 R = rot
 M = np.dot(S,R)
 cov3D = np.dot(M,M.T)
 return cov3D

scale: 缩放(一列数)

rot: 旋转(3×3矩阵)

mod:缩放(默认为1)

  • 先将输入的S变成3*3的正常的矩阵

  • R = rot 还是原来的旋转矩阵

  • m =R*S

  • 高斯协方差 cov3D = R*S *S转置 * R转置= m*m转置

抛雪球(3D到像素)

CG

  • 观测变换

  • 投影变换

  • 视口变换

  • 光栅化

观测变换

世界坐标系到相机坐标系

横看成岭侧成峰,远近高低各不同

仿射变换

w = Ax + b

投影变换

相机坐标系直接到2D的一个空间

3D到2D

正交投影,与z无关(右,没有远小近大)

透视投影,与z相关(左)

视口变换
  • 进行拉伸,与z无关

  • 最开始将长方体拉伸成正方体,在这一步要拉伸回来

  • 将[-1 , 1]2的矩形变换至[0,w] × [0 ,h]

  • 此时已经将任意3D拉伸到2D平面

光栅化
  • 把东西画在屏幕上

  • 连续转离散

  • 采用方法:采样

    从连续空间到离散空间

正交投影
  • 立方体[l,r] * [b,t] * [f,n] 左右上下前后

  • 平移到原点

  • 立方体缩放至[-1,1]3的正方体

  • 仿射变换

  • 左:缩放 右:平移

透视投影
  • 近小远大

  • 先把锥体“压”成立方体

  • 再正交投影

  • 透视投影是非线性的,即非仿射变换

    我们希望高斯椭球一直进行仿射变换(简单不复杂)

Blender仿真&代码
 frame = create_canvas(700,700)  //700*700的画布
 angle = 0                     //相机位置放在(0,0,5)
 eye = [0,0,5]
 pts = [[2,0,-2],
        [0,2,-2],
        [-2,0,-2]]           //有三个点
 viewport = get_viewport_matrix(700,700)       //视口变换的矩阵
 ​
 mvp = get_model_matrix(angle)
 mvp = np.dot(get_view_matrix(eye),mvp)          //观测矩阵
 mvp = np.dot(get_proj_matrix(45,1,0.1,50),mvp)  //投影矩阵
 ​
 pts_2d = []
 for p in pts:                                 //遍历每个点
     p = np.array(p + [1])
     p = np.dot(mvp,p)                        //每个点先乘变换矩阵
     print(p)
     p/= p[3]                                 //归一化
 ​
     p = np.dot(viewport,p)[:2]   //最后乘以视口变换的矩阵,拉回原有大小w*h
     pts_2d.append([int(p[0]),int(p[1])])      //2D层面每个点的值

3D高斯

观测变化

(均值&协方差)

投影变换

  • 空间中任何一个点进行x = m(t)的变化 非线性

  • 均值可以,一个点

  • 协方差矩阵不行,多个点非线性变化

    因此引入雅可比

    从透视投影到正交投影

    非线性变换,非仿射

    雅可比近似矩阵

投影变换后

此时均值和协方差在一个坐标系里吗?

均值

在NDC坐标系里([-1,1]3的立方体里)

需要做视口变换

协方差矩阵

在未缩放的的正交坐标系里

范围[l,r]×[b,t]×[f,n]

不需要视口变换

雅可比矩阵
  • 泰勒展开(导+导导+导导导+......)

  • 线性逼近(线性逼近一个非线性的东西)

    坐标变换(x,y)

公式:



视口变换

(只对中心点有关系,均值,与协方差没关系)

  • 高斯核中心 进行平移+缩放

  • 足迹渲染:离散计算 与协方差有关

    距离均值越近值越大

代码部分
3D高斯中心的变换
 p_hom = transformPoint4x4(p_orig,projmatrix)  //有一个点P通过projmatris观测、投影变换得到新的点(pro是观测变换×投影变换得到的矩阵)
 p_w   = 1/(p_hom[3] + 0.0000001)
 p_proj= [p_hom[0]*p_w,p_homp[1]*p_w,p_hom[2]*p_w]  //归一化
 //此时这个点在正方体里
 point_image = [ndc2Pix(p_proj[0],W),ndc2Pix(p_proj[1],H)]
 //光栅化,从NDC平面拉到像素平面
3D高斯协方差矩阵的变换
 def computeCov2D(mean, focal_x, focal_y, tan_fovx,                          tan_fovy, cov3D, viewmatrix):  
     t = transformPoint4x3(mean, viewmatrix)  
     limx = 1.3 * tan_fovx  
     limy = 1.3 * tan_fovy  
     txtz = t[0] / t[2]  
     tytz = t[1] / t[2]  
     t[0] = min(limx, max(-limx, txtz)) * t[2]  
     t[1] = min(limy, max(-limy, tytz)) * t[2]  
     J = np.array([  
         [focal_x / t[2], 0, -(focal_x * t[0]) / (t[2] * t[2])],  
         [0, focal_y / t[2], -(focal_y * t[1]) / (t[2] * t[2])],  
         [0, 0, 0]])  
     W = viewmatrix[:3, :3]  
     T = np.dot(J, W)  
     cov = np.dot(T, cov3D)  
     cov = np.dot(cov, T.T)   
     cov[0, 0] += 0.3  
     cov[1, 1] += 0.3  
     return [cov[0, 0], cov[0, 1], cov[1, 1]]
  • viewmatrix : 世界坐标系转换到相机坐标系变换矩阵

  • 雅可比矩阵:视锥到立方体的变化

    mean是世界坐标系的中心点

    focal_x,focal_y : x轴方向和y轴方向的焦距

    tan_fovx,tan_fovy: 视角

    cov3D:世界坐标系的3D高斯协方差矩阵

①算t:视锥里的位置

因为雅可比矩阵要求在一个点附近,才符合以线性去代替非线性的原理

这个点就是3D高斯的中心点

②雅可比矩阵

J = np.array......

此处与代码一一对应 (最后一行由于正交矩阵的时候不考虑z轴方向,不需要管,直接0就行)

③计算W、T

W是观测矩阵的前三行的值

T = J*W

④二维协方差矩阵cov = T*cov3D*cov3D的转置* T的转置

两行两列:

  • 这里+0.3是为了加一个低通滤波器,把光栅的单独的离群点做一个优化

真正有效的是三个值,cov(0,0) cov(0,1) cov(1,1)



雪球颜色

基函数

  • 任何一个函数都可以分解成正弦和余弦的线性组合

代码

 def computeColorFromSH(deg, pos, campos, sh):   
     dir = pos - campos  
     dir = dir / np.linalg.norm(dir)  
     result = SH_C0 * sh[0]  
     if deg > 0:  
         x, y, z = dir  
         result = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3]    
     if deg > 1:  
         xx, yy, zz = x * x, y * y, z * z  
         xy, xz, yz = x * y, x * z, y * z  
         result = (result +   
                   SH_C2[0] * xy * sh[4] +  
                   SH_C2[1] * yz * sh[5] +  
                   SH_C2[2] * (2.0 * zz - xx - yy) * sh[6] +  
                   SH_C2[3] * xz * sh[7] +  
                   SH_C2[4] * (xx - yy) * sh[8])  
   
     return result
  • deg:用了几阶球谐函数就是几

  • pos:3D高斯的中心

  • campos:相机的位置

  • sh:球谐函数的系数

    dir求方向(颜色与方向有关)

    从相机中心指向3D高斯的中心

    第二步归一化

result是第零阶的结果

[1×3],RGB的基础颜色

只是第零阶就只有一种颜色

if deg:此时与方向有关

赋值xyz

各自的系数相乘xyz

第二阶段相乘就行

为什么球谐函数更好的表达颜色

  • 一般是RGB 1*3的一个矩阵

  • 球谐函数 16*3 表达更多更好

CG的角度去看

环境贴图

将一个图贴到表面上,营造出一个反射的效果,使表面看起来更光滑

这个球谐函数的球与高斯3D椭球没有关系!!这里的球是颜色空间里的球

合成图片

足迹合成

  • 直观上进行α-blending

  •  sheets = []        //遍历所有高斯
     for g in gaussians:
         sheets.append(g.footprint)  //每个高斯足迹函数添加到sheets列表里
     alpha_blending(sheets)   //对所有足迹进行α_blending操作
  • 实际上G.footprint 依然对每一个像素着色(算每一个足迹的时候)

  •  footprint = np.zeros(H,W,3)   //空的矩阵
     for i in range(H):       //遍历每一个像素给颜色
         for j in range(W):
             footprint[i,j] = ...

像素的颜色

深度排序:扔雪球有先后顺序,谁前谁后

体渲染——连续积分

  • 连续积分,0~∞

  • δ(s) 在s点处它的密度

  • C(s) 在s点处的颜色

  • T(s) 一个像素点会有两个光,但我的光会特别亮遮蔽住你的光,T(s)光线没有被阻拦的概率,若被阻拦则直接为0

将一条直线分割成等份的段,进行离散化处理

高性能渲染与机器学习

GPU

  • cuda变成splatting部分

  • 一个线程负责一个像素

splatting渲染

  • 遍历所有像素,模拟GPU对单一像素的操作

  • 遍历所有高斯,由近到远进行渲染

可重新点亮的 Gaussian Codec 头像

简介

Relightable Gaussian Codec Avatars,这是一种构建 高保真可重新照明的头部头像,可以进行动画处理以生成新颖的表情。

基于 3D 高斯的几何模型可以捕获 3D 一致的亚毫米细节

为了统一支持眼睛、皮肤和头发等人体头部的各种材料

提出一种基于可学习的辐射转移的新型可重新打光外观模型。 结合漫反射组件的全局照明感知球谐波,我们可以实现使用球形高斯进行全频反射的实时重新照明。 此外观模型可以在点光和连续光下实时高效地重新建模照明。

方法

  • RGCA以潜在为条件表达代码,凝视信息,和目标视图方向

  • 底层几何体由 3D 参数化 Gaussian 的 Platting 技术可以有效地渲染

  • 为了实现不同照明下的高效重照明,我们提出了一种基于漫射球谐波和镜面球高斯的可学习辐射传输方法

  • 分解控件

    表情

    file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/expression.mp4?lastModify=1729175670

目光

file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/gaze.mp4?lastModify=1729175670

视图

file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/view.mp4?lastModify=1729175670

照明

file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/lighting.mp4?lastModify=1729175670

应用

VR 中的交互式重新照明和渲染

  • 交互式点光源控制以及重新照明 自然照明

    可以让VR看上去更加自然,当移动光源时,对应的VR图像也会由于渲染而变化,产生真实的阴暗变化形象

    file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/VR_demo.mp4?lastModify=1729175670

视频驱动动画

  • RDCA可以从视频流中实时驱动头戴式摄像头(HMC)

    相当于对渲染出来的图像人物带上一个头戴式摄影机,此时在任何时候都可以监视到摄像头传出来的画面

    file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/driving.mp4?lastModify=1729175670

高斯头像:通过动态高斯的超高保真头部头像

介绍

  • 由可控的 3D 高斯表示的高斯头部虚拟形象,用于高保真头部虚拟形象建模

  • 优化了中性 3D 高斯分布和完全学习的基于 MLP 的变形场,以捕获复杂的表达式

    1. 完全学习的 (Fully Learned):这意味着整个模型或方法是通过机器学习(特别是深度学习)来训练和优化的,而不是通过传统的编程或手工设计的规则。

    2. MLP (多层感知机):这是一个神经网络模型,由多个层组成,包括输入层、隐藏层和输出层。MLP通常用于各种任务,如分类、回归等。

    3. 变形场 (Deformation Field):在计算机视觉和计算机图形学中,变形场是一种表示物体形状变换的工具。例如,在图像处理领域,变形场可以用来进行图像配准、图像变形等。

    完全学习的基于MLP的变形场 结合了这几个概念,具体来说,它指的是使用多层感知机(MLP)来学习和生成变形场。这个方法的步骤通常包括:

    • 训练:用大量的数据来训练一个MLP网络,使其能够学习到如何将输入数据(例如,源图像)变形到目标数据(例如,目标图像)。

    • 生成变形场:训练好的MLP模型可以生成变形场,这个变形场可以用来在图像之间进行对齐、配准或其他变形操作。

方法

  • 首先在 Initialization 阶段优化了包括中性网格、变形 MLP 和彩色 MLP 在内的引导模型

  • 使用它们来初始化中性高斯和动态生成器

  • 通过可微渲染和超分辨率网络合成 2K RGB 图像

file:///C:/Users/Wanghao/Documents/Hexo/myblog/source/_posts/mp4/more_cross_3.mp4?lastModify=1729175670

  • 不同方法对跨身份重演任务的定性比较。从左到右:NeRFBlendShape、NeRFace、HAvatar 和 Ours。我们的方法合成高保真图像,同时保证表达转移的准确性。

修剪 3D 高斯展开以实现精确的几何体表示

介绍

  • 通过高斯修剪获得场景的精确 3D 几何图形

  • 选择性地去除不准确的几何图形,同时保留准确的结构

  • 分析单个 3D 高斯分布的贡献,并提出了一种基于贡献的修剪策略来去除冗余或不准确的高斯分布

  • 相对较小的高斯尺度是表示和优化复杂细节的不可忽视的因素

  • 原始 3DGS 和最先进的 2DGS 结合使用时,TrimGS 始终可产生更精确的几何图形和更高的感知质量

Trim3DGS 可以重建比 3DGS 更平滑的法线贴图

与 2DGS 相比,我们的 Trim2DGS 表现出更好的几何细节和感知质量

  • Trim比原始方法存储更小,3D会变得平滑一点,2D会让原本臃肿的画面变得细腻

  • Trim2DGS 可产生更均匀的高斯分布,同时减少存储消耗

个人博客:https://myblog.b2wang.cn

标签:Gaussion,Splatting,矩阵,协方差,mp4,np,3D,高斯
From: https://blog.csdn.net/w574993075/article/details/143030199

相关文章

  • Trim3D
    TrimGS------修剪3D高斯飞溅论文链接:TrimGS1.NeRF++1.1介绍在原始NeRF(NeuralRadianceFields)基础上进行改进和扩展的一种神经渲染技术。该技术主要解决了NeRF在处理大尺度、无边界场景(如室外360度场景)时面临的挑战,并提高了渲染质量和效率1.2改进地方形状-辐射模糊性......
  • 云渲染与3D视觉效果如何影响珠宝行业!
    3D渲染技术在珠宝行业的应用正迅速增长,2023年已带来数亿元收益,预计2024年将继续保持增长态势。珠宝品牌正越来越多地采用3D可视化技术来提升产品展示,以在激烈的市场竞争中占据优势。云渲染技术不仅提升了渲染效率,还降低了成本,同时保持输出质量。这种技术尤其在珠宝设计领域表现出......
  • 3D交互营销的应用领域有哪些?
    近年来,随着数字体验经济逐渐成为主流,3D交互式营销凭借其解决产品展示差异性和互动性不足的优势而日益兴盛,帮助产品在众多同类中凸显特色。3D营销正逐步为众多行业开辟新的机遇与挑战,它已广泛应用于电商、汽车、数码家电、家居、时尚、教育、制造及文博等多个领域。1、汽车行......
  • 3D模型师
    一、3D模型师的工作内容3D模型师主要负责使用专业的3D建模软件,根据设计需求创建三维模型。这些模型可能用于游戏开发、影视制作、建筑设计、工业设计、VR/AR技术等多个领域。具体工作内容包括:产品三维建模及渲染:根据设计需求,创建高质量的三维模型,并进行渲染处理,使其达到逼真......
  • Unity3D c# 使对象物体始终面向摄像机
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLookAtMainCamera:MonoBehaviour{ //Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){......
  • 3D Animation Animated Movie
    AssessmentTask3:3DAnimationIntroductionForthisassignmentyouwillcreateashortanimationtoshowcaseyouknowledgeofanimationtechniques,lightingandtextures. AssessmentDetailsDueDate: Friday,1stNovember,11:55pmWeight: 50%Thisass......
  • 3DA3 C02 Predictive Data Analytics
    Assignment1,Commerce3DA3C02-PredictiveDataAnalyticsTocompletethisassignment,pleasecreateaJupyternotebook.Thecodeinyourjupyternotebookshouldprovideanswerstoquestionsaskedintheassignment.Pleasesubmittheassignmentbyuploadin......
  • 0x3D service
    0x3Dservice1.概念2.Requestmessage数据格式3.Responemessage数据格式3.1正响应格式3.2negativeresponecodes(NRC)4.示例4.1正响应示例:4.2NRC示例1.概念UDS(统一诊断服务)中的0x3D服务,即WriteMemoryByAddress(按地址写内存)服务,允......
  • (环境篇日志-CVPR2024 ) Physical 3D Adversarial Attacks against Monocular Depth E
    题目:Physical3DAdversarialAttacksagainstMonocularDepthEstimationinAutonomousDriving作者:JunhaoZheng,ChenhaoLin*,JiahaoSun,ZhengyuZhao,QianLi,ChaoShen*单位:Xi’anJiaotongUniversity收录:CVPR2024论文:[Physical3DAdversarialAttacks......
  • 3dsMax:3dsMax基础操作与界面介绍_2024-07-15_15-24-33.Tex
    3dsMax:3dsMax基础操作与界面介绍一、3dsMax简介1.13dsMax的历史与发展3dsMax,原名3DStudioMax,是由Autodesk公司开发的一款基于PC的三维动画渲染和建模软件。它的历史可以追溯到1990年代初,当时由YostGroup开发的3DStudio系列软件在DOS平台上首次亮相,随后在Window......